Hibernate学习笔记 -- day07 HQL、QBC查询用法
2017-07-28 15:49
579 查看
一、HQL的查询
1、hibernate查询涉及的对象
Query对象2、如何获取Query对象
session.createQuery(String hql);3、什么是HQL
hibernate query language它就是把sql语句中的表名换成了实体类名。把表中的列名换成了实体类中的属性名。
select * 可以省略。
4、基本用法:查询所有
/** * 查询所有客户 */ @Test public void test1(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Query对象 Query query = s.createQuery("from Customer"); //2.把查询结果封装到结果集中 List list = query.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
5、带条件查询
/** * 条件查询 * hibernate中参数占位符的索引是从0开始的 */ @Test public void test2(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Query对象 Query query = s.createQuery("from Customer where custIndustry like ? and custName like ? "); //2.给参数占位符赋值 query.setString(0, "%修%"); query.setString(1, "%办公%"); //3.把查询结果封装到结果集中 List list = query.list(); for(Object o : list){ System.out.println(o); } tx.commit(); } /** * 条件查询的第二种提供占位符的方式 * 具名查询: * 具名:给参数提供一个具体的名称,而不是用问号作为占位符 * 提供名称的规则: * :名称 * 给占位符赋值: * 直接写具体的名称。不能写: */ @Test public void test3(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Query对象 Query query = s.createQuery("from Customer where custIndustry like :a and custName like :custName "); //2.给参数占位符赋值 query.setString("custName", "%修%"); query.setString("a", "%办公%"); //3.把查询结果封装到结果集中 List list = query.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
6、排序查询
关键字:order by/** * 排序查询 * * 关键字: * order by * 升序: * asc 默认值 * 降序 * desc */ @Test public void test4(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Query对象 Query query = s.createQuery("from Customer order by custId desc "); //2.把查询结果封装到结果集中 List list = query.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
7、分页查询
hibernate中提供了两个方法分别放起始页,和每页显示条数/** * 分页查询 * * mysql分页的关键字: * limit * limit关键字有两个参数 * 第一个参数:查询的开始记录索引,从0开始 * 第二个参数:每次查询多少条记录。 * 在hibernate中它提供了两个方法: * setFirstResult();此方法用于设置开始记录索引 * setMaxResults();此方法用于设置每次查询的条数 */ @Test public void test5(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Query对象 Query query = s.createQuery("from Customer"); //2.设置分页的条件 query.setFirstResult(2); query.setMaxResults(2); //3.把查询结果封装到结果集中 List list = query.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
8、HQL中聚合函数的用法
注意:在使用聚合函数时,没有group by子句的情况下,返回的结果都是一行一列的。/** * HQL中的聚合函数用法: * 明确: * 在使用聚合函数时,没有group by子句的情况下,返回的结果都是一行一列的。 * 聚合函数: * count * max * min * avg * sum */ @Test public void test6(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Query对象 Query query = s.createQuery("select count(custId) from Customer"); //2.获取结果集 Object obj = query.uniqueResult(); System.out.println(obj); tx.commit(); }
9、投影查询
什么是投影查询:我们查询一个实体列表时,并不是获取所有字段的信息,只是部分字段。但是还要把部分字段的信息重新封装到实体类中。就叫做创建实体类的投影。
使用要求:
HQL要求:语句中必须有 new 关键词
select new cn.itcast.domain.Customer(custId,custName) from Customer;
实体类要求:必须生成对应参数列表的构造函数
/** * 投影查询: * 我们查询一个实体列表时,并不是获取所有字段的信息,只是部分字段。 * 但是还要把部分字段的信息重新封装到实体类中。 * 就叫做创建实体类的投影。 * 使用要求: * 1、HQL语句: * select new cn.itcast.domain.Customer(custId,custName) from Customer; * 2、实体类要求: * 必须生成对应参数列表的构造函数 */ @Test public void test7(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Query对象 Query query = s.createQuery("select new Customer(custId,custName) from Customer"); //2.获取结果集 /*List<Object[]> list = query.list(); for(Object[] os : list){ System.out.println("数组中的内容-------------------"); for(Object o : os){ System.out.println(o); } }*/ List list = query.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
三、Criteria对象的查询
1、涉及的对象
Criteria对象2、如何获取对象
session.createCriteria(Class clazz);3、参数的含义
要查询的实体类字节码对象4、QBC查询
使用Criteria对象查询,Query By Criteria特点:一句SQL语句或者HQL语句都不需要。是把生成语句的过程都通过调用方法来表现出来了。凡是能用HQL查询的,QBC都能查,反之亦然。
5、查询所有
/** * 查询所有客户 */ @Test public void test1(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Criteria对象 Criteria c = s.createCriteria(Customer.class);//此行就相当于hql的from Customer //2.获取结果集 List list = c.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
6、条件查询
/** * 条件查询 */ @Test public void test2(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Criteria对象 Criteria c = s.createCriteria(Customer.class);//此行就相当于hql的from Customer //2.设置查询条件 c.add(Restrictions.like("custName", "%修%"));//from Customer where custName like '%修%' c.add(Restrictions.eq("custIndustry","商业办公")); //3.获取结果集 List list = c.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
7、排序查询
/** * 排序查询 */ @Test public void test3(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Criteria对象 Criteria c = s.createCriteria(Customer.class);//此行就相当于hql的from Customer //2.设置排序 c.addOrder(Order.desc("custId")); //3.获取结果集 List list = c.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
8、分页查询
/** * 分页查询 * 它和HQL语句所涉及的方法是一模一样的 * */ @Test public void test4(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Criteria对象 Criteria c = s.createCriteria(Customer.class);//此行就相当于hql的from Customer //2.设置分页的条件 c.setFirstResult(2); c.setMaxResults(2); //3.获取结果集 List list = c.list(); for(Object o : list){ System.out.println(o); } tx.commit(); }
9、统计查询
/** * 统计查询(在QBC中使用聚合函数) */ @Test public void test5(){ Session s = HibernateUtil.getCurrentSession(); Transaction tx = s.beginTransaction(); //1.获取Criteria对象 Criteria c = s.createCriteria(Customer.class);//此行就相当于hql的from Customer //2.在Criteria对象中设置Projection c.setProjection(Projections.count("custId")); //3.获取结果集 Object obj = c.uniqueResult(); System.out.println(obj); tx.commit(); }
四、QBC常用条件查询说明
相关文章推荐
- Hibernate:HQL/QBC查询语言比较的用法(1)
- hibernate 中HQL语句查询学习笔记一
- Hibernate:HQL/QBC查询语言比较的用法(2)
- Hibernate:HQL/QBC查询语言比较的用法
- hibernate框架学习笔记7:HQL查询、Criteria查询简介
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
- Hibernate学习笔记----QBC和本地SQL查询
- hibernate 学习笔记(2)——HQL和高级查询
- hibernate框架学习笔记10:HQL查询详解
- Hibernate学习笔记总结(三)——Hibernate 3.x——HQL查询语言(重点)
- Hibernate学习-07:CRUD(增删改查)操作之查询多条/所有记录HQL、QBC、SQL三种方式
- Hibernate学习笔记 第六章 HQL查询与缓存
- Hibernate 学习笔记:Hibernate 中 HQL 语句的用法
- Hibernate中createCriteria即QBC查询的详细用法和HQL的区别?
- [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页
- Hibernate学习笔记5:QBC条件查询例子
- Hibernate:HQL/QBC查询语言比较的用法(1)
- ssh学习:hibernate中QBC查询
- 18.01.06,web学习第三十八天,还有一年,努力吧青年 hibernate第四天 HQL,Criteria,离线对象,查询策略
- Hibernate学习之---使用HQL查询