QBC查询
- Criteria对象
使用hql查询的时候需要写hql语句实现,但是使用qbc的时候,不需要写语句了,使用方法实现
==查询所有==
- 创建Criteria对象
调用方法获得结果
@Test public void test() { SessionFactory factory = null; Session session = null; Transaction transaction = null; try { factory = HibernateUtils.getSessionFatory(); session = factory.openSession(); // 开启事务 transaction = session.beginTransaction(); // 获取criteria对象 Criteria criteria = session.createCriteria(Order.class); // 获取所有的结果 List<Order> list = criteria.list(); for (Order order : list) { System.out.println(order); } transaction.commit(); } catch (Exception e) { // 如果发生异常那么回滚 transaction.rollback(); }finally { // 释放资源 if(session != null) { session.close(); } if(factory != null) { factory.close(); } } }
查询结果:
==条件查询==
使用封装的方法实现
@Test public void test1() { SessionFactory factory = null; Session session = null; Transaction transaction = null; try { factory = HibernateUtils.getSessionFatory(); session = factory.openSession(); // 开启事务 transaction = session.beginTransaction(); // 获取criteria对象 Criteria criteria = session.createCriteria(Order.class); // 调用add方法设置条件值,方法参数是Restrictions的方法 // 两条语句的效果相当于:select * from order where oid=3 and oaddress='山西'; criteria.add(Restrictions.eq("oid", 3)); criteria.add(Restrictions.eq("oaddress", "山西")); // 也可以使用模糊查询 //criteria.like(Restrictions.like("oaddress", "%西%")); // 获取所有的结果 List<Order> list = criteria.list(); for (Order order : list) { System.out.println(order); } transaction.commit(); } catch (Exception e) { // 如果发生异常那么回滚 transaction.rollback(); }finally { // 释放资源 if(session != null) { session.close(); } if(factory != null) { factory.close(); } } }
查询结果:
==排序查询==
- 获取到Criteria对象
调用Criteria对象的addOrder方法,参数传递
@Test public void test3() { SessionFactory factory = null; Session session = null; Transaction transaction = null; try { factory = HibernateUtils.getSessionFatory(); session = factory.openSession(); // 开启事务 transaction = session.beginTransaction(); // 获取criteria对象 Criteria criteria = session.createCriteria(Order.class); // 根据oid,进行降序排列 criteria.addOrder(org.hibernate.criterion.Order.desc("oid")); // 获取所有的结果 List<Order> list = criteria.list(); for (Order order : list) { System.out.println(order); } transaction.commit(); } catch (Exception e) { // 如果发生异常那么回滚 transaction.rollback(); }finally { // 释放资源 if(session != null) { session.close(); } if(factory != null) { factory.close(); } } }
查询结果:
==分页查询==
- 获取到Criteria对象
- 调用对象的方法:
- setFirstResult(int)设置起始位置从0开始
setMaxResults(int)设置记录数
@Test public void test4() { SessionFactory factory = null; Session session = null; Transaction transaction = null; try { factory = HibernateUtils.getSessionFatory(); session = factory.openSession(); // 开启事务 transaction = session.beginTransaction(); // 获取criteria对象 Criteria criteria = session.createCriteria(Order.class); // 设置起始位置 criteria.setFirstResult(0); // 设置记录数 criteria.setMaxResults(2); // 获取所有的结果 List<Order> list = criteria.list(); for (Order order : list) { System.out.println(order); } transaction.commit(); } catch (Exception e) { // 如果发生异常那么回滚 transaction.rollback(); }finally { // 释放资源 if(session != null) { session.close(); } if(factory != null) { factory.close(); } } }
结果:
==统计查询==
@Test public void test5() { SessionFactory factory = null; Session session = null; Transaction transaction = null; try { factory = HibernateUtils.getSessionFatory(); session = factory.openSession(); // 开启事务 transaction = session.beginTransaction(); // 获取criteria对象 Criteria criteria = session.createCriteria(Order.class); // 查询记录数,调用criteria的方法setProjection criteria.setProjection(Projections.rowCount()); Object a = criteria.uniqueResult(); Long b = (Long)a; int count = b.intValue(); System.out.println("总的记录数:"+ count); transaction.commit(); } catch (Exception e) { // 如果发生异常那么回滚 transaction.rollback(); }finally { // 释放资源 if(session != null) { session.close(); } if(factory != null) { factory.close(); } } }
- 结果:
- 结果:
==离线查询==
- 之前的方法获得Criteria已经和Session绑定了,操作数据库只能在dao中,如果想要在外部操作,那么就需要离线查询
本地sql查询
- 使用hibernate时候,调用底层sql实现
- 实现过程
- 创建对象
- 调用对象的方法得到结果
- 使用这种方式返回的元素默认是数组的形式,可以通过调用setEntity方法设置返回的类型
- 案例:使用SQLQuery查询所有的记录
- https://img-blog.csdn.net/20171226204321286?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlhb3Npbml4aWhlaXhpdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast” alt=”image” title=”” />)
- 结果: