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);
    }
}
时间: 2024-11-06 18:40:34

Hibernate学习---第十节:Hibernate之QBC、样例查询&离线查询的相关文章

《Hibernate学习笔记十》:多对多关联关系详解

<Hibernate学习笔记十>:多对多关联关系 前面介绍了一对一.多对一和一对多的关联关系在Hibernate应如何实现,这篇博文就来介绍下最后一种关联关系:多对多.多对多关联关系在我们现实生活中的例子实在是太多太多,最典型的就是老师和学生的例子:一个老师可以教多个学生,而一个学生又可以被多个老师来教. 了解一点数据库的我们都知道,在数据库中表示多对多的关联关系,是借助于中间表来解决的. 如下: 还是和以往的思路一样,每一种关联关系都分为单向关联和双向关联,我们每种都会进行介绍,对于单向和双

《Hibernate学习笔记十二》学生、课程、分数关系的设计与实现

<Hibernate学习笔记十二>学生.课程.分数关系的设计与实现 这个马士兵老师的Hibernate视频学习的一个题目,这里面要用到多对多.多对一的关联关系以及联合主键,因此觉得挺好的,自己写篇博文来记录下. 先考虑数据库表 1.学生表:为简单起见,只考虑了学生id和学生姓名,其中id为主键 2.课程表:为简单起见,只考虑了课程id和课程名称,其中id为主键 3.分数表 分数表有两种解决方案 3.1 第一种为:使用联合主键:student_id 和 course_id 3.2 第二种:不使用

Hibernate学习---第十五节:hibernate二级缓存

1.二级缓存所需要的 jar 包 这三个 jar 包实在 hibernate 解压缩文件夹的 lib\optional\ehcache 目录下 2.配置 ehcache.xml <ehcache> <!-- 指定当缓存数据超出规定缓存大小的时候,超出的缓存数据写入到磁盘的位置 --> <diskStore path="D:/cache/tmp"/> <!-- maxInMemory - 允许在二级缓存中的持久化对象数量 eternal - 缓存

Hibernate学习---第十四节:hibernate之session线程安全

1.hibernate.cfg.xml 文件中添加如下代码开启线程安全: <property name="hibernate.current_session_context_class">thread</property> 具体如下: <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http

Hibernate学习---第六节:数组&amp;list&amp;map&amp;set的映射配置

1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * 持久化类设计 * 注意: * 持久化类通常建议要有一个持久化标识符(ID) * 持久化标识符通常建议使用封装类(例如:Integer 因为基本类型存在默认值) * 持久化类

Hibernate学习---第十三节:hibernate过滤器和拦截器的实现

一.hibernate 过滤器 1.在持久化映射文件中配置过滤器,代码如下: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-

Hibernate学习---第十一节:Hibernate之数据抓取策略&amp;批量抓取

1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // 基于标准的 sql 语句查询 String sql = "select * from t_person"; // 通过 createSQLQuery 获取 SQLQuery,而 SQLQuer 是 Query的子类 SQLQuery query = session.createSQLQue

Hibernate学习---第七节:关联关系

一.关联关系一对一外键(双向) 1.实体类,代码如下: package learn.hibernate.bean; import java.util.Date; /** * 持久化类设计 * 注意: * 持久化类通常建议要有一个持久化标识符(ID) * 持久化标识符通常建议使用封装类(例如:Integer 因为基本类型存在默认值) * 持久化类通常建议手动添加一个无参构造函数 (因为有些操作是通过放射机制进行的) * 属性通常建议提供 getter/setter 方法 * 持久化类不能使用 fi

hibernate学习笔记之四(Hibernate中的类型)

(hibernate学习笔记系列来自于 "疯狂Java" Hibernate视频学习) Hibernate中的类型 在*.hbm.xml文件中,<property name="password" column="t_pass">,hibernate根据type转换将java转换成hibernate类型,然后再转换成SQL类型,<property name="password" type="...&q