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. SPOJ3276 D-query

    题意:n个数 a1...an,q组询问,每组询问给定 l,r,输出 [ l, r ] 有多少不同的数 ( n ≤30000, q ≤200000, ai ≤ 106 ) 离线 + 树状数组维护 #in ...

  2. StanFord ML 笔记 第六部分&&第七部分

    第六部分内容: 1.偏差/方差(Bias/variance) 2.经验风险最小化(Empirical Risk Minization,ERM) 3.联合界(Union bound) 4.一致收敛(Un ...

  3. scala变量类型和性质

    最高的父类型为Any,最低类型为Nothing Any is the supertype of all types, also called the top type. It defines cert ...

  4. 关于ioncube扩展的安装和使用

    ioncube 是一个专业级的PHP加密解密工具 这里是按照此扩展的教程,安装以后就可以运行用ioncube加密的文件 引导安装说明:一.下载loader-wizard.php ioncube提供了一 ...

  5. Android Camera2的使用

    参考:https://developer.android.com/reference/android/hardware/camera2/package-summary.html camera2提供了一 ...

  6. nginx 服务器常见配置以及负载均衡

    # 配置启动用户,用户权限不够会出现访问 403 的情况 user root; # 启动多少个工作进程 worker_processes 1; # 错误日志文件进程文件的保存地址 error_log ...

  7. centos7.5安装golang

    1.下载 [root@localhost bin]#wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz [root@localhost ...

  8. 利用strstr和sscanf解析GPS信息

    比如说我们要做一个GPS导航的项目,需要读取GPS模块以ASCII码的形式发送过来的数据,然后对这些数据进行处理,提取我们需要的信息.这就涉及到很多操作字符串的问题.下面就以此为例,利用strstr函 ...

  9. 使用STM32的USART的同步模式Synchronous调戏SPI【usart模拟spi理论】

    [原创出品§转载请注明出处] 出处:http://www.cnblogs.com/libra13179/p/7064321.html 什么东西?? 我们先来看我们平常看到SPI的时序图(呵呵,要是忘记 ...

  10. Image Base64 Datasnap Image delphi与c#互相兼容识别

    delphi用,不能与java.c#互相识别. procedure TServerMethods.UpdateDoc(ItemID : integer; doc : TStream); delphi用 ...