HQL
HQL是Hibernate Query Language的缩写
hql和sql区别/异同
hql | sql |
---|---|
类名/属性 | 表名/列名 |
区分大小写,关键字不区分大小写 | 不区分大小写 |
别名 | 别名 |
?(占位符),从下标0开始计算位置(hibernate5之后不支持) | ?(占位符),从顺序1开始计算位置 |
:命名参数 | 不支持:命名参数 |
面向对象的查询语言 | 面向结构查询语言 |
处理返回的结果集
1、单个对象
/**
* 结果处理情况 1: Book
* 直接利用对象进行数据接收
*/
@Test
public void testList1() {
String hql = "from Book";
Query query = session.createQuery(hql);
List<Book> list = query.list();
for (Book book : list) {
System.out.println(book);
}
}
2、String
/**
* 结果处理情况 2:String
* 查询一列
* jdbc:查询的是表里面的某一列 不区分大小写
* hpl:查的是实体类中的某一属性 严格区分大小写
*/
@Test
public void testList2() {
String hql = " select bookname from Book ";
// Query query = session.createQuery(hpl);
// List<String> list = query.getResultList();
// System.out.println(list);
List<String> list = session.createQuery(hql).list();
System.out.println(list);
}
3、Object[]
/**
* 结果处理情况 3:Object[]
*/
@Test
public void testList3() {
String hql = "select bookid,bookname from Book ";
List<Object[]> list = session.createQuery(hql).list();
for (Object[] book : list) {
System.out.println(Arrays.toString(book));
}
}
4、Map
这里的map是hibernate内置函数
/**
* 结果处理情况 4:利用hibernate内置函数进行结果处理
*/
@Test
public void testList4() {
String hql = "select new map(bookid,bookname) from Book ";
List<Map> list = session.createQuery(hql).list();
for (Map book : list) {
System.out.println(book);
}
}
5、构造方法
实体类提供构造方法,随便加上无参的构造器
/**
* 结果处理情况 5:利用构造方法进行结果处理
* 1、当你给某一个类提供有参构造器,顺便加上无参构造器
* 2、构造方法赋值的原理(完善MVC的crud)
*/
@Test
public void testList5() {
String hql = "select new Book(bookid,bookname) from Book ";
List<Book> list = session.createQuery(hql).list();
for (Book book : list) {
System.out.println(book);
}
}
hql中使用占位符
/**
* hql中使用占位符:
* jdbc:select * from Book where book_id = ?
* hpl:
*
*/
@Test
public void testList6() {
//一
// String hql = "from Book where bookid = :bookid ";
// Query query = session.createQuery(hql);
// query.setParameter("bookid", 2);
// Book book = (Book) query.getSingleResult();
// System.out.println(book);
//二
// String hql = "from Book where price > :min and price < :max ";
// Query query = session.createQuery(hql);
// query.setParameter("min", 10f);
// query.setParameter("max", 30f);
// List<Book> list = query.list();
// for (Book book : list) {
// System.out.println(book);
// }
//三
String hql = "from Book where bookid in (:bookids) ";
Query query = session.createQuery(hql);
// new Integer[] {2,3,4}
List<Integer> params = new ArrayList<>();
params.add(2);
params.add(3);
params.add(4);
query.setParameterList("bookids", params);
List<Book> list = query.list();
for (Book book : list) {
System.out.println(book);
}
}
聚合函数
/**
* 聚合函数
*/
@Test
public void testList8() {
String hql = "select count(*) from Book";
Object list = session.createQuery(hql).list();
System.out.println(list);
}
分页
/**
* 分页
*/
@Test
public void testList9() {
String hql = "from Book where bookname like :bookname ";
int rows = 3;// 每页行数
int page = 1;// 页码
Query query = session.createQuery(hql);
query.setParameter("bookname", "%完美%");
query.setFirstResult((page-1)*rows);// 设置起始记录下标
query.setMaxResults(rows);// 设置返回的最大结果集
List<Book> list = query.list();
for (Book book : list) {
System.out.println(book);
}
}