Hibernate的第一个代码
来源:互联网 发布:sql delete from 编辑:程序博客网 时间:2024/05/18 02:28
首先来看看hibernate开发的一个简单流程:
(1)准备开发环境,创建Hibernate项目。
(2)在数据库中创建数据表。
(3)创建持久化类。
(4)设计映射文件,使用Hibernate映射文件将POJO对象映射到数据库。
(5)创建Hibernate的配置文件Hibernate.cfg.xml。
(6)编写辅助工具类HibernateUtil类,用来实现对HIbernate的初始化并提供获得Session的方法,此步可根据情况取舍。
(7)编写DAO层类。
(8)编写Service层类。
(9)编写测试类。
下面来一步一步地做。
1.创建Eclipse项目
在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,配置文件就创建成功了,后面有需要可以继续编辑该文件。
2.创建数据表USER
在MySQL中创建一个名为mysqldb的数据库,在该数据库中创建一张名为USER的表。创建USER表的语句如下:
创建好的USER表在MySQL中显示如下:3.编写POJO映射类User.java
4.编写映射文件User.hbm.xml
5.编写hibernate.cfg.xml配置文件
前面我们通过Hibernate Tools的向导工具新建了一个hibernate.cfg.xml配置文件,其实我们也可以直接在src目录下新建一个XML文件将其命名为hibernate.cfg.xml。现在我们需要编辑这个文件,增加一些配置,修改后的文件如下:
6.编写辅助工具类HibernateUtil.java
7.编写DAO层接口UserDAO.java
8.编写DAO层实现类UserDAOImpl.java
通过以上步骤,一个Hibernate项目就完成了,下面我们来测试一下。
9.编写测试类UserTest.java
在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中看到测试结果,如果进度条正确,表示结果正确,如果进度条为红色,表明有错误,我们可以看到有什么错误。
然后我们到数据库中看看数据有没有正确保存到数据库。
因为我们在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实例并读取配置文件的代码。- 当执行new Configuration()方法时,Hibernate会在classpath的根目录下查找hibernate.properties文件。如果找到了该文件,则所有的hibernate.*的属性被装载到Configuration对象中。
- 当调用configure()方法时,Hibernate会在classpath根目录下查找hibernate.cfg.xml。如果找不到则抛出HibernateException。如果hibernate.cfg.xml中的某些属性和hibernate.properties中的重复了,则会覆盖。
(2)创建SessionFactory实例。
Configuration对象将配置信息存入SessionFactory的属性中,创建完SessionFactory实例,Configuration对象的使命就结束了,SessionFactory与Configuration之间的关联也断开了。SessionFactory充当数据源的代理,并负责创建Session对象。
- SessionFactory实例是全局唯一的,它对应着应用程序中的数据源,一个数据源只需要一个SessionFactory实例,只有当应用中有多个数据源时,才为每个数据源建立一个SessionFactory实例。
- SessionFactory的实例是重量级的,创建和销毁都要消耗较多资源,因此只创建一次。
- 通过SessionFactory可以获得多个Session实例。
- SessionFactory是线程安全的,可以被多个线程共享。Session不是线程安全的,多个并发线程同时操作一个Session实例时会出现问题,通常使用ThreadLocal模式管理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,断开与数据库的连接。
- Hibernate的第一个代码
- Hibernate的第一个程序
- ZeroMQ的第一个代码
- 编写你的第一个Hibernate程序
- 我的第一个hibernate程序
- 第一个成功的Hibernate实例
- MyEclipse + SQL2000 的第一个Hibernate 程序
- 新建第一个Hibernate项目的步骤
- 我的第一个hibernate程序
- 第一个最简单的Hibernate
- 第一个hibernate创建的基本过程
- 第一个成功的Hibernate实例
- 我的第一个hibernate程序
- 编写你的第一个Hibernate程序
- 第一个简单的hibernate程序
- 简单的hibernate示例(第一个)
- 我的第一个Hibernate应用:Hibernate__002
- Hibernate 入门的第一个程序
- 控制器与类
- HDOJ 5971 Wrestling Match【2016大连现场】【dfs二分染色】
- 图灵完备
- 一个CTF网站的rules
- AJAX基础知识(二)
- Hibernate的第一个代码
- CSDN-markdown编辑器使用方法
- Hopfield 神经网络及稳态性的证明
- Navicat for MySQL 新建数据库设置数据库编码
- Apache安装与使用
- java 连接sql server 2008 R2数据库【百度文库——转载】
- 231. Power of Two
- caffe中HDF5层及数据生成
- Latex中的caption