• ssh架构之hibernate(五)hql语句狂练


    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.代码实现

      1 import com.hibernate.crud.model.DemoTest;
      2 import com.hibernate.crud.model.Product;
      3 import com.hibernate.crud.model.ProductDir;
      4 import com.hibernate.crud.utils.HibernateUtils;
      5 import org.hibernate.Query;
      6 import org.hibernate.SQLQuery;
      7 import org.hibernate.Session;
      8 import org.junit.Test;
      9 
     10 import java.util.ArrayList;
     11 import java.util.List;
     12 
     13 /**
     14  * Created by asus on 2017/6/6.
     15  */
     16 public class HqlTest {
     17     @Test
     18     public void testQuery22() {
     19         Session session = HibernateUtils.getSession();
     20         //22.查询出所有商品总条数   Long countLong = (Long) query.uniqueResult()
     21 
     22         String sql="select count(p.id) from com.hibernate.crud.model.Product p  ";
     23         Query query = session.createQuery(sql);
     24         Long countLong = (Long) query.uniqueResult();
     25         System.out.println("countLong:"+countLong);
     26         session.close();
     27     }
     28     @Test
     29     public void testQuery21() {
     30         Session session = HibernateUtils.getSession();
     31         //21.查询出所有商品并分页
     32         //从哪里开始取数据,索引从0开始 int firstResult = (currentPage - 1) * pageSize;
     33         // 取多少条int maxResults = pageSize;
     34         String sql="select p from com.hibernate.crud.model.Product p  ";
     35         Query query = session.createQuery(sql);
     36         query.setFirstResult(6);
     37         query.setMaxResults(5);
     38         List<Product> list=query.list();
     39         for (Product s : list) {
     40             System.out.println("商品名称:"+s.getProductName()+"分类名称:"+s.getCostPrice());
     41         }
     42         session.close();
     43     }
     44 
     45     @Test
     46     public void testQuery20() {
     47         Session session = HibernateUtils.getSession();
     48         //20.查询出没有成本价的商品  原生SQL查询
     49         String sql="select * from product p where p.costPrice is null ";
     50         SQLQuery sqlQuery = session.createSQLQuery(sql);
     51         sqlQuery.addEntity(Product.class);
     52         List<Product> list=sqlQuery.list();
     53         for (Product s : list) {
     54             System.out.println("商品名称:"+s.getProductName()+"分类名称:"+s.getCostPrice());
     55         }
     56         session.close();
     57     }
     58     @Test
     59     public void testQuery19() {
     60         Session session = HibernateUtils.getSession();
     61         //19.查询出没有成本价的商品
     62         String hql="select p from com.hibernate.crud.model.Product p where p.costPrice is null ";
     63         Query query = session.createQuery(hql);
     64         List<Product> list=query.list();
     65         for (Product s : list) {
     66             System.out.println("商品名称:"+s.getProductName()+"分类名称:"+s.getCostPrice());
     67         }
     68         session.close();
     69     }
     70     @Test
     71     public void testQuery18() {
     72         Session session = HibernateUtils.getSession();
     73         //18.查询出大于平均成本价的商品信息  [子查询]
     74         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) ";
     75         Query query = session.createQuery(hql);
     76         List<Product> list=query.list();
     77         for (Product s : list) {
     78             System.out.println("商品名称:"+s.getProductName()+"分类名称:"+s.getCostPrice());
     79         }
     80         session.close();
     81     }
     82     @Test
     83     public void testQuery17() {
     84         Session session = HibernateUtils.getSession();
     85         //17.查询出各个分类拥有的产品种类数(使用聚合)
     86         String hql="select pd.dirName,count(p.id) from com.hibernate.crud.model.Product p left  join p.dir pd group by pd.id ";
     87         Query query = session.createQuery(hql);
     88         List<Object[]> list=query.list();
     89         for (Object[] s : list) {
     90             System.out.println("商品名称:"+s[0]+"分类名称:"+s[1]);
     91         }
     92         session.close();
     93     }
     94   /*  @Test
     95     public void testQuery16() {
     96         Session session = HibernateUtils.getSession();
     97         //16.查询出各个分类商品的平均成本价和最高价格【使用聚集函数】avg() max()
     98         //聚集函数/GROUP
     99         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 ";
    100         Query query = session.createQuery(hql);
    101         List<Object[]> list=query.list();
    102         for (Object[] s : list) {
    103             System.out.println("商品名称:"+s[0]+"分类名称:"+s[1]+" ----"+s[2]);
    104         }
    105         session.close();
    106     }*/
    107     @Test
    108     public void testQuery15() {
    109         Session session = HibernateUtils.getSession();
    110         //15.查询出各个分类商品的平均成本价和最高价格【使用聚集函数】avg() max()
    111         //聚集函数/GROUP/HAVIN
    112         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 ";
    113         Query query = session.createQuery(hql);
    114         List<Object[]> list=query.list();
    115         for (Object[] s : list) {
    116             System.out.println("商品名称:"+s[0]+"分类名称:"+s[1]+" ----"+s[2]);
    117         }
    118         session.close();
    119     }
    120     @Test
    121     public void testQuery14() {
    122         /**
    123          * 注意:hibernate中的JOIN和LEFT JOIN(使用SQL/HQL对比)
    124          Hql 要求1:不写on语句
    125          Hql 要求2:join后面的写的内容是前面.出实体对象的别名来
    126          */
    127         Session session = HibernateUtils.getSession();
    128         //14.查询出所有产品及分类名称【JOIN/LEFT JOIN】
    129         String hql="select p.productName,pd.dirName from com.hibernate.crud.model.Product p left  join p.dir pd  ";
    130         Query query = session.createQuery(hql);
    131         List<Object[]> list=query.list();
    132         for (Object[] s : list) {
    133             System.out.println("商品名称:"+s[0]+"分类名称:"+s[1]);
    134         }
    135         session.close();
    136     }
    137     @Test
    138     public void testQuery13() {
    139         Session session = HibernateUtils.getSession();
    140         //13.查询出没有产品的分类【对集合使用size】
    141         String hql="select obj from com.hibernate.crud.model.ProductDir obj where obj.products.size=0 ";
    142         Query query = session.createQuery(hql);
    143         List<ProductDir> list=query.list();
    144         for (ProductDir s : list) {
    145             System.out.println("分类名称:"+s.getDirName()+"   id:"+s.getId());
    146         }
    147         session.close();
    148     }
    149     @Test
    150     public void testQuery12() {
    151         Session session = HibernateUtils.getSession();
    152         //12.查询出分类信息,按照分类的产品数数排序【使用函数排序】
    153         String hql="select obj from com.hibernate.crud.model.ProductDir obj order by obj.products.size desc ";
    154         Query query = session.createQuery(hql);
    155         List<ProductDir> list=query.list();
    156         for (ProductDir s : list) {
    157             System.out.println("分类名称:"+s.getDirName()+"   id:"+s.getId());
    158         }
    159         session.close();
    160     }
    161     @Test
    162     public void testQuery11() {
    163         Session session = HibernateUtils.getSession();
    164         //11.查询出有商品的分类【size】//必须配置双向一对多:商品和分类
    165         String hql="select obj from com.hibernate.crud.model.ProductDir obj where obj.products.size>0 ";
    166         Query query = session.createQuery(hql);
    167         List<ProductDir> list=query.list();
    168         for (ProductDir s : list) {
    169             System.out.println("分类名称:"+s.getDirName()+"   id:"+s.getId());
    170         }
    171         session.close();
    172     }
    173     @Test
    174     public void testQuery10() {
    175         Session session = HibernateUtils.getSession();
    176         //10.查询出商品的分类【distinct】
    177         String hql="select distinct obj.dir from com.hibernate.crud.model.Product obj";
    178         Query query = session.createQuery(hql);
    179         List<ProductDir> list=query.list();
    180         for (ProductDir s : list) {
    181             System.out.println("分类名称:"+s.getDirName()+"   id:"+s.getId());
    182         }
    183         session.close();
    184     }
    185     @Test
    186     public void testQuery9() {
    187         Session session = HibernateUtils.getSession();
    188         //9.查询出产品名称中包括G9或M3的商品【使用LIKE】
    189        // String hql="select obj from com.hibernate.crud.model.Product obj where obj.productName like '%G9%' or  obj.productName like '%M3%'";
    190         String p1="G9";
    191         String p2="M3";
    192         String hql="select obj from com.hibernate.crud.model.Product obj where obj.productName like '%"+p1+"%' or obj.productName like '%M3%' ";
    193         Query query = session.createQuery(hql);
    194         List<Product> list=query.list();
    195        // query.setString("pam","%G9%");
    196       //  query.setString("pan","%M3%");
    197         for (Product s : list) {
    198             System.out.println("商品的名称位:"+s.getProductName()+"   供应商位:"+s.getSupplier()+"      成本价:"+s.getCostPrice());
    199         }
    200         session.close();
    201     }
    202     @Test
    203     public void testQuery8() {
    204         Session session = HibernateUtils.getSession();
    205         //8.查询出成本价在30到100的所有商品【使用BETWEEN..AND..】
    206         String hql="select obj from com.hibernate.crud.model.Product obj where obj.costPrice between ? and ?";
    207         Query query = session.createQuery(hql);
    208         query.setParameter(0,"30");
    209         query.setParameter(1,"100");
    210         List<Product> list=query.list();
    211         for (Product s : list) {
    212             System.out.println("商品的名称位:"+s.getProductName()+"   供应商位:"+s.getSupplier()+"      成本价:"+s.getCostPrice());
    213         }
    214         session.close();
    215     }
    216     @Test
    217     public void testQuery7() {
    218         Session session = HibernateUtils.getSession();
    219         //6.查询无线鼠标和游戏鼠标商品信息【使用IN】 使用命名参数
    220         //注意:...in :dirNames冒号后面不能有空格
    221         String hql="select obj from com.hibernate.crud.model.Product obj where obj.dir.dirName in :dirNames";
    222         Query query = session.createQuery(hql);
    223         String[] param={"无线鼠标","游戏鼠标"};
    224        query.setParameterList("dirNames",param);
    225         List<Product> list=query.list();
    226         for (Product s : list) {
    227             System.out.println("商品的名称位:"+s.getProductName()+"   供应商位:"+s.getSupplier()+"       鼠标名称:"+s.getDir().getDirName());
    228         }
    229         session.close();
    230     }
    231     @Test
    232     public void testQuery6() {
    233         Session session = HibernateUtils.getSession();
    234         //6.查询无线鼠标和游戏鼠标商品信息【使用IN】 使用占位符
    235         String hql="select obj from com.hibernate.crud.model.Product obj where obj.dir.dirName in (?,?)";
    236         Query query = session.createQuery(hql);
    237         query.setString(0,"无线鼠标");
    238         query.setString(1,"游戏鼠标");
    239         List<Product> list=query.list();
    240         for (Product s : list) {
    241             System.out.println("商品的名称位:"+s.getProductName()+"   供应商位:"+s.getSupplier()+"       鼠标名称:"+s.getDir().getDirName());
    242         }
    243         session.close();
    244     }
    245     @Test
    246     public void testQuery5() {
    247         Session session = HibernateUtils.getSession();
    248         //5.查询出所有产品信息,按照产品编号排序【使用关联对象属性排序】
    249         String hql="select obj from com.hibernate.crud.model.Product obj order by obj.dir.id desc ";
    250         Query query = session.createQuery(hql);
    251         List<Product> list=query.list();
    252         for (Product s : list) {
    253             System.out.println("商品的名称位:"+s.getProductName()+"   供应商位:"+s.getSupplier()+"       id:"+s.getDir().getId());
    254         }
    255         session.close();
    256     }
    257 
    258     @Test
    259     public void testQuery4() {
    260         Session session = HibernateUtils.getSession();
    261         //4.查询出所有商品信息,按照成本价排序【查询排序】
    262         String hql="select obj from com.hibernate.crud.model.Product obj order by obj.costPrice desc ";
    263         Query query = session.createQuery(hql);
    264         List<Product> list=query.list();
    265         for (Product s : list) {
    266             System.out.println("商品的名称位:"+s.getProductName()+"   供应商位:"+s.getSupplier()+" 成本价:"+s.getCostPrice());
    267         }
    268         session.close();
    269     }
    270     @Test
    271     public void testQuery3() {
    272         Session session = HibernateUtils.getSession();
    273         // 3.查询所有商品的名称和供应商【查询特定属性】(多个参数可以使用List<Object[]>接收数据)
    274        // 注:使用这种方式我们需要提供相应的构造方法
    275         String hql="select new Product(obj.productName, obj.supplier) from com.hibernate.crud.model.Product obj";
    276         Query query = session.createQuery(hql);
    277         List<Product> list=query.list();
    278         for (Product s : list) {
    279             System.out.println("商品的名称位:"+s.getProductName()+"   供应商位:"+s.getSupplier());
    280         }
    281         session.close();
    282     }
    283     @Test
    284     public void testQuery2() {
    285         Session session = HibernateUtils.getSession();
    286         // 2.查询所有商品的名称和供应商【查询特定属性】(多个参数可以使用List<Object[]>接收数据)
    287         String hql="select obj.productName, obj.supplier from com.hibernate.crud.model.Product obj";
    288         Query query = session.createQuery(hql);
    289         List<Object[]> list=query.list();
    290         for (Object[] s : list) {
    291             System.out.println("商品的名称位:"+s[0]+"   供应商位:"+s[1]);
    292         }
    293         session.close();
    294     }
    295     @Test
    296     public void testQuery1() {
    297         Session session = HibernateUtils.getSession();
    298       // 1.查询所有商品的名称【查询特定属性】(只有一个参数的话可以使用List<String>接收数据)
    299         String hql="select obj.productName from com.hibernate.crud.model.Product obj";
    300         Query query = session.createQuery(hql);
    301         List<String> list=query.list();
    302         for (String s : list) {
    303             System.out.println("s:"+s);
    304         }
    305         session.close();
    306     }
    307 
    308 
    309 }
  • 相关阅读:
    iOS
    “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift
    iOS
    iOS
    springboot rabbitmq 死信队列应用场景和完整demo
    LRU
    分布式系统高可用原则
    Java8 Stream 流使用场景和常用操作
    下载安装Zookeeper
    Java8内置的函数式编程接口应用场景和方式
  • 原文地址:https://www.cnblogs.com/newAndHui/p/8523162.html
Copyright © 2020-2023  润新知