天天看点

SSH与SSM学习之hibernate14——Criteria查询SSH与SSM学习之hibernate14——Criteria查询

  • SSH与SSM学习之hibernate14Criteria查询
    • 一Criteria
    • Criteria 中拥有查询的方法如 list uniqueResult等
    • 二基本查询
      • 1 示例代码
      • 1 查询结果
    • 三条件查询
      • 1 说明
      • 2 示例代码
      • 3 查询结果
    • 四分页查询
      • 1 示例代码
      • 2 查询结果
    • 五查询总记录数
      • 1 聚合函数
      • 2 示例代码
      • 3 查询结果

SSH与SSM学习之hibernate14——Criteria查询

一、Criteria

比较适合单表查询。Hibernate自创的无语句面向对象查询。

Criteria 中拥有查询的方法,如 list() ,uniqueResult()等。

二、基本查询

2.1 示例代码

/**
 * Criteria基本查询
 */
@Test
public void criteriaBaseDemo(){
    //1.创建session
    Session session = HibernateUtils.openSession();

    //------------------基本查询---------------
    //2.创建Criteria查询对象
    Criteria criteria = session.createCriteria(User.class);
    //3.获取集合
    List<User> users = criteria.list();
    //4.打印
    System.out.println(users);
    //-----------------------------------------

    //5.关闭资源
    session.close();
}
           

2.1 查询结果

Hibernate: 
    select
        this_.id as id1_0_0_,
        this_.name as name2_0_0_,
        this_.age as age3_0_0_ 
    from
        tb_user2 this_
[User{id=, name='小明', age=}, User{id=, name='xiaoming', age=}, User{id=, name='mingming', age=}, User{id=, name='mingge', age=}, User{id=, name='xx', age=}, User{id=, name='wiming', age=}]
           

三、条件查询

3.1 说明

使用添加查询,我们需要个Criteria添加条件,我们主要使用到 Restrictions这个类的方法

sql中的表达式 Restrictions中的方法
> gt
=
ge
< lt
<= le
== eq
!= ne
in in
between and between
like like
is not null isNotNull
is null isNull
or or
and and

3.2 示例代码

/**
 * Criteria 条件查询
HQL语句中,不可能出现任何数据库相关的信息的
 >              gt
 >=             ge
 <              lt
 <=             le
 ==             eq
 !=             ne
 in             in
 between and        between
 like           like
 is not null        isNotNull
 is null            isNull
 or             or
 and                and
 */
@Test
public void criteriaConditionDemo(){
    //1.创建session
    Session session = HibernateUtils.openSession();

    //------------------条件查询---------------

    //2.获取Criteria对象
    Criteria criteria = session.createCriteria(User.class);
    //3.添加查询参数---> id 为1的User对象
    criteria.add(Restrictions.eq("id",));
    User user = (User) criteria.uniqueResult();
    //4.打印
    System.out.println(user);
    //-----------------------------------------
    //5.关闭资源
    session.close();
}
           

3.3 查询结果

Hibernate: 
    select
        this_.id as id1_0_0_,
        this_.name as name2_0_0_,
        this_.age as age3_0_0_ 
    from
        tb_user2 this_ 
    where
        this_.id=?
User{id=, name='小明', age=}
           

四、分页查询

4.1 示例代码

/**
 * Criteria分页
 */
@Test
public void criteriaPageDemo(){
    //1.创建session
    Session session = HibernateUtils.openSession();

    //------------------条件查询---------------
    //2.创建Criteria查询对象
    Criteria criteria = session.createCriteria(User.class);
    //3.设置分页信息
    // 从0开始查询
    criteria.setFirstResult();
    // 查询3条数据
    criteria.setMaxResults();
    //4.执行查询
    List<User> users = criteria.list();
    //5.打印
    System.out.println(users);
    //-----------------------------------------
    //6.关闭资源
    session.close();
}
           

4.2 查询结果

Hibernate: 
    select
        this_.id as id1_0_0_,
        this_.name as name2_0_0_,
        this_.age as age3_0_0_ 
    from
        tb_user2 this_ limit ?
[User{id=, name='小明', age=}, User{id=, name='xiaoming', age=}, User{id=, name='mingming', age=}]
           

五、查询总记录数

5.1 聚合函数

Criteria 中我们可以使用聚合函数。如下

// 设置查询的聚合函数 => 总行数
criteria.setProjection(Projections.rowCount());
           

Projections中定义了很多聚合函数,例如 sum、avg、count、max、min等

5.2 示例代码

/**
 * Criteria查询总记录数
 */
@Test
public void criteriaTotalDemo(){
    //1.创建session
    Session session = HibernateUtils.openSession();

    //------------------条件查询---------------
    //2.创建Criteria查询对象
    Criteria criteria = session.createCriteria(User.class);
    //3. 设置查询的聚合函数 => 总行数
    criteria.setProjection(Projections.rowCount());
    //4. 查询
    Long count = (Long)criteria.uniqueResult();
    //5. 打印
    System.out.println("总条数:"+count);
    //-----------------------------------------
    //6.关闭资源
    session.close();
}
           

5.3 查询结果

Hibernate: 
    select
        count(*) as y0_ 
    from
        tb_user2 this_
总条数:
           

继续阅读