疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

hibernate学习总结


 

   

  一、SessionFactory,Session,Transaction的初始化

  Configuration configuration=new Configuration().configure();

  ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(configuration.getProperties())

  .buildServiceRegistry();

  sessionFactory=configuration.buildSessionFactory(serviceRegistry);

  session=sessionFactory.openSession();

  transaction=session.beginTransaction();

  Hibernate4新增了一个ServiceRegistry接口,所有基于Hibernate的配置或者服务都必须统一向这个ServiceRegistry 注册后才能生效。

  构造SessionFactory很消耗资源,一般情况下一个应用中只初始化一个SessionFactory对象。

  Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate运作的中心,所有持久化对象必须在session的管理下才可以进行持久化操作。

  Session 类的方法:

  取得持久化对象的方法: get() load()

  持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()

  开启事务: beginTransaction().

  管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等,

  load是延迟加载的,可以通过xml文件配置lazy=’false’取消延迟加载。

  Transaction代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。

  常用方法:

  commit():提交相关联的session实例

  rollback():撤销事务操作

  wasCommitted():检查事务是否提交

  在事务提交之前会自动刷新Session的缓冲

  二、事务的隔离级别

  数据库提供四种隔离级别,READ UNCOMMITED读未提交,READ CONMMITED 读已提交,REPEATABLE READ可重复度,SERIALIZABLE串行化,但是每一种数据库支持的隔离级别不一样。

  Hibernate 的配置文件中可以显式的设置隔离级别. 每一个隔离级别都对应一个整数:

  1. READ UNCOMMITED

  2. READ COMMITED

  4. REPEATABLE READ

  8. SERIALIZEABLE

  hibernate.connection.isolation 属性来设置事务的隔离级别。

  三、hibernate.cfg.xml配置信息

  JDBC 连接属性

  connection.url:数据库URL

  connection.username:数据库用户名

  connection.password:数据库用户密码

  connection.driver_class:数据库JDBC驱动

  dialect:配置数据库的方言,根据底层的数据库不同产生不同的 sql 语句,Hibernate 会针对数据库的特性在访问时进行优化

  C3P0 数据库连接池属性

  hibernate.c3p0.max_size: 数据库连接池的最大连接数

  hibernate.c3p0.min_size: 数据库连接池的最小连接数

  hibernate.c3p0.timeout: 数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁

  hibernate.c3p0.max_statements: 缓存 Statement 对象的数量

  hibernate.c3p0.idle_test_period: 表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时. 连接池本身不会把自己从连接池中移除,而是专门有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次被使用时间和当前时间的时间差来和 timeout 做对比,进而决定是否销毁这个连接对象。

  hibernate.c3p0.acquire_increment: 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接

  其他

  show_sql:是否将运行期生成的SQL输出到日志以供调试。取值 true | false

  format_sql:是否将 SQL 转化为格式良好的 SQL . 取值 true | false

  hbm2ddl.auto:在启动和停止时自动地创建,更新或删除数据库模式。取值 create | update | create-drop | validate

  hibernate.jdbc.fetch_size

  hibernate.jdbc.batch_size