首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

dao层采取hibernate实现了,是否还需要扩展mybatis

2014-01-19 
dao层采用hibernate实现了,是否还需要扩展mybatis?方法名称描述Restrictions.eq等于Restrictions.allEq使

dao层采用hibernate实现了,是否还需要扩展mybatis?

方法名称
描述Restrictions.eq等于Restrictions.allEq使用Map,Key/Valu进行多个等于的比对Restrictions.gt大于Restrictions.ge大于等于Restrictions.lt小于Restrictions.le小于等于Restrictions.between对应SQL的betweenRestrictions.like对应SQL的likeRestrictions.in对应SQL的inRestrictions.andand关系Restrictions.oror关系Restrictions.sqlRestrictionSQL限定查询

Order类的常用方法:

方法名称
描述Order.asc升序Order.desc降序

Projections类的常用方法

方法名称
描述Projections.avg求平均值Projections.count统计某属性的数量Projections.countDistinct统计某属性不同值的数量Projections.groupProperty指定某个属性为分组属性Projections.max求最大值Projections.min求最小值Projections.projectionList创建一个ProjectionList对象Projections.rowCount查询结果集中的记录条数Projections.sum求某属性的合计

适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。

?

三、QBE(Query By Example)例子查询方式

?

? ?将一个对象的非空属性作为查询条件进行查询

?

?

四、DetachedCriteria:离线条件查询

?

? ?离线查询就是建立一个DetachedCriteria对象,将查询的条件等指定好,然后在session.beginTransaction()后将这个对象传入。通常这个对象可以在表示层建立,然后传入业务层进行查询。

?

?

?

?

八、Query.iterator的N+1查询(基于一的HQL,多见于一对多、多对多的关联映射)

? N + 1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题

? ?所谓的N+1是在查询的时候发出了N+1条sql语句

? ?1: 首先发出一条查询对象id列表的sql

? ?N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句

* list和iterate的区别?

? ?* list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据

? ?* iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题

? 示例:Query q=session.createQuery(“from UserInfo”);

? ? ?Iterator<UserInfo> list=q.iterate();

? ? ?While(list.hasNext()) {

? ? ?UserInfo st = (UserInfo) it.next();

? ? ?System.out.println(st.getName());

? ? }

避免N+1查询解决方法:

? ? 1、可以将fetch抓取数据的属性改为“join”,来避免N+1次的查询;

?

? ? 2、使用二级缓存

九、复查查询(基于二:QBC的深度查询)

?

? 复合查询就是在原有查询的基础上再进行查询,可以调用Criteria对象的createCriteria()方法在这个Criteria对象的基础上再进行查询。

?

各位看官,hibernate已经支持这么多的查询方式,如果数据库类型确定了,使用原生的sql,是否就可以取代mybatis了,而不需要再增加mybatis框架的学习成本?

热点排行