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 }

 

posted @ 2018-03-07 16:21  李东平|一线码农  阅读(704)  评论(0编辑  收藏  举报