构建基于Hibernate的servlet(1)
xmlns="[url]http://java.sun.com/xml/ns/j2ee[/url]" tomcatJndi.HibernateAppListener Retrieval RetrieveViaHibernate InsertViaHibernate Retrieval RetrieveViaHibernate InsertViaHibernate |
◆RetrieveViaHibernate—本篇中的servlet,它查询与第一篇中相同的MySQL数据库,但现在使用的是Hibernate。
◆InsertViaHibernate—第三篇中的servlet,它在一个事务(从Hibernate中获取)边界上执行数据库插入操作。
package tomcatJndi;
import javax.servlet.ServletContextListener; import javax.servlet.ServletContextEvent; import org.apache.log4j.Logger; import org.hibernate.Session; public class HibernateAppListener implements ServletContextListener { /*应用程序启动事件*/ public void contextInitialized(ServletContextEvent ce) { Logger loggerConnect = Logger.getLogger("Connect"); try { loggerConnect.debug("In HibernateAppListener.contextInitialized"); Class.forName("tomcatJndi.HibernateUtil").newInstance(); loggerConnect.debug("In HibernateAppListener, Class.forName for
tomcatJndi.HibernateUtil successful");
} catch (Exception e) { loggerConnect.debug("In HibernateAppListener, Class.forName for
tomcatJndi.HibernateUtil throws Exception");
} } /*应用程序退出事件*/ public void contextDestroyed(ServletContextEvent ce) {} } |
package tomcatJndi;
import org.hibernate.*; import org.hibernate.cfg.*; import org.apache.log4j.Logger; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { Logger loggerRoot = Logger.getRootLogger(); Logger loggerConnect = Logger.getLogger("Connect"); loggerRoot.debug("In HibernateUtil try-clause"); loggerRoot.error("In HibernateUtil try-clause"); loggerConnect.debug("In HibernateUtil try-clause via loggerConnect DEBUG*****"); //从hibernate.cfg.xml中创建SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } } |
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction(); ...[retrieve desired results via a Hibernate query] session.getTransaction().commit(); //自动关闭会话 |
比如说,你还有一个servlet,它使用Hibernate执行某种数据库更新;那么,你的代码可能类似如下(与上面基本相同):
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction(); Car bigSUV = new Car(); bigSUV.setManufacturer("Ford"); bigSUV.setModel("Expedition"); bigSUV.setYear(2005); Driver jill = getDriverByName("Jill"); addCarToDriver(jill, bigSUV); session.getTransaction().commit(); //自动关闭会话 |
下面是我们在本系列文章中所使用的这个Hibernate配置文件的完整源码。
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" java:comp/env/jdbc/Sampdb true org.hibernate.dialect.MySQLDialect thread org.hibernate.cache.NoCacheProvider |
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/sampdb root sammy11 |
sessionFactory =new
Configuration().configure().buildSessionFactory(); |
◆jta.UserTransaction—一个应用程序服务器环境,通常你将把它设置为java:comp/UserTransaction,从而支持一个UserTransaction的JNDI查询。基于上面所陈述的理由,你也不能使用Tomcat来实现这一功能。
◆transaction.manager_lookup_class—在一个应用程序服务器环境下,这个属性可以用于显式地标识JTA实现的提供者。而通常,这个属性是无法与Tomcat联用的。
◆tomcatJndi/Driver.hbm.xml
如你所见,一个特定的映射文件也会出现在与相应的Java类相同目录下,例如Car.hbm.xml和Car.class。
在 展示我们所使用的两个映射文件内容之前,让我们先来解释一下本文相应的应用程序及其简单的数据模型。我们的应用程序是围绕一个小型家庭展开的:丈夫— Jack;妻子—Jill;儿子—James;他们家共拥有四辆汽车。他们家之所以有四辆车是因为,其中的一辆车(运动跑车)经常需要维修。另外, James开车时总是易出事故—当然,他是永远不会负责的。而且,有意思的是,当他驾驶那辆运动跑车时总是易发生事故。注意,这个家庭成员中的任何一位都 不允许别人开自己的车。结果是,在车主(司机)与汽车之间建立了一种“一对多”的关联关系(在大多数家庭中,这种关联很可能是“多对多”,但是在我们的示 例家庭中却是“一对多”)。
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" |
package tomcatJndi;
public class Car { private Long car_id; private String manufacturer; private String model; private int year; public Car() {} public Long getId() { return car_id; } private void setId(Long car_id){//注意,private类型的可见范围 this.car_id = car_id; } public String getManufacturer() { return manufacturer; } public void setManufacturer(String manufacturer) { this.manufacturer = manufacturer; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } } |
create table car(
car_id bigint(20) PRIMARY KEY not null auto_increment, manufacturer varchar(40), model varchar(40), year int, fk_driver_id bigint(20), FOREIGN KEY (fk_driver_id) REFERENCES driver (driver_id) ) |
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"[url]http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd[/url]">
package tomcatJndi;
import java.util.Set; public class Driver{ private Long driver_id; private String name; private int age; private Set carsOwned; public Driver() {} public Long getId() { return driver_id; } private void setId(Long driver_id) {//注意,private类型的可见范围 this.driver_id = driver_id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Set getCarsOwned() { return carsOwned; } public void setCarsOwned(Set carsOwned) { this.carsOwned = carsOwned; } } |
create table driver(
driver_id bigint(20) PRIMARY KEY not null, name varchar(40), age int(11) ) |
package tomcatJndi;
import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.Iterator; import java.util.Set; import org.apache.log4j.Logger; import org.hibernate.SessionFactory; import org.hibernate.Session; import org.hibernate.Query; import org.hibernate.cfg.Configuration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RetrieveViaHibernate extends HttpServlet { public RetrieveViaHibernate() { super();} public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(" "); out.println(" "); out.print(" This is BRAND NEW "); out.print(this.getClass()); out.println(," using the GET method "); doQuery(out); //使用Hibernate存取Driver和Car表 out.println(" "); out.println(""); out.flush(); out.close(); } private void doQuery(PrintWriter out) { System.out.println("In doQuery"); try { //读取hibernate.cfg.xml并且准备好hibernate Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); String SQL_QUERY ="from Driver driver"; Query query = session.createQuery(SQL_QUERY); for(Iterator it=query.iterate(); it.hasNext(); ) { Driver driver=(Driver)it.next(); out.println("Driver name: " + driver.getName() + ," " ); out.println("Driver age: " + driver.getAge() + " " ); Set carsOwned = (Set)driver.getCarsOwned(); for (Iterator itOwned = carsOwned.iterator(); itOwned.hasNext(); ) { Car carOwned = (Car)itOwned.next(); out.println(" Manufacturer: " + carOwned.getManufacturer() + ," " ); out.println("Model: " + carOwned.getModel() + ," " ); out.println("Age: " + carOwned.getYear() ); out.println(" "); } } session.getTransaction().commit();//自动地关闭会话 } catch(Exception e) { System.out.println(e.getMessage()); } finally{} } } |
Session session = HibernateUtil.getSessionFactory().openSession();
|
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
|
构建基于Hibernate的servlet(1)相关推荐
- 【java毕业设计】基于javaEE+原生Servlet+MySql的企业财务管理系统设计与实现(毕业论文+程序源码)——企业财务管理系统
基于javaEE+原生Servlet+MySql的企业财务管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+原生Servlet+MySql的企业财务管理系统设计与实现, ...
- 【java毕业设计】基于javaEE+原生servlet+tomcat的教师工资管理系统设计与实现(毕业论文+程序源码)——教师工资管理系统
基于javaEE+原生servlet+tomcat的教师工资管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+原生servlet+tomcat的教师工资管理系统设计与实 ...
- 【java毕业设计】基于javaEE+原生Servlet+MySql的企业员工信息管理系统设计与实现(毕业论文+程序源码)——企业员工信息管理系统
基于javaEE+原生Servlet+MySql的企业员工信息管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+原生Servlet+MySql的企业员工信息管理系统设计 ...
- 【java毕业设计】基于javaEE+原生Servlet+SqlServer的医院管理住院系统设计与实现(毕业论文+程序源码)——医院管理住院系统
基于javaEE+原生Servlet+SqlServer的医院管理住院系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+原生Servlet+SqlServer的医院管理住院 ...
- java毕业设计——基于java+jsp+Servlet的B2C网上拍卖系统设计与实现(毕业论文+程序源码)——网上拍卖系统
基于java+jsp+Servlet的B2C网上拍卖系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+jsp+Servlet的B2C网上拍卖系统设计与实现,文章末尾附有本毕业设 ...
- 构建基于Jenkins + Github的持续集成环境
登录 | 注册 John_cdy的专栏 学无止境 目录视图 摘要视图 订阅 有奖征资源,博文分享有内涵 6月推荐文章汇总 CSDN博文大赛初赛晋级名单公布 关注CSDN社区微信,福利多多 构建基于Je ...
- 【java毕业设计】基于javaEE+原生Servlet+MySql的Web停车场管理系统设计与实现(毕业论文+程序源码)——停车场管理系统
基于javaEE+原生Servlet+MySql的Web停车场管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+原生Servlet+MySql的Web停车场管理系统设计 ...
- 基于java web servlet生鲜商城管理系统源码含报告文档
(一)目的 电子商务的迅速兴起,网上购物也为人们的生活提供了极大的便利,不受时间和空间的限制.商城系统的兴起,扩大了消费市场的空间,对于大型企业来说,建设商城系统是正确的选择,不仅要扩大销售渠道,而且 ...
- 【java毕业设计】基于javaEE+原生Servlet+MySql的网络考试系统设计与实现(毕业论文+程序源码)——网络考试系统
基于javaEE+原生Servlet+MySql的网络考试系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于javaEE+原生Servlet+MySql的网络考试系统设计与实现,文章末尾 ...
最新文章
- 字符编码以及文件处理
- cnblog如何配置live writer
- java动态定义泛型_关于oop:具有动态性质且可完全自定义的Java泛型编程
- 应用层的信令控制协议 SIP
- Angular4.0环境搭建详解--windows系统环境
- python图的字典表示_Python dict字典精讲
- 20155238 2016-2017-2 《Java程序设计》第六周学习总结
- 得寸进尺的摩根大通 步步为营
- python for 加速_适合练习的10个Python项目,每个项目都不到500行代码
- P1067 多项式输出 【模拟】
- 【组图】韩国美女明星蔡研---精彩写真
- 树莓派Linux内核配置、编译以及烧录详细步骤
- 周易六十四卦——谦卦
- 训练集样本不平衡问题对深度学习的影响
- php 获取qq头像,免费的API接口推荐(获取QQ昵称、头像、QQ秀等等)
- 有史以来影响世界的颠覆性技术 | 未来的高附加值颠覆性技术产业
- 计算机科学导论参考文献,物联网毕业论文参考文献精选
- 中国移动宽带服务器注册灯一直闪怎么回事,中国移动光猫注册灯一直闪
- Ubuntu20.04 OpenSlide 读图Bug 解决
- Latex排版 Chapter1基本使用(文档结构插入表格、图片)
热门文章
- MySQL主从复制: MHA
- mysql update case when和where之间的注意事项
- 问题三十七:C++怎么解一元四次方程?(3)——怎么解一元四次方程
- NLP情感分析笔记(二):Updated情感分析
- 大数据开发笔记(二):Yarn分布式集群操作系统
- 大数据如何应用于食品追溯管理
- php如何连接mariadb,MariaDB 建立连接
- java 打包 根目录_java打包
- [最后几天]蓝桥杯如何优雅控分
- grpc python 负载均衡_Ambassador 0.52 新特性:会话亲和性、负载均衡控制、gRPC-Web