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"属性.

你可能感兴趣的:(sql,Hibernate,SVN,jdbc,项目管理)