您的位置:首页 > 其它

hibernate学习笔记05----离线查询

2017-05-30 22:32 351 查看

离线查询DetachedCriteria

DetachedCriteria是Criteria的子实现,通过静态方法DetachedCriteria.forClass(PO.class)来实例化,它可以像Criteria的对象一样增加各种查询条件,通过detachedCriteria.getExecutableCriteria(session)方法与session关联,变成在线Criteria对象,最后通过criteria.list()方法得到数据。

【示例】

查询id值大等于2且城市是杭州的客户信息。

//离线条件查询
@Test
//查询id值小于2且城市是上海的客户信息。(单表)
public void testDetachedCriteria(){
//模拟业务层service:业务相关的逻辑抽离出来
//拼接查询条件
//		String sql="...where 1=1";//判断。。。
//直接创建一个"离线条件对象"
DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Customer.class);
//玩命加条件
detachedCriteria.add(Restrictions.lt("id", 2))
.add(Restrictions.like("city", "%上海%"));

//将离线条件对象传递给dao层

//模拟dao层数据层持久层集成层
Session session = HibernateUtils.openSession();
session.beginTransaction();

//将离线条件转换成可执行的条件对象(与session关联了)
//好处,dao变的通用
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
//直接查询
List<Customer> list = criteria.list();
System.out.println(list);

session.getTransaction().commit();//flush
session.close();
}

【Criteria和DetachedCriteria的区别】

Criteria和DetachedCriteria
的主要区别在于创建的形式不一样, Criteria
是在线的,所以它是由 Hibernate Session
进行创建的;而 DetachedCriteria
是离线的,创建时无需Session,DetachedCriteria
提供了 2
个静态方法 forClass(Class)
或 forEntityName(Name)进行DetachedCriteria
实例的创建。使用getExecutableCriteria(session)方法转换成在线可执行的Criteria
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate