hibernate查询方式【2】:QBC查询,本地sql查询
2017-12-26 20:44
716 查看
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=”” />)
结果:
相关文章推荐
- Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)
- Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)
- 10.3 hibernate_查询方式(QBC查询、本地SQL查询)
- Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)
- Hibernate学习-07:CRUD(增删改查)操作之查询多条/所有记录HQL、QBC、SQL三种方式
- Hibernate之QBC查询与本地SQL查询
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
- Hibernate之QBC查询与本地SQL查询
- Hibernate学习之路(十三):Hibernate中的QBC查询和本地sql操作
- Hibernate学习笔记----QBC和本地SQL查询
- Hibernate学习之QBC和本地SQL查询
- [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页
- Hibernate深入理解----Hibernate 检索方式(HQL,QBC,本地SQL)
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
- Hibernate的学习之路三十三(QBC的基本查询方式)
- Hibernate 命名查询、本地SQL、自定义SQL
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
- SSH框架之Hibernate的Criteria 查询、本地SQL查询、分页查询
- Hibernate总的来说共有三种查询方式:HQL、QBC和SQL三种
- hibernate的sql查询出来封装实体的两种方式