1.练习题

1.查询所有商品的名称【查询特定属性】(只有一个参数的话可以使用List<String>接收数据)
2.查询所有商品的名称和供应商【查询特定属性】(多个参数可以使用List<Object[]>接收数据)

3.查询所有商品的名称和供应商【查询特定属性】(多个参数可以使用List<Object[]>接收数据)

使用这种方式我们需要提供相应的构造方法

4.查询出所有商品信息,按照成本价排序【查询排序】
5.查询出所有产品信息,按照分类编号排序【使用关联对象属性排序】
6.查询无线鼠标和游戏鼠标商品信息【使用IN】 使用占位符
7.查询无线鼠标和游戏鼠标商品信息【使用IN】 使用命名参数

注意:...in :dirNames冒号后面不能有空格
8.查询出成本价在30到100的所有商品【使用BETWEEN..AND..】
9.查询出产品名称中包括G9或M3的商品【使用LIKE】
10.查询出商品的分类【distinct】
11.查询出有商品的分类【size】//必须配置双向一对多:商品和分类
12.查询出分类信息,按照分类的产品数数排序【使用函数排序】
13.查询出没有产品的分类【对集合使用size】
14.查询出所有产品及分类名称【JOIN/LEFT JOIN】
15.查询出各个分类商品的平均成本价和最高价格【使用聚集函数】avg() max()

聚集函数/GROUP/HAVIN
17.查询出各个分类拥有的产品种类数(使用聚合)
18.查询出大于平均成本价的商品信息  [子查询]
19.查询出没有成本价的商品
20.查询出没有成本价的商品  原生SQL查询
21.查询出所有商品并分页

从哪里开始取数据,索引从0开始 int firstResult = (currentPage - 1) * pageSize;
 取多少条int maxResults = pageSize;
22.查询出所有商品总条数   Long countLong = (Long) query.uniqueResult()

2.代码实现

  2.1配置

    a.数据库表结构

    

    b.java模型

    

    

    c.映射文件

    

    d.工具类

    

  2.2.代码实现

 import com.hibernate.crud.model.DemoTest;
import com.hibernate.crud.model.Product;
import com.hibernate.crud.model.ProductDir;
import com.hibernate.crud.utils.HibernateUtils;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.junit.Test; import java.util.ArrayList;
import java.util.List; /**
* Created by asus on 2017/6/6.
*/
public class HqlTest {
@Test
public void testQuery22() {
Session session = HibernateUtils.getSession();
//22.查询出所有商品总条数 Long countLong = (Long) query.uniqueResult() String sql="select count(p.id) from com.hibernate.crud.model.Product p ";
Query query = session.createQuery(sql);
Long countLong = (Long) query.uniqueResult();
System.out.println("countLong:"+countLong);
session.close();
}
@Test
public void testQuery21() {
Session session = HibernateUtils.getSession();
//21.查询出所有商品并分页
//从哪里开始取数据,索引从0开始 int firstResult = (currentPage - 1) * pageSize;
// 取多少条int maxResults = pageSize;
String sql="select p from com.hibernate.crud.model.Product p ";
Query query = session.createQuery(sql);
query.setFirstResult(6);
query.setMaxResults(5);
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品名称:"+s.getProductName()+"分类名称:"+s.getCostPrice());
}
session.close();
} @Test
public void testQuery20() {
Session session = HibernateUtils.getSession();
//20.查询出没有成本价的商品 原生SQL查询
String sql="select * from product p where p.costPrice is null ";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addEntity(Product.class);
List<Product> list=sqlQuery.list();
for (Product s : list) {
System.out.println("商品名称:"+s.getProductName()+"分类名称:"+s.getCostPrice());
}
session.close();
}
@Test
public void testQuery19() {
Session session = HibernateUtils.getSession();
//19.查询出没有成本价的商品
String hql="select p from com.hibernate.crud.model.Product p where p.costPrice is null ";
Query query = session.createQuery(hql);
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品名称:"+s.getProductName()+"分类名称:"+s.getCostPrice());
}
session.close();
}
@Test
public void testQuery18() {
Session session = HibernateUtils.getSession();
//18.查询出大于平均成本价的商品信息 [子查询]
String hql="select p from com.hibernate.crud.model.Product p where p.costPrice >(select avg(p2.costPrice) from com.hibernate.crud.model.Product p2) ";
Query query = session.createQuery(hql);
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品名称:"+s.getProductName()+"分类名称:"+s.getCostPrice());
}
session.close();
}
@Test
public void testQuery17() {
Session session = HibernateUtils.getSession();
//17.查询出各个分类拥有的产品种类数(使用聚合)
String hql="select pd.dirName,count(p.id) from com.hibernate.crud.model.Product p left join p.dir pd group by pd.id ";
Query query = session.createQuery(hql);
List<Object[]> list=query.list();
for (Object[] s : list) {
System.out.println("商品名称:"+s[0]+"分类名称:"+s[1]);
}
session.close();
}
/* @Test
public void testQuery16() {
Session session = HibernateUtils.getSession();
//16.查询出各个分类商品的平均成本价和最高价格【使用聚集函数】avg() max()
//聚集函数/GROUP
String hql="select pd.dirName,avg(p.costPrice),max(p.costPrice) from com.hibernate.crud.model.Product p left join p.dir pd group by pd.id ";
Query query = session.createQuery(hql);
List<Object[]> list=query.list();
for (Object[] s : list) {
System.out.println("商品名称:"+s[0]+"分类名称:"+s[1]+" ----"+s[2]);
}
session.close();
}*/
@Test
public void testQuery15() {
Session session = HibernateUtils.getSession();
//15.查询出各个分类商品的平均成本价和最高价格【使用聚集函数】avg() max()
//聚集函数/GROUP/HAVIN
String hql="select pd.dirName,avg(p.costPrice),max(p.costPrice) from com.hibernate.crud.model.Product p left join p.dir pd group by pd.id ";
Query query = session.createQuery(hql);
List<Object[]> list=query.list();
for (Object[] s : list) {
System.out.println("商品名称:"+s[0]+"分类名称:"+s[1]+" ----"+s[2]);
}
session.close();
}
@Test
public void testQuery14() {
/**
* 注意:hibernate中的JOIN和LEFT JOIN(使用SQL/HQL对比)
Hql 要求1:不写on语句
Hql 要求2:join后面的写的内容是前面.出实体对象的别名来
*/
Session session = HibernateUtils.getSession();
//14.查询出所有产品及分类名称【JOIN/LEFT JOIN】
String hql="select p.productName,pd.dirName from com.hibernate.crud.model.Product p left join p.dir pd ";
Query query = session.createQuery(hql);
List<Object[]> list=query.list();
for (Object[] s : list) {
System.out.println("商品名称:"+s[0]+"分类名称:"+s[1]);
}
session.close();
}
@Test
public void testQuery13() {
Session session = HibernateUtils.getSession();
//13.查询出没有产品的分类【对集合使用size】
String hql="select obj from com.hibernate.crud.model.ProductDir obj where obj.products.size=0 ";
Query query = session.createQuery(hql);
List<ProductDir> list=query.list();
for (ProductDir s : list) {
System.out.println("分类名称:"+s.getDirName()+" id:"+s.getId());
}
session.close();
}
@Test
public void testQuery12() {
Session session = HibernateUtils.getSession();
//12.查询出分类信息,按照分类的产品数数排序【使用函数排序】
String hql="select obj from com.hibernate.crud.model.ProductDir obj order by obj.products.size desc ";
Query query = session.createQuery(hql);
List<ProductDir> list=query.list();
for (ProductDir s : list) {
System.out.println("分类名称:"+s.getDirName()+" id:"+s.getId());
}
session.close();
}
@Test
public void testQuery11() {
Session session = HibernateUtils.getSession();
//11.查询出有商品的分类【size】//必须配置双向一对多:商品和分类
String hql="select obj from com.hibernate.crud.model.ProductDir obj where obj.products.size>0 ";
Query query = session.createQuery(hql);
List<ProductDir> list=query.list();
for (ProductDir s : list) {
System.out.println("分类名称:"+s.getDirName()+" id:"+s.getId());
}
session.close();
}
@Test
public void testQuery10() {
Session session = HibernateUtils.getSession();
//10.查询出商品的分类【distinct】
String hql="select distinct obj.dir from com.hibernate.crud.model.Product obj";
Query query = session.createQuery(hql);
List<ProductDir> list=query.list();
for (ProductDir s : list) {
System.out.println("分类名称:"+s.getDirName()+" id:"+s.getId());
}
session.close();
}
@Test
public void testQuery9() {
Session session = HibernateUtils.getSession();
//9.查询出产品名称中包括G9或M3的商品【使用LIKE】
// String hql="select obj from com.hibernate.crud.model.Product obj where obj.productName like '%G9%' or obj.productName like '%M3%'";
String p1="G9";
String p2="M3";
String hql="select obj from com.hibernate.crud.model.Product obj where obj.productName like '%"+p1+"%' or obj.productName like '%M3%' ";
Query query = session.createQuery(hql);
List<Product> list=query.list();
// query.setString("pam","%G9%");
// query.setString("pan","%M3%");
for (Product s : list) {
System.out.println("商品的名称位:"+s.getProductName()+" 供应商位:"+s.getSupplier()+" 成本价:"+s.getCostPrice());
}
session.close();
}
@Test
public void testQuery8() {
Session session = HibernateUtils.getSession();
//8.查询出成本价在30到100的所有商品【使用BETWEEN..AND..】
String hql="select obj from com.hibernate.crud.model.Product obj where obj.costPrice between ? and ?";
Query query = session.createQuery(hql);
query.setParameter(0,"30");
query.setParameter(1,"100");
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品的名称位:"+s.getProductName()+" 供应商位:"+s.getSupplier()+" 成本价:"+s.getCostPrice());
}
session.close();
}
@Test
public void testQuery7() {
Session session = HibernateUtils.getSession();
//6.查询无线鼠标和游戏鼠标商品信息【使用IN】 使用命名参数
//注意:...in :dirNames冒号后面不能有空格
String hql="select obj from com.hibernate.crud.model.Product obj where obj.dir.dirName in :dirNames";
Query query = session.createQuery(hql);
String[] param={"无线鼠标","游戏鼠标"};
query.setParameterList("dirNames",param);
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品的名称位:"+s.getProductName()+" 供应商位:"+s.getSupplier()+" 鼠标名称:"+s.getDir().getDirName());
}
session.close();
}
@Test
public void testQuery6() {
Session session = HibernateUtils.getSession();
//6.查询无线鼠标和游戏鼠标商品信息【使用IN】 使用占位符
String hql="select obj from com.hibernate.crud.model.Product obj where obj.dir.dirName in (?,?)";
Query query = session.createQuery(hql);
query.setString(0,"无线鼠标");
query.setString(1,"游戏鼠标");
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品的名称位:"+s.getProductName()+" 供应商位:"+s.getSupplier()+" 鼠标名称:"+s.getDir().getDirName());
}
session.close();
}
@Test
public void testQuery5() {
Session session = HibernateUtils.getSession();
//5.查询出所有产品信息,按照产品编号排序【使用关联对象属性排序】
String hql="select obj from com.hibernate.crud.model.Product obj order by obj.dir.id desc ";
Query query = session.createQuery(hql);
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品的名称位:"+s.getProductName()+" 供应商位:"+s.getSupplier()+" id:"+s.getDir().getId());
}
session.close();
} @Test
public void testQuery4() {
Session session = HibernateUtils.getSession();
//4.查询出所有商品信息,按照成本价排序【查询排序】
String hql="select obj from com.hibernate.crud.model.Product obj order by obj.costPrice desc ";
Query query = session.createQuery(hql);
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品的名称位:"+s.getProductName()+" 供应商位:"+s.getSupplier()+" 成本价:"+s.getCostPrice());
}
session.close();
}
@Test
public void testQuery3() {
Session session = HibernateUtils.getSession();
// 3.查询所有商品的名称和供应商【查询特定属性】(多个参数可以使用List<Object[]>接收数据)
// 注:使用这种方式我们需要提供相应的构造方法
String hql="select new Product(obj.productName, obj.supplier) from com.hibernate.crud.model.Product obj";
Query query = session.createQuery(hql);
List<Product> list=query.list();
for (Product s : list) {
System.out.println("商品的名称位:"+s.getProductName()+" 供应商位:"+s.getSupplier());
}
session.close();
}
@Test
public void testQuery2() {
Session session = HibernateUtils.getSession();
// 2.查询所有商品的名称和供应商【查询特定属性】(多个参数可以使用List<Object[]>接收数据)
String hql="select obj.productName, obj.supplier from com.hibernate.crud.model.Product obj";
Query query = session.createQuery(hql);
List<Object[]> list=query.list();
for (Object[] s : list) {
System.out.println("商品的名称位:"+s[0]+" 供应商位:"+s[1]);
}
session.close();
}
@Test
public void testQuery1() {
Session session = HibernateUtils.getSession();
// 1.查询所有商品的名称【查询特定属性】(只有一个参数的话可以使用List<String>接收数据)
String hql="select obj.productName from com.hibernate.crud.model.Product obj";
Query query = session.createQuery(hql);
List<String> list=query.list();
for (String s : list) {
System.out.println("s:"+s);
}
session.close();
} }

ssh架构之hibernate(五)hql语句狂练的更多相关文章

  1. Hibernate的hql语句save,update方法不执行

    Hibernate的hql语句save,update方法不执行 可能出现的原因问题: 未进行事务管理 需要进行xml事务配置或者注解方式的事务配置

  2. Hibernate(五)__hql语句

    hql(hibernate query language)功能强大. 首先回忆下之前我们接触的对数据对象的操作: ①删除session.delete(对象) ②保存session.save(对象)   ...

  3. Hibernate 的HQL语句,初级

    这里讲解简单的HQL语句,因为很多比较复杂的外查询,用一般的查询很难完成 所以这里需要使用HQL @Test public void selquery(){ System.out.printf(&qu ...

  4. Hibernate五 HQL查询

    HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...

  5. hibernate 之 HQL语句总结【转】

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...

  6. Hibernate框架HQL语句

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

  7. Hibernate写hql语句与不写hql语句的区别?

    写hql语句与不写hql语句的区别? 写hql语句:书写HQL语句,所有的查询与投影的设计均使用HQL语句完成. 不写hql语句:没有任何查询语句,所有的查询与投影的设计使用面向对象格式完成. 二者选 ...

  8. 关于hibernate中hql语句 case when的写法

    java hql case when的用法 if(null == sorter){ hql.append(" order by m.mDate desc,case when m.mealTi ...

  9. Hibernate的HQL语句中定位参数和具名参数传参

    HQL查询: 1.有关hql查询语句中的问号参数形式,如果出现有多个问号,这对后面设置参数就比较麻烦. 如:from User user where user.name=? and user.age= ...

随机推荐

  1. c#,Model 实体转json,字符串转json

    public class JsonF { #region 字符串转json /// <summary> /// 字符串转json /// </summary> /// < ...

  2. TCP/IP_网络基础知识

    今天看到k8s的网络,顿感网络知识不是特别扎实,立马回头补一下Tcp-ip知识,顺便记录下学习的过程: 计算机与网络发展的7个阶段: 批处理时代(计算机按照顺序处理,50年代)->分时系统时代( ...

  3. Win/Lin 双系统时间错误的调整 (转)

    Win/Lin 双系统时间错误的调整 http://jingyan.baidu.com/article/154b46317b25ca28ca8f41e8.html | 浏览:1070 | 更新:201 ...

  4. ROS学习手记 - 7 创建ROS msg & srv

    至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理. 本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ff ...

  5. 初窥GPFS文件系统(转)

    原文地址:http://blog.csdn.net/jznsmail/article/details/5502840?reload 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化 ...

  6. 46.纯 CSS 创作一个在容器中反弹的小球

    原文地址:https://segmentfault.com/a/1190000015221260 练习地址:https://scrimba.com/c/c3GEWmTb 感想: 原来animation ...

  7. 3.div+css 的布局较 table 布局有什么优点

    改版的时候更方便,只需改css文件. 页面加载速度更快.结构化清晰.页面显示简介. 表现与结构相分离. 已于优化搜索引擎更友好,排名更容易靠前.

  8. EXCEL中统计单元格内容出现次数

    参考网站: https://jingyan.baidu.com/article/7c6fb428dfcc9580642c90ae.html 统计单元格内容出现次数是工作中经常会涉及到的问题. 那么,如 ...

  9. linux驱动开发第一步hello

    先查看Ubuntu的版本 cat /etc/issue lin@lin-virtual-machine:~$ cat /etc/issue Ubuntu 12.04 LTS \n \l 或者使用 li ...

  10. delphi ios info.plist

    delphi ios info.plist delphi修改info.plist.TemplateiOS.xml文件,然后自动生成project1.info.plist http://docwiki. ...