Hibernae的Criteria 查询(十七)

简介: Hibernae的Criteria 查询(十七)

一. Criteria 查询


hql查询是用类似于Sql语句的形式进行相应的查询,Criteria 是用类的形式进行相应的处理。 所用的例子,是与HQL查询一样的。 具体例子,参考HQL语句。


二. 各种形式的Criteria 查询


二.一 查询全部


/*查询全部*/
  @Test
  public void test1(){
    Session session=HibernateUtil.getSession();
    //Hibernate推荐使用JPA的规范获取Criteria
    Criteria criteria=session.createCriteria(User.class);
    List<User> userList=criteria.list();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.二 添加条件


@Test
  public void test2(){
    Session session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(User.class);
    // 用Restrictions 进行相应的条件处理
    criteria.add(Restrictions.eq("name","两个蝴蝶飞"));
    criteria.add(Restrictions.gt("age",22));
    List<User> userList=criteria.list();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.三 like 链式形式


  @Test
  public void test3(){
    Session session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(User.class);
    criteria.add(Restrictions.like("name","%蝴蝶飞%")).add(Restrictions.ge("age",22));
    List<User> userList=criteria.list();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.四 分页查询


@Test
  public void test4(){
    Session session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(User.class);
    //最开始的索引
    criteria.setFirstResult((1-1)*2);
    //每页显示的个数
    criteria.setMaxResults(2);
    List<User> userList=criteria.list();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.五 排序


@Test
  public void test5(){
    Session session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(User.class);
    criteria.setFirstResult((1-1)*2);
    criteria.setMaxResults(2);
    //criteria.addOrder(Order.asc("id"));
    criteria.addOrder(Order.desc("id"));
    List<User> userList=criteria.list();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.六 聚集函数


@Test
  public void test6(){
    Session session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(User.class);
    //criteria.setProjection(Projections.rowCount());   //会进行替换
    criteria.setProjection(Projections.max("age"));
    Object object=criteria.uniqueResult();
    System.out.println(object);
    session.close();
  }


二.七 in 形式传参


@Test
  public void test7(){
    Session session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(User.class);
    //criteria.add(Restrictions.in("id",new Object[]{1,2,3}));
    criteria.add(Property.forName("id").in(new Object[]{1,4}));
    List<User> userList=criteria.list();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.八 sql形式传入值


@Test
  public void test8(){
    Session session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(User.class);
    //criteria.add(Restrictions.sqlRestriction("age=?",24,StandardBasicTypes.INTEGER));
    criteria.add(Restrictions.sqlRestriction("age=? and name like ?",new Object[]{24,"%蝴蝶飞%"},new Type[]{StandardBasicTypes.INTEGER,StandardBasicTypes.STRING}));
    List<User> userList=criteria.list();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.九 多种条件


@Test
  public void test9(){
    Session session=HibernateUtil.getSession();
    Criteria criteria=session.createCriteria(User.class);
    //名称为蝴蝶飞,或者性别为男,年龄>22
    criteria.add(Restrictions.disjunction(
        Restrictions.like("name","%蝴蝶飞%"),
        Restrictions.conjunction(Restrictions.eq("sex","男"),Restrictions.gt("age", 22))));
    List<User> userList=criteria.list();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


其中,disjunction 表示或的形式, conjunction 表示与的形式。


二.十 JPA 规范形式


@Test
  public void test10(){
    Session session=HibernateUtil.getSession();
    //Hibernate推荐使用JPA的规范获取Criteria
    CriteriaBuilder criteriaBuilder=session.getCriteriaBuilder();
    CriteriaQuery<User> criteriaQuery=criteriaBuilder.createQuery(User.class);
    criteriaQuery.from(User.class);
    Query<User> query=session.createQuery(criteriaQuery);
    List<User> userList=query.getResultList();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.十一 JPA形式加入条件


@Test
  public void test11(){
    Session session=HibernateUtil.getSession();
    //Hibernate推荐使用JPA的规范获取Criteria
    CriteriaBuilder criteriaBuilder=session.getCriteriaBuilder();
    CriteriaQuery<User> criteriaQuery=criteriaBuilder.createQuery(User.class);
    Root<User>user=criteriaQuery.from(User.class);
    Predicate predicate=criteriaBuilder.gt(user.get("age"),24); //添加条件
    criteriaQuery.where(predicate);
    Query<User> query=session.createQuery(criteriaQuery);
    List<User> userList=query.getResultList();
    userList.forEach(n -> System.out.println(n));
    session.close();
  }


二.十二 离线查询


@Test
  public void test12(){
    DetachedCriteria detached=DetachedCriteria.forClass(User.class);
    //DetachedCriteria detached=DetachedCriteria.forEntityName("com.yjl.pojo.User");
    detached.add(Restrictions.eq("id",1));
    Session session=HibernateUtil.getSession();
    Criteria criteria=detached.getExecutableCriteria(session);
    Object object=criteria.uniqueResult();
    System.out.println((User)object);
    session.close();
  }


三. SQLQuery查询


三.一 普通查询


查询出来的是对象数组的集合。


@Test
  public void test13(){
    Session session=HibernateUtil.getSession();
    SQLQuery query=session.createSQLQuery("select * from user");
    List<Object[]> userList=query.list();
    for (Object[] objects : userList) {
      for (int i = 0; i < objects.length; i++) {
        Object object = objects[i];
        System.out.print(object+",");
      }
      System.out.println();
    }
    session.close();
  }


三.二 条件SQL查询


@Test
  public void test14(){
    Session session=HibernateUtil.getSession();
    SQLQuery query=session.createSQLQuery("select * from user where name like :name");
    query.setParameter("name","%蝴蝶飞%");
    List<Object[]> userList=query.list();
    for (Object[] objects : userList) {
      for (int i = 0; i < objects.length; i++) {
        Object object = objects[i];
        System.out.print(object+",");
      }
      System.out.println();
    }
    session.close();
  }


谢谢!!!

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL-8】DQL-查询语句全解 [ 基础/条件/分组/排序/分页查询 ](附带代码演示&案例练习)
【MySQL-8】DQL-查询语句全解 [ 基础/条件/分组/排序/分页查询 ](附带代码演示&案例练习)
|
Java
jpa实现增删改查,分页,自定义查询,jpql查询
jpa实现增删改查,分页,自定义查询,jpql查询
88 0
|
6月前
mongoTemplate根据id模糊分页条件查询
mongoTemplate根据id模糊分页条件查询
108 0
|
6月前
|
SQL Java 数据库
JPQL语言和Query接口简解
JPQL语言和Query接口简解
51 0
|
自然语言处理 索引
09 Lucene索引库查询 - query子类查询
09 Lucene索引库查询 - query子类查询
46 0
【Django学习】(十二)GenericAPIView_过滤_排序_分页(上)
【Django学习】(十二)GenericAPIView_过滤_排序_分页
【Django学习】(十二)GenericAPIView_过滤_排序_分页(上)
【Django学习】(十二)GenericAPIView_过滤_排序_分页(下)
【Django学习】(十二)GenericAPIView_过滤_排序_分页(下)
|
SQL Java 数据库连接
Hibernat的HQL语句查询(十六)
Hibernat的HQL语句查询(十六)
174 0
Hibernat的HQL语句查询(十六)
|
SQL Oracle 关系型数据库
SQL基础【十一、分页 limit top rownum】
SQL基础【十一、分页 limit top rownum】
128 0