初次邂逅Hibernate之进一步了解
2016-07-03 11:02
211 查看
在:http://blog.csdn.net/qq_21231581/article/details/51811995中我们将Hibernate的环境配置好,并且做了一个简单的数据库插入bean对象的操作。对其中cfg.xml或API代码不甚知晓,然而知其然不知其所以然是不行的,所以这次我把一些Hibernate配置及代码进行整理解释,以便记忆及分享。
hibernate.format_sql:设置为true时,输出的SQL语句进行排版,方便查看
hbm2ddl.auto:
设置validate:加载hibernate时,验证创建数据库表结构
设置create:每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
设置update:加载hibernate自动更新数据库结构
设置create-drop: 在create的基础之上,同时系统关闭前执行drop
hibernate.dialect:配置数据库方言,Hibernate会据此作出对应的优化
hibernate.default_schema:默认的数据库
当然,获取Session对象也需要简单的几步:
1.加载cfg.xml文件的信息,即创建Configuration对象:
3.通过Configuration及ServiceRegistry创建SessionFactory工厂对象:
第一种:
第二种:需要在cfg.xml文件中如下配置
二者的区别:
getCurentSession()类似于单例模式,每次获取的Session(包括Connection)都是同一个内存对象,并且相对于 openSession()来说不需要调用session.close(),而后者则必须,否则可能出现连接池对象溢出的情况(Connection对 象不一致)
5.Session中的get()与load()方法的区别
可根据id使用其方法获取单个对象,使用中形如:
区别:
get方法立即发出发出SQL语句执行,并返回pojo对象,若未查询到结果则返回null
load方法只保存代理对象的id,知道该对象的非主属性被使用时发出SQL语句执行返回一个代理对象,若未查询到结果则抛出ObjectNotFountException
结束session操作后需提交该事务
4.hbm.xml文件常见配置介绍
有网友在这一方面分享得很全面,值得学习:http://blog.csdn.net/wangchangshuai0010/article/details/8836963
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
相关文章推荐
- Oltu在Jersey框架上实现oauth2.0授权模块
- github 提交报403 forbidden的错误解决
- 70. Climbing Stairs
- 微软开源区块链平台项目 Bletchle
- 大数据:从入门到XX(五)
- csdn待改进点之30------>博客浏览数会变小啊
- 基于U-BOOT-2010.09移植OK6410开发版记录(二)
- VMware Workstation10.0.4 build-2249910安装ubuntu-14.04-desktop-amd64记录
- 将Sprite转换为Image
- Matlab-GUIDE使用说明(Matlab-GUI界面)
- Android组件---Service,AIDL,Service与Activity之间的通信
- 关于iOS--弹出窗口的使用
- deeplearning4j对word2vec的介绍
- Java中==和equals()的区别
- Lynx使用指南
- String类的一些有用的方法
- 面向对象设计七大原则
- Java 学习笔记
- HDU1016(bfs)
- 使用 lazyload 遇到的问题