Hibernate学习---第十节:Hibernate之QBC、样例查询&离线查询

一、QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成

1、java 代码如下:

/**
 * 查询所有
 */
@Test
public void testQuery(){
    // 获取 Criteria 对象
    Criteria criteria = session.createCriteria(Person.class);
    List<Person> list = criteria.list();
    for(Person p : list){
        System.out.println(p);
    }
}

/**
 * 条件查询
 */
@Test
public void testQuery2(){
    // 获取 Criteria 对象
    Criteria criteria = session.createCriteria(Person.class);
    // 查询 id 属性小于等于 5 的记录
    criteria.add(Restrictions.le("id", 5));
    // 查询 id 属性等于 5 的记录
    criteria.add(Restrictions.eq("id", 5));
    // 模糊查询 name 属性包含 -8 的记录
    criteria.add(Restrictions.like("name", "%-8%"));
    // 查询 age 属性 21 岁到 24 岁之间的记录
    criteria.add(Restrictions.between("age", 21, 24));
    // 查询 id 属性等于 2,5,7的记录
    criteria.add(Restrictions.in("id", new Object[]{2,5,7}));
    // 对 id 属性做升序
    criteria.addOrder(Order.asc("id"));
    // 对 id 属性做降序
    criteria.addOrder(Order.desc("id"));
    List<Person> list = criteria.list();
    for(Person p : list){
        System.out.println(p);
    }
}

/**
 * 条件查询
 * 通过 Property 类的静态方法进行查询条件的绑定
 * 其实底层是对 Restrictions 的封装
 */
@Test
public void testQuery3(){
    // 获取 Criteria 对象
    Criteria criteria = session.createCriteria(Person.class);
    // 查询 id 属性小于等于 5 的记录
    criteria.add(Property.forName("id").le(5));
    // 查询 age 属性 21 岁到 24 岁之间的记录
    criteria.add(Property.forName("id").between(3, 6));
    List<Person> list = criteria.list();
    for(Person p : list){
        System.out.println(p);
    }
}

QBC:http://blog.csdn.net/agromach/article/details/1932290

二、样例查询

1、java 代码如下:

/**
 * 样例查询
 * 根据给定了值的属性作为查询条件进行查询
 * 注意:一个对象的属性是基本类型,因为有默认值,所有也会拼装到查询条件中
 */
@Test
public void testQuery4(){
    Person p = new Person();
    p.setName("ldh-8");
    p.setPasswork(131);
    Criteria criteria = session.createCriteria(Person.class);
    criteria.add(Example.create(p));
    List<Person> list = criteria.list();
    for(Person person : list){
        System.out.println(person);
    }
}

三、离线查询

/**
 * 离线查询
 * 可以在绑定查询数据和条件之前不需要session(最晚打开session)
 * 当真正使用的时候才传递一个当前的session
 * 
 * session使用的技巧:
 *             最晚打开
 *             最早关闭
 *             不用长时间的打开
 */
@Test
public void testQuery5(){
    DetachedCriteria dc = DetachedCriteria.forClass(Person.class);
    dc.add(Restrictions.between("id", 5, 8));
    Criteria criteria = dc.getExecutableCriteria(session);
    List<Person> list = criteria.list();
    for(Person person : list){
        System.out.println(person);
    }
}
原文地址:https://www.cnblogs.com/hwlsniper/p/4295148.html