一. 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(); }
谢谢!!!