Hibernate是Java应用关系数据库之间的桥梁,负责Java对象和关系数据之间的映射。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。
Hibernate配置文件
Hibernate从其配置文件中读取和数据库连接有关的信息,Hibernate的配置文件有两种形式,配置文件默认文件名hibernate.properties;另一种是XML格式的文件;还有一种是Java属性文件,采用键值对形式。
1
2
3
4
5
6
|
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/SAMPLEDB
hibernate.connection.username=root
hibernate.connection.password=1234
hibernate.show_sql=true
|
创建持久化类
持久化类是指其实例需要被Hibernate持久化到数据库的类。持久化类通常都是域模型的实体域类。持久化类符合JavaBean规范,包含属性,以及与之对对应的getXXX()和setXXX()方法。
Hibernate不需要持久化类必须实现java.io.Serializable接口,但对于采用分布式结构的Java应用,当Java对象在不同的进程节点之间传输时,这个对象所属的类必须实现Serializable接口。
在Java Web应用中,如果希望对HttpSession中存放的Java对象进行持久化,这个Java独享所属的类必须实现Serializable接口。
Hibernate要求持久化类必须提供一个不带参数的默认构造方法,在程序运行时,Hibernate运用Java反射机制,调用java.lang.reflect.Constructor.newInstance()方法来构造持久化类的实例。
创建对象-关系映射文件
在运行时,Hibernate将根据这个映射文件来生成各种SQL语句。
Java类型、Hibernate映射类型以及SQL类型之间的对应关系
Java类型 |
Hibernate类型 |
SQL类型 |
java.lang.String |
string |
VARCHAR(n) |
int |
int |
INT |
char |
character |
CHAR(n) |
boolean |
boolean |
BIT |
byte[] |
binary |
BLOG |
java.sql.Date |
date |
DATE |
java.sql.Timestamp |
timestamp |
TIMESTAMP |
通过Hibernate API操作数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public
class
BussinessService {
public
static
SessionFactory sessionFactory;
static
{
try
{
Configuration config =
new
Configuration();
config.addClass(Customer.
class
);
sessionFactory = config.buildSessionFactory();
}
catch
(Exception e) {
}
}
public
void
deleteAllCustomers()
throws
Exception {
Session session = sessionFactory.openSession();
Transaction tx =
null
;
try
{
tx = session.beginTransaction();
session.delete(
"from Customer as C"
);
tx.commit();
}
catch
(Exception e) {
if
(tx !=
null
)
tx.rollback();
throw
e;
}
finally
{
session.close();
}
}
}
|
Hiberante初始化
创建一个Configuration类的实例,Configuration类的构造方法把默认文件路径下的hibernate配置文件中配置信息读入到内存;
调用Configuration类中的addClass(Customer.class)方法,该方法把映射信息读入到内存中;
调用Configuration类的buildSessionFactory()方法,该方法创建一个SessionFactory实例,并发Configuration对象包含的配置信息拷贝到SessionFactory对象的缓存中。SessionFactory达标一个数据库存储源,一个数据库存储源值需创建一个SessionFactory实例,SessionFactory不和Configuration关联,如果修改Configuration对象包含的配置信息不会对SessionFactory对象有任何影响。
访问Hibernate的Session接口
初始化结束后,调用SessionFactory实例的openSession()方法类获得Session实例,然后通过它执行数据库的操作,Session接口提供操作数据库的各种方法:
save()方法:把Java独喜爱那个保存到数据库
update()方法:更新数据库的Java队形
delete()方法:把Java对象从数据库中删除
load()方法:从数据库中加载Java对象
find()方法:从数据库中查询Java对象
Session是一个轻量级对象,通常每一个Session实例和一个数据库事务绑定,即没执行一个数据库事务,都必须先创建一个新的Session实例。如果事务执行出现异常,应撤销事务。无论事务是否执行成功,最后都应该关闭Session。