Hibernate是Java应用关系数据库之间的桥梁,负责Java对象和关系数据之间的映射。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。
Hibernate配置文件
Hibernate从其配置文件中读取和数据库连接有关的信息,Hibernate的配置文件有两种形式,配置文件默认文件名hibernate.properties;另一种是XML格式的文件;还有一种是Java属性文件,采用键值对形式。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.StringstringVARCHAR(n)
intintINT
charcharacterCHAR(n)
booleanbooleanBIT
byte[]binaryBLOG
java.sql.DatedateDATE
java.sql.TimestamptimestampTIMESTAMP
通过Hibernate API操作数据库
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。
说明:笔记内容摘自《精通Hibernate:Java对象持久化技术详解》