在:http://blog.csdn.net/qq_21231581/article/details/51811995中我们将Hibernate的环境配置好,并且做了一个简单的数据库插入bean对象的操作。对其中cfg.xml或API代码不甚知晓,然而知其然不知其所以然是不行的,所以这次我把一些Hibernate配置及代码进行整理解释,以便记忆及分享。
1.cfg.xml文件常见属性介绍
hibernate.show_sql:设置为true时,Hibernate运行时在控制台输出被执行的SQL语句,方便开发时使用
hibernate.format_sql:设置为true时,输出的SQL语句进行排版,方便查看
hbm2ddl.auto:
设置validate:加载hibernate时,验证创建数据库表结构
设置create:每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
设置update:加载hibernate自动更新数据库结构
设置create-drop: 在create的基础之上,同时系统关闭前执行drop
hibernate.dialect:配置数据库方言,Hibernate会据此作出对应的优化
hibernate.default_schema:默认的数据库
2.Session简介
刚接触Session我也有点不明其用处,在写代码的过程中逐步了解,我把它当做JDBC中的connection来看待:用她可以执行数据库的增删查改操作(save(),update(),delete(),createQuery())等,
当然,获取Session对象也需要简单的几步:
1.加载cfg.xml文件的信息,即创建Configuration对象:
Configuration config = new Configuration().configure();
2.通过Configuration对象的属性信息创建ServiceRegistry服务注册对象:
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(config.getProperties())
.buildServiceRegistry();
3.通过Configuration及ServiceRegistry创建SessionFactory工厂对象:
this.sessionFactory = config.buildSessionFactory(serviceRegistry);
4.接下来就可以通过SessionFactory创建Session对象,而创建Session对象的API方法有2种:
第一种:
this.session = sessionFactory.openSession();
第二种:需要在cfg.xml文件中如下配置
<property name="current_session_context_class">thread</property>
该属性有thread,jta,manage,custom等,thread最常用,接着代码中如下:
this.session = sessionFactory.getCurrentSession();
二者的区别:
getCurentSession()类似于单例模式,每次获取的Session(包括Connection)都是同一个内存对象,并且相对于 openSession()来说不需要调用session.close(),而后者则必须,否则可能出现连接池对象溢出的情况(Connection对 象不一致)
5.Session中的get()与load()方法的区别
可根据id使用其方法获取单个对象,使用中形如:
Student studnet2 = (Student) session.load(Student.class, id);
区别:
get方法立即发出发出SQL语句执行,并返回pojo对象,若未查询到结果则返回null
load方法只保存代理对象的id,知道该对象的非主属性被使用时发出SQL语句执行返回一个代理对象,若未查询到结果则抛出ObjectNotFountException
3.Transaction简介
在JDBC中是自动提交事务的,但是Hibernate中Session操作之前需要开启事务:
this.transaction = session.beginTransaction();
结束session操作后需提交该事务
this.transaction.commit();
若不这样做的话,Session所做的操作将无法真正保存到数据库中
4.hbm.xml文件常见配置介绍
有网友在这一方面分享得很全面,值得学习:http://blog.csdn.net/wangchangshuai0010/article/details/8836963