首先来看看hibernate开发的一个简单流程:html
(1)准备开发环境,建立Hibernate项目。
java
(2)在数据库中建立数据表。mysql
(3)建立持久化类。sql
(4)设计映射文件,使用Hibernate映射文件将POJO对象映射到数据库。数据库
(5)建立Hibernate的配置文件Hibernate.cfg.xml。缓存
(6)编写辅助工具类HibernateUtil类,用来实现对HIbernate的初始化并提供得到Session的方法,此步可根据状况取舍。安全
(7)编写DAO层类。session
(8)编写Service层类。并发
(9)编写测试类。app
下面来一步一步地作。
在Eclipse中建立一个Dynamic Web Project项目,命名为HibernateDemo。
在HibernateDemo项目名称上右击,在快捷菜单中选择New->Other选项,在弹出的对话框中找到Hibernate节点,选择Hibernate Configuration File(cfg.xml)选项,以下图所示:
点击Next按钮,在弹出的对话框中选择配置文件保存的目录,通常默认在src目录,同时须要输入配置文件的名称,通常默认为hibernate.cfg.xml便可。继续Next,在弹出的对话框中填写数据库方言(Database dialect)、数据库驱动(Driver class)、数据库URL、用户名、密码等。MySQL数据库的配置以下:
单击Finish,配置文件就建立成功了,后面有须要能够继续编辑该文件。
在MySQL中建立一个名为mysqldb的数据库,在该数据库中建立一张名为USER的表。建立USER表的语句以下:
建立好的USER表在MySQL中显示以下:
前面咱们经过Hibernate Tools的向导工具新建了一个hibernate.cfg.xml配置文件,其实咱们也能够直接在src目录下新建一个XML文件将其命名为hibernate.cfg.xml。如今咱们须要编辑这个文件,增长一些配置,修改后的文件以下:
在HibernateDemo项目名称上右击,选择Properties,在弹出的窗口左侧选择Java Build Path选项,而后在右侧界面中选择Libraries标签,点击Add Library按钮,在弹出的窗口中选择Junit,以下图所示:
而后点击Next,在version一栏选择Junit 4,而后点击Finish。这样Junit包就引入到项目中了。
接下来在项目中新建org.hibernate.test包,在包名上右击,依次选择New->Junit Test Case菜单,在弹出的窗口中填写测试类的名称和须要测试的类的名称(这个须要填写完整包名),以下图所示:
点击Next按钮,能够选择须要测试的方法,根据须要选择便可。
点击Finish,系统会自动生成UserTest类的框架,里面包含了一些空方法,咱们将须要测试的方法进行重写就能够了。
这里以save方法为例,重写testSave方法。
接下来在UserTest.java文件名称上右击,依次选择Run As ->Junit Test菜单,咱们能够在Eclipse的Junit View中看到测试结果,若是进度条正确,表示结果正确,若是进度条为红色,代表有错误,咱们能够看到有什么错误。
而后咱们到数据库中看看数据有没有正确保存到数据库。
这里可能有人会感到奇怪,为何UserTest类中设置了id为20,结果保存到数据库中确是1呢?
由于咱们在User.hbm.xml文件中将id设置成了主键,以下所示:
其中的generator元素指的是主键生成策略,hibernate会按照主键生成策略为id赋值,而不会将程序中的id值存储到数据库。
最后结合上面的项目咱们再看看Hibernate的工做原理:
(1)Hibernate初始化,建立Configuration对象。
a)从Hibernate配置文件hibernate.properties或者hibernate.cfg.xml中读取配置信息,存放到Configuration对象中。
b)根据配置文件中的mapping元素加载全部实体类对应的映射文件到Configuration对象中。
说明:Hibernate能够采起两种形式的配置文件,一种是hibernate.properties文件,另外一种是hibernate.cfg.xml文件。这两种文件本质上是同样的,均可以完成对Hibernate的配置工做,在实际开发中,更多地采用XML格式的配置文件。若两种配置文件同时存在且都有相同的配置信息,则hibernate.cfg.xml中的配置会覆盖掉hibernate.properties中的配置,这其中的缘由结合代码来解释。看以下代码:
这是建立Configuration实例并读取配置文件的代码。
(2)建立SessionFactory实例。
Configuration对象将配置信息存入SessionFactory的属性中,建立完SessionFactory实例,Configuration对象的使命就结束了,SessionFactory与Configuration之间的关联也断开了。SessionFactory充当数据源的代理,并负责建立Session对象。
(3)建立Session实例,创建数据库链接。
SessionFactory能够有两种方式建立Session。
a)openSession()方法。此方法直接建立一个新的Session实例,使用完以后须要调用close方法手动关闭。
b)getCurrentSession()方法。此方法建立的Session实例会绑定到当前线程,在事务提交(commit)或回滚(rollback)后会自动关闭。使用此方法必须在hibernate.cfg.xml配置文件中添加以下配置:
(4)建立Transaction实例,开始一个事务。
Hibernate的事务是对数据库底层事务的封装,在对Hibernate进行增、删、改操做的时候必须先建立一个Transaction对象,一个事务就是一个原子操做。
(5)利用Session的方法进行持久化操做。将实体对象持久化到数据库中。
(6)提交事务。
(7)关闭Session,断开与数据库的链接。