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 }