Hibernate 1
1 映射文件
2 Hibernate核心配置文件
- 反映持久化类和数据库表的映射关系
- 一般命名为:xx.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">passwd</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="src下映射文件的路径" />
</session-factory>
</hibernate-configuration>
- hibernate的hbm2ddl(数据定义语言:create drop alter…)
- hbm2ddl.auto的取值
- none:不用hiberbate自动生成表
- create:每次创建一个新的表
- create-drop:每次创建新的表,执行程序结束后删除这个表(用于测试)
- update:如果数据库中有表,使用原来的表,没有就创建
- validate:只使用原来的表,对映射关系进行校验
- 常用属性名称及用途
名称 | 用途 |
---|
hibernate.dialect | 操作数据库方言 |
hibernate.connection.driver_class | 连接数据库程序 |
hibernate.connection.url | 连接数据库url |
hibernate.connection.username | 数据库用户名 |
hibernate.connection_password | 数据库密码 |
hibernate.show_sql | 控制台输出SQL语句 |
hibernate.format_sql | 格式化输出SQL语句 |
hibernate.hbm2ddl.auto | SessionFactory创建时是否根据映射文件自动验证表结构或自动创建、自动更新数据库表结构,该参数取值有:validate、update、create、create-drop |
hibernate.connection.autocommit | 事务是否自动提交 |
测试代码
public class HibernateDemo{
public void demo1(){
Configuration cfg = new Configuration().configure();
SessionFactory sf = cfg.buildSessionFactory();
Session sess = sf.openSeesion();
Transaction tx = session.beginTransaction();
session.save(创建的实体类对象)
tx.commit();
session.close();
}
}
相关API
- Configuration:用于加载映射文件
- new Configuration().configure():创建实例,默认去src目录下读取hibernate.cfg.xml配置文件
- new Configuration().configure(“xml文件位置”):创建实例,可以从指定参数位置读取配置文件
- 创建的实例可以加载映射文件,这是properties所不能做到的:cfg.addSource(“映射文件位置”)
- SessionFactory:Session工厂对象
- 负责Hibernate的初始化和建立Session对象,在hibernate中起到缓冲区的作用,hibernate可以将自动生成的SQl语句、映射数据以及某些可以重复利用的数据放到这个缓冲区中,同时还保存了对数据库配置的所有映射关系,维护当前的二级缓存
- cfg.buildSessionFactory():Configuration对象获取SessionFactory实例
- 特点:
- 线程安全,同一个实例能够供多个线程共享
- 重量级,不能随意创建和销毁
- 由于以上特点,一个项目只需要一个SessionFactory,除非应用中存在多个数据源,才会为每个数据源建立一个SesionFactory对象
- HibernateUtils工具类用来提供Session对象
public HibernateUtils{
private static Configuration cfg;
private static SessionFactory sessionFactory;
static{
cfg = new Configuration().configure();
sesionFactory = cfg.buildSessionFactory()
}
public static Session openSession(){
return sessionFactory.openSession();
}
}
- SessionFactory内部维护了一个连接池,如果要使用第三方连接池,需要手动配置
<property name="connection.ptivider_class">org.hibernate.connection.C3PoConnectionProvider"</property>
<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.timeout">120</property>
<property name="c3p0.idle_test_period">300</property>
- Session:应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,主要功能是为持久化对象提供创建、读取和删除的能力
- Session session = sessionFactory.openSession():创建一个新的session实例,并且在使用完成后需要调用close手动关闭
- Session session = sessionFactory.getCurrentSession():创建的session实例绑定到当前线程,在提交或回滚操作时会自动关闭
- 轻量级,是一级缓存,主要用于存放当前工单元加载的对象
- 方法
- save()、update()、saveOrUpdate()
- delete()
- get()、load():根据主键查询
- createQuery()、createSQLQuery():用于数据库操作对象
- createCriteria():条件查询
- Transaction:用于管理事务
- Transaction transaction = session.beginTransaction();
- 方法
- commit():提交相关联的session实例
- roolback():撤销事务操作