Hql
1、 hql hibernate query language hibernate的查询语言
2、 hql是完全面向对象的查询语言,可以理解继承,多态,关联等概念
3、 hql区分大小写。但是对应sql关键字(select,from where)不区分
4、 hql基本查询:
单属性查询
@Test publicvoid testQuery1(){ //查询所有书名 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //Book 大写表示的是 cn.siggy.pojo.Book类 //name表示的 Book类中的属性名 String hql="select name from Book"; Query query = session.createQuery(hql); //list()方法返回查询结果 //返回结果的类型是根据查询的列决定的 List<String> list = query.list(); for(String bookname:list){ System.out.println(bookname); } tx.commit(); HibernateUtil.closeSession(); } |
多个属性查询
//查询多个属性 @Test publicvoid testQuery2(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //Book 大写表示的是 cn.siggy.pojo.Book类 //name表示的 Book类中的属性名 //list()方法返回查询结果 //查询多个列时 返回结果是数组集合数组中元素的类型是由查询列来决定 List<Object[]> list = session.createQuery("select name,price from Book").list(); for(Object[] objs:list){ System.out.println(objs[0]+"--"+objs[1]); } tx.commit(); HibernateUtil.closeSession(); } |
将多个查询列封装为对象
//查询多个列时将查询结果封装为对象集合 @Test publicvoid testQuery3(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //Book 大写表示的是 cn.siggy.pojo.Book类 //name表示的 Book类中的属性名 //list()方法返回查询结果 //查询多个列时 返回结果是数组集合数组中元素的类型是由查询列来决定 List<Book> list = session.createQuery("select new Book(name,price) from Book").list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
别名使用
//别名的使用 @Test publicvoid testQuery4(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //Book 大写表示的是 cn.siggy.pojo.Book类 //name表示的 Book类中的属性名 //list()方法返回查询结果 //查询多个列时 返回结果是数组集合数组中元素的类型是由查询列来决定 List<Book> list = session.createQuery("select new Book(b.name,b.price) from Book as b").list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
查询所有列1 不使用select
//查询所有列 @Test publicvoid testQuery5(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); List<Book> list = session.createQuery("from Book").list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
查询所有列2 使用select
//查询所有列2 不能使用* 需要使用别名 @Test publicvoid testQuery6(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); List<Book> list = session.createQuery("select b from Book b").list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
5、 hql条件查询
占位符? 从0开始
@Test publicvoid testQuery7(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); List<Book> list = session.createQuery("from Book b where id<?") .setInteger(0, 4) .list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
占位符? 从0开始 使用setParameter
@Test publicvoid testQuery8(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); List<Book> list = session.createQuery("from Book b where id<?") .setParameter(0, 4) .list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
命名查询
//条件查询命名查询--设置条件参数的名称 以冒号开头后更名称 设置参数时只需指定名 @Test publicvoid testQuery9(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); List<Book> list = session.createQuery("from Book b where id<:id") .setParameter("id", 4) .list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
分页查询
//分页查询 @Test publicvoid testQuery10(){ //查询所有书的名称和价格 //创建Query对象 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); List<Book> list = session.createQuery("from Book b") .setFirstResult(3)//开始显示的记录下标(currentPage-1)*pageSize .setMaxResults(3)//设置每页记录数pageSize .list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
统计查询
//聚合函数--统计查询 //结果唯一 @Test publicvoid testQuery11(){ //查询图书总数 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //int,long Number count = (Number)session.createQuery("select max(b.price) from Book b") .uniqueResult(); System.out.println("总数:"+count.byteValue()); tx.commit(); HibernateUtil.closeSession(); } |
分组查询
//分组查询 @Test publicvoid testQuery12(){ //查询图书总数 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //int,long List<Object[]> list = session.createQuery("select b.category.name,count(b.id) from Book b group by b.category.name") .list(); for(Object[] objs:list){ System.out.println(objs[0]+"--"+objs[1]); } tx.commit(); HibernateUtil.closeSession(); } |
排序
//排序 @Test publicvoid testQuery13(){ //查询图书总数 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //int,long List<Book> list = session.createQuery("from Book order by price desc") .list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
对象导航
//对象导航--连接查询 @Test publicvoid testQuery14(){ //查询 "仙侠"的书籍信息 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); String hql="from Book b where b.category.name=:name"; hql="select b from Book b join b.category c where c.name=:name"; hql="select b from Book b inner join b.category c where c.name=:name"; List<Book> list = session.createQuery(hql) .setString("name", "仙侠") .list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
左外链接
//左外链接 @Test publicvoid testQuery15(){ //查询 "仙侠"的书籍信息 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); String hql="select c.name,b.name from Category c left outer join c.books b"; List<Object[]> list = session.createQuery(hql) .list(); for(Object[] objs:list){ System.out.println(objs[0]+"----"+objs[1]); } tx.commit(); HibernateUtil.closeSession(); } |
过滤查询
//过滤器的使用--过滤查询---为查询加上某些条件 /* 1、定义过滤器 * 2、使用:加条件 * 3、在查询时候使得过滤器生效 * */ @Test publicvoid testQuery16(){ //查询 "仙侠"的书籍信息 Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //启用过滤器 session.enableFilter("bf").setParameter("id", 4); List<Book> list =session.createQuery("from Book").list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
6、 命名查询
//命名查询NamedQuery @Test publicvoid testQuery17(){ Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); List<Book> list =session.getNamedQuery("getByCategoryId") .setInteger("id", 3) .list(); for(Book b:list){ System.out.println(b); } tx.commit(); HibernateUtil.closeSession(); } |
7、 本地SQL查询
//本地查询 SQL查询 @Test publicvoid testQuery18(){ Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); String sql="select Name,Price from BOOK"; List<Object[]> list =session.createSQLQuery(sql) .list(); for(Object[] b:list){ System.out.println(b[0]+"-"+b[1]); } tx.commit(); HibernateUtil.closeSession(); } |