Hibernate中QBE查询,抓取策略,事务,两种锁

一: QBE(模版查询)---------->Query by Example.
忽略age字段
用于
ignoreCase().enableLike(MatchMode.ANYWHERE).excludeProperty("age");





hibernate的查询方式:
1、hql
2、sql
3、createCriteria (QBC Query by riteral) 得到Criteria接口
4、Criteria(QBE)子类 Example 模板查询:提供某种属性,定义一个样板,
通过这个样板查询数据库。

//忽略age字段
//ignoreCase().enableLike(MatchMode.ANYWHERE).excludeProperty("age");


二:抓取策略有以下几种:抓取,抓的是关联,也就是对象.
子查询:就是通过一条hql语句把关联的数据抓取出来.
1:连接抓取,--------->用到的sql:外连接,左连接,右连接.
fetch="join",这个可以在many-to-one里加,加了这个,
使得查询人的时候,把地址查出来,但只有一条hql语句,
如果不加,会有两条hql语句
2:查询抓取(Select fetching):另外发送一条 SELECT 语句抓取当前对象的关联实体或集合
fetch="select",这个在one-to-many里加,
那就根据人来查询,并把地地也查出来,那就会在后台打印两条hql语句
3:子查询抓取(Subselect fetching): fetch="sub-class"
另外发送一条SELECT 语句抓取在前面查询到(或者抓取到)的所有实体对象的关联集合,
这个只能在one-to-many里加,
先是发出一条hql语句到数据库,把所有的数据先查出来,
然后再去查第一条hql语句里查询出来的数据查询,这样如果有很多条数据的时候,
这样与查询抓取相比,这个不管你有多少条数据,它都可以通过两条hql语句解决.
4:批量抓取

三:Hibernate事务包括:
1: 局部事务:hibernte局部事务也就是jdbc事务,它的步骤和jdbc事务也是一样的,
hibernate中的局部事务,就是每一个局部都是一个session的管理.
Hibernate中,当opersonSession的时候,
它自动把JDBC事务的connection.setAutoCommit(false)调用了.
所以Hibernate事务就不用我们手动把事务提交方式设为false了.
2: 全局事务:JTA.
全局事务就是:可以管理多个session,可以横跨多个数据库,DAO,
可以用多个session包含多个session
全局事务如果是在jdbc中,那就是可以包含多个connnection
Transaction transaction = session.beginTransaction();

三: Hibernate包括两种锁:------>也是基于数据库锁机制来实现的.
3.1: 悲观锁------>就是说,当从数据库从拿出来的时候,只要打开了悲观锁,
在修改的时候,只允许当前事务修改,不允许其它事务进行修改,
也就是说只支持单个事务的操作,
3.2: 乐观锁------>采用数据库版本机制来实现.
就跟我们在项目中用的svn一样的, 如果你的版本低于服务器的版本时,
svn就不会允许你提交,而乐观锁也是一样的,
也就是说,当你对数据库修改时,你当前的数据与数据库里的实际数据不匹配时,
乐观锁会要你先更新数据,然后再进行修改.

3.2.1: 让Hibernate支持乐观锁的步骤如下:
3.2.1.1:在PO类里加入一个字段,来标识当前数据库的版本.
例: private int version;
3.2.1.2:在映射文件里加入一个属性,这个属性是:
<version name="version"></version>
3.2.1.3:在映射文件里,定义class时,
加入optimistic-lock="version"属性.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值