hibernate之HQL
什么是hqlhql与sql的区别是什么处理返回的结果集HQL通用分页查询方法分页工具类PageBeanStringUtils:BookDao:BookDaoTest:模糊查询:BookDaoTest
什么是hql
HQL是Hibernate Query Language的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法
hql与sql的区别是什么
处理返回的结果集
HqlTest
package com
.xyx
.five
.test
;
import java
.util
.Arrays
;
import java
.util
.List
;
import java
.util
.Map
;
import org
.hibernate
.Session
;
import org
.hibernate
.Transaction
;
import org
.hibernate
.query
.Query
;
import org
.junit
.After
;
import org
.junit
.Before
;
import org
.junit
.Test
;
import com
.xyx
.four
.dao
.SessionFactoryUtils
;
import com
.xyx
.four
.entity
.Book
;
public class HqlTest {
private Session session
;
private Transaction transaction
;
@Before
public void before() {
session
= SessionFactoryUtils
.openSession();
transaction
= session
.beginTransaction();
}
@After
public void after() {
transaction
.commit();
session
.close();
}
@Test
public void testList1() {
Query query
= session
.createQuery("from Book");
List
<Book> list
= query
.list();
for (Book b
: list
) {
System
.out
.println(b
);
}
}
@Test
public void testList2() {
Query query
= session
.createQuery("select b.bookName as ss from Book b");
List
<String> list
= query
.list();
for (String b
: list
) {
System
.out
.println(b
);
}
}
@Test
public void testList3() {
Query query
= session
.createQuery("select b.bookId,b.bookName as ss from Book b");
List
<Object
[]> list
= query
.list();
for (Object
[] b
: list
) {
System
.out
.println(Arrays
.toString(b
));
}
}
@Test
public void testList4() {
Query query
= session
.createQuery("select new mAp(b.bookId,b.bookName) from Book b");
List
<Map> list
= query
.list();
for (Map b
: list
) {
System
.out
.println(b
);
}
}
@Test
public void testList5() {
Query query
= session
.createQuery("select new Book(b.bookId,b.bookName) from Book b");
List
<Book> list
= query
.list();
for (Book b
: list
) {
System
.out
.println(b
);
}
}
@Test
public void testList6() {
Query query
= session
.createQuery("from Book where bookId in (:bookIds)");
query
.setParameterList("bookIds", new Integer[] {1,2,4});
List
<Book> list
= query
.list();
for (Book b
: list
) {
System
.out
.println(b
);
}
}
@Test
public void testList7() {
Query query
= session
.createQuery("select o.orderNo,oi.quantity from Order o,OrderItem oi where o = oi.order");
List
<Object
[]> list
= query
.list();
for (Object
[] b
: list
) {
System
.out
.println(Arrays
.toString(b
));
}
}
@Test
public void testList8() {
Query query
= session
.createQuery("select count(*) from Book");
Long singleResult
= (Long
) query
.getSingleResult();
System
.out
.println(singleResult
);
}
@Test
public void testList9() {
Query query
= session
.createQuery("from Book");
query
.setFirstResult(2);
query
.setMaxResults(3);
List
<Book> list
= query
.list();
for (Book b
: list
) {
System
.out
.println(b
);
}
}
}
HQL通用分页查询方法
分页工具类PageBean
package com
.xyx
.five
.util
;
import java
.util
.Map
;
import javax
.servlet
.http
.HttpServletRequest
;
public class PageBean {
private int page
= 1;
private int rows
= 3;
private int total
= 0;
private boolean pagination
= true;
private Map
<String
, String
[]> parameterMap
;
private String url
;
public void setRequest(HttpServletRequest req
) {
this.setPage(req
.getParameter("page"));
this.setRows(req
.getParameter("rows"));
this.setPagination(!"fasle".equals(req
.getParameter("pagination")));
this.setParameterMap(req
.getParameterMap());
this.setUrl(req
.getRequestURL().toString());
}
public int getMaxPage() {
return this.total
% this.rows
== 0 ? this.total
/ this.rows
: this.total
/ this.rows
+ 1;
}
public int nextPage() {
return this.page
< this.getMaxPage() ? this.page
+ 1 : this.getMaxPage();
}
public int previousPage() {
return this.page
> 1 ? this.page
- 1 : 1;
}
public PageBean() {
super();
}
public int getPage() {
return page
;
}
public void setPage(int page
) {
this.page
= page
;
}
public void setPage(String page
) {
this.page
= StringUtils
.isBlank(page
) ? this.page
: Integer
.valueOf(page
);
}
public int getRows() {
return rows
;
}
public void setRows(int rows
) {
this.rows
= rows
;
}
public void setRows(String rows
) {
this.rows
= StringUtils
.isBlank(rows
) ? this.rows
: Integer
.valueOf(rows
);
}
public int getTotal() {
return total
;
}
public void setTotal(int total
) {
this.total
= total
;
}
public void setTotal(String total
) {
this.total
= Integer
.parseInt(total
);
}
public boolean isPagination() {
return pagination
;
}
public void setPagination(boolean pagination
) {
this.pagination
= pagination
;
}
public Map
<String
, String
[]> getParameterMap() {
return parameterMap
;
}
public void setParameterMap(Map
<String
, String
[]> parameterMap
) {
this.parameterMap
= parameterMap
;
}
public String
getUrl() {
return url
;
}
public void setUrl(String url
) {
this.url
= url
;
}
public int getStartIndex() {
return this.page
* this.rows
;
}
@Override
public String
toString() {
return "PageBean [page=" + page
+ ", rows=" + rows
+ ", total=" + total
+ ", pagination=" + pagination
+ ", parameterMap=" + parameterMap
+ ", url=" + url
+ "]";
}
}
StringUtils:
package com
.xyx
.five
.util
;
public class StringUtils {
private StringUtils() {
}
public static boolean isBlank(String s
) {
boolean b
= false;
if (null
== s
|| s
.trim().equals("")) {
b
= true;
}
return b
;
}
public static boolean isNotBlank(String s
) {
return !isBlank(s
);
}
}
BookDao:
package com
.xyx
.four
.dao
;
import java
.util
.HashMap
;
import java
.util
.List
;
import java
.util
.Map
;
import org
.hibernate
.Hibernate
;
import org
.hibernate
.Session
;
import org
.hibernate
.Transaction
;
import org
.hibernate
.query
.Query
;
import com
.xyx
.five
.util
.BaseDao
;
import com
.xyx
.five
.util
.PageBean
;
import com
.xyx
.five
.util
.StringUtils
;
import com
.xyx
.four
.entity
.Book
;
import com
.xyx
.four
.entity
.Category
;
public class BookDao extends BaseDao{
public Integer
addBook(Book book
) {
Session session
= SessionFactoryUtils
.openSession();
Transaction transaction
= session
.beginTransaction();
Integer bid
= (Integer
) session
.save(book
);
transaction
.commit();
session
.close();
return bid
;
}
public Integer
addCategory(Category category
) {
Session session
= SessionFactoryUtils
.openSession();
Transaction transaction
= session
.beginTransaction();
Integer cid
= (Integer
) session
.save(category
);
transaction
.commit();
session
.close();
return cid
;
}
public Category
getCategory(Category category
) {
Session session
= SessionFactoryUtils
.openSession();
Transaction transaction
= session
.beginTransaction();
Category c
= session
.get(Category
.class, category
.getCategoryId());
transaction
.commit();
session
.close();
return c
;
}
public Book
getBook(Book book
) {
Session session
= SessionFactoryUtils
.openSession();
Transaction transaction
= session
.beginTransaction();
Book b
= session
.get(Book
.class, book
.getBookId());
if (b
!= null
&& new Integer(1).equals(book
.getInitCategories())) {
Hibernate
.initialize(b
.getCategories());
}
transaction
.commit();
session
.close();
return b
;
}
public void delBook(Book book
) {
Session session
= SessionFactoryUtils
.openSession();
Transaction transaction
= session
.beginTransaction();
session
.delete(book
);
transaction
.commit();
session
.close();
}
public void delCategory(Category category
) {
Session session
= SessionFactoryUtils
.openSession();
Transaction transaction
= session
.beginTransaction();
Category c
= session
.get(Category
.class, category
.getCategoryId());
if(c
!=null
) {
for (Book b
: c
.getBooks()) {
b
.getCategories().remove(c
);
}
}
session
.delete(c
);
transaction
.commit();
session
.close();
}
public List
<Book> list1(Book book
,PageBean pageBean
) {
Session session
= SessionFactoryUtils
.openSession();
Transaction transaction
= session
.beginTransaction();
String bookName
= book
.getBookName();
String hql
="from Book where 1=1";
if(StringUtils
.isNotBlank(bookName
)) {
hql
+=" and bookName like :bookName";
}
Query query
= session
.createQuery(hql
);
if(StringUtils
.isNotBlank(bookName
)) {
query
.setParameter("bookName", bookName
);
}
if(pageBean
!=null
&& pageBean
.isPagination()) {
query
.setFirstResult(pageBean
.getStartIndex());
query
.setMaxResults(pageBean
.getRows());
}
List
<Book> list
=query
.list();
session
.createQuery(hql
);
transaction
.commit();
session
.close();
return list
;
}
public List
<Book> list2(Book book
,PageBean pageBean
) {
Session session
= SessionFactoryUtils
.openSession();
Transaction transaction
= session
.beginTransaction();
String bookName
= book
.getBookName();
Map
<String, Object> map
=new HashMap<>();
String hql
="from Book where 1=1";
if(StringUtils
.isNotBlank(bookName
)) {
hql
+=" and bookName like :bookName";
map
.put("bookName", bookName
);
}
List
<Book> list
=super.executeQuery(session
, map
, hql
, pageBean
);
session
.createQuery(hql
);
transaction
.commit();
session
.close();
return list
;
}
}
BookDaoTest:
package com
.xyx
.four
.dao
;
import java
.util
.List
;
import org
.junit
.Test
;
import com
.xyx
.five
.util
.PageBean
;
import com
.xyx
.four
.entity
.Book
;
import com
.xyx
.four
.entity
.Category
;
public class BookDaoTest {
private BookDao bookDao
= new BookDao();
@Test
public void testGetBook() {
Book book
= new Book();
book
.setBookId(2);
book
.setInitCategories(1);
Book b
= this.bookDao
.getBook(book
);
System
.out
.println(b
.getBookName());
System
.out
.println(b
.getCategories());
}
@Test
public void testList2() {
Book book
=new Book();
PageBean pageBean
=new PageBean();
pageBean
.setPage(0);
List
<Book> list
= this.bookDao
.list2(book
, pageBean
);
for (Book b
: list
) {
System
.out
.println(b
);
}
}
@Test
public void test2() {
Book book
= new Book();
book
.setBookName("我想抓住18岁的尾巴");
book
.setPrice(10f);
Category category
= new Category();
category
.setCategoryId(5);
Category c
= this.bookDao
.getCategory(category
);
book
.getCategories().add(c
);
this.bookDao
.addBook(book
);
}
}
模糊查询:
@Test
public void testList1() {
Book book
=new Book();
PageBean pageBean
=new PageBean();
pageBean
.setPage(2);
book
.setBookName("%水浒%");
List
<Book> list
= this.bookDao
.list1(book
, pageBean
);
for (Book b
: list
) {
System
.out
.println(b
);
}
}
BookDaoTest
package com
.xyx
.four
.dao
;
import java
.util
.List
;
import org
.junit
.Test
;
import com
.xyx
.five
.util
.PageBean
;
import com
.xyx
.four
.entity
.Book
;
import com
.xyx
.four
.entity
.Category
;
public class BookDaoTest {
private BookDao bookDao
= new BookDao();
@Test
public void testGetBook() {
Book book
= new Book();
book
.setBookId(2);
book
.setInitCategories(1);
Book b
= this.bookDao
.getBook(book
);
System
.out
.println(b
.getBookName());
System
.out
.println(b
.getCategories());
}
testGetBook
@Test
public void testList1() {
Book book
=new Book();
PageBean pageBean
=new PageBean();
pageBean
.setPage(2);
book
.setBookName("%西%");
List
<Book> list
= this.bookDao
.list1(book
, pageBean
);
for (Book b
: list
) {
System
.out
.println(b
);
}
}
testList1
@Test
public void testList2() {
Book book
=new Book();
PageBean pageBean
=new PageBean();
pageBean
.setPagination(false);
List
<Book> list
= this.bookDao
.list2(book
, pageBean
);
for (Book b
: list
) {
System
.out
.println(b
);
}
}
testList2