用Hibernate建立与数据库的连接,要先做好以下准备:
1.创建实体类:
- 实体类(也称持久化类)是一个带有一些属性的JavaBean类,实体类对属性的存取方法(getterand setter method)使用了标准JavaBean命名约定,同时把类属性的访问级别设成私有的。
- 为了通过反射机制来实例化类的对象,我们需要提供一个无参的构造器,所有的实体类都要求有无参的构造器,因为Hibernate需要使用Java反射机制来为你创建对象。
- 最后要为实体类实现Java.io.Serializable接口,以便Hibernate能更好的缓存实体对象。
2.创建和配置映射文件:
通过实体映射文件,Hibernate知道怎样去加载和存储实体类的对象,知道应该访问数据库里面的哪个表及应该使用表里面的哪些字段。
示例代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.ijob.bean.Seeker" table="ijob_seeker">
<!-- 主键映射 -->
<id name="id" type="string">
<column name="id" length="32"></column>
<generator class="uuid" />
</id>
<!—属性映射 -->
<property name="email" type="string">
<column name="email" length="100"></column>
</property>
<property name="password" type="string">
<column name="password" length="20"></column>
</property>
<property name="name" type="string">
<column name="name" length="10"></column>
</property>
<!—此处省略系列属性映射 -->
</class>
</hibernate-mapping>
主键映射:在实体类映射文件中,被映射的类必须定义对应数据库表的主键字段的属性。映射文件的<id>元素定义了该属性到数据库表主键字段的映射。
主键生成策略:主键生成器generator是可选的,它用于指定实体对象的标识符(在表中称之为主键)生成策略。
3.在主配置文件中添加实体映射类文件的路径:
将映射文件的路径信息添加到hibernate.cfg.xml中:<mapping resource=“***/***/***.hbm.xml" />
4.测试是否连接成功。
连接成功之后就可以用Hibernate操作数据库了。
Hibernate操作数据库的七大步骤如下:
1.获取配置Configuration
2.创建SessionFactory(会话工厂)
会话工厂是重量级、单实例的,由于创建成本比较高,却频繁被引用,所以最好只创建一个实例,并在静态初始化块中初始化一次。
3.打开session
4.开始一个事务
5.持久化操作
6.提交事务
7.关闭session。
示例代码如下:
// 1、获取配置
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry();
// 2、创建SessionFactory
SessionFactory factory = cfg.buildSessionFactory(serviceRegistry);
// 3、获取session
Session session = factory.openSession();
Transaction tx = session.getTransaction();
try {
// 4、开启事务
tx.begin();
Seeker seeker = new Seeker();
seeker.setEmail("abc@163.com");
seeker.setPassword("abc");
// 5、保存seeker对象
session.save(seeker);
// 6、提交事务
session.getTransaction().commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
// 7、关闭session
session.close();
}
}
Hibernate的核心接口:
1.Configuration接口
Configuration对象用来配置和引导Hibernate,一个Hibernate应用使用一个Configuration实例来指定主配置文件的位置,然后创建会话工厂。
Configuration cfg = new Configuration().configure("/cfg/auction.cfg.xml")
2.SessionFactory接口
一般情况下,整个应用只有唯一的一个SessionFactory,它应该在应用初始化时被创建。
编写一个工具类,将SessionFactory的实例设置为静态成员(只在内存中存在一份)并将其初始化放在静态初始化块中(只执行一次)。
3.Session接口
Session(会话)接口是Hibernate应用使用的主要接口,它拥有操作持久化对象的一系列API,可用于管理(例如加载和保存)对象,因此我们也称之为“持久化管理器”。Session实例是轻量级的,创建与销毁的代价不昂贵,通常我们会为每个事务创建一个Session实例,并在使用后关闭它。
4.Transaction(事务)接口
Transaction(事务)接口是对实际事务实现的一个抽象,这些实现包括JDBC事务或者JTA事务等。在Transaction接口中主要定义了commit()和rollback()两个方法,前者是提交事务的方法,后者是回滚事务的方法。
5.Query和Critera接口
Query(查询)接口允许在数据库上执行查询,并控制查询如何具体执行。查询使用HQL或SQL。Query实例可用来绑定查询参数,限定查询返回的结果数,并且最终执行查询。