hql的通用分頁,檢視,原生程式碼
- BaseDAO
- package com.zking.eight.util;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.hibernate.Session;
import org.hibernate.query.Query;
/**
- 分頁
- jdbc:executeQuery(String sql,PageBean pageBean,Class clz )
- @author tanglingqing
*1.sql–>countSql(查詢總記錄數)–>total(總記錄數)–>pageBean
*2.sql–>pageSql(轉成為分頁的sql語句)–>result
*3.處理結果集 - *select * from Book where book_name like’%book_name%’
countSql=select count() from (sql) t;
*hibernate
*1.hql–>countHql(查詢總記錄數)–>total(總記錄數)–>pageBean
*2.hql–>pageHql(轉成為分頁的sql語句)–>result(hibernate呼叫內建介面自動生成分頁語句查詢結果)
*不需要處理結果集
*
*hql:
*select * from Book where bookName like’%:bookName%’
select count(
*/
public class BaseDao {
private void setParameter(Query query,Map<String,Object> map) { //查所有,無引數 if(map==null||map.size()==0) { return; } Object value=null;//堆疊 //遍歷,給query賦值 for(Map.Entry<String, Object> entry:map.entrySet()) { value=entry.getValue();//包含集合,陣列等八種資料型別 //如果value為集合 if(value instanceof Collection) { query.setParameterList(entry.getKey(), (Collection) value); } //陣列 else if(value instanceof Object[]) { query.setParameterList(entry.getKey(), (Object[]) value); } //8種資料型別-object else { query.setParameter(entry.getKey(), value); } } } //獲取總條目數hql語句 private String getCountHql(String hql) { //變大寫,獲取下標 int index=hql.toUpperCase().indexOf("FROM");//獲取from下標 return "select count(*)"+hql.substring(index); } //引數
public List ececuteQuery(String hql,PageBean pageBean,Map<String, Object> map,Session session) {
//需要分頁
if(pageBean!=null&&pageBean.isPagination()) {
String countHql = getCountHql(hql);
//傳引數,賦值進hql
Query countquery = session.createQuery(countHql);
this.setParameter(countquery, map);
//獲取總頁碼
String total = countquery.getSingleResult().toString();
pageBean.setTotal(total);
//分頁
Query pagequery = session.createQuery(hql);
this.setParameter(pagequery, map);
pagequery.setFirstResult(pageBean.getStartIndex());//傳分頁引數
pagequery.setMaxResults(pageBean.getRows());//偏移量
return pagequery.list();
}
else {
//查所有,不分頁
Query query=session.createQuery(hql);
this.setParameter(query, map);
return query.list();
}
}
}
-
原生sql
-
//原生sql
// from t_hhibernate_book b,t_hibernate_Order o,t_hibernate_Order_Item oi
public List list3(){
Session session = SessionFactoryUtil.getSession();
Transaction transaction = session.beginTransaction();
String sql="select b.book_name,o.Order_no,oi.product_id from t_hibernate_book b,t_hibernate_Order o,t_hibernate_Order_Item oi ";
List list = session.createSQLQuery(sql).list();transaction.commit(); session.close(); return list; }
-
檢視對映
-
//檢視
public List list4(){
Session session = SessionFactoryUtil.getSession();
Transaction transaction = session.beginTransaction();
String sql=“select * from book_order_orderItem”;
List list = session.createSQLQuery(sql).list();transaction.commit(); session.close(); return list; }
-
兩張表 hql
三張以上 原生sql、檢視、儲存過程
類似於偽列
SELECT @rowno:[email protected] + 1 AS rowno,a.* FROM tableName a,(SELECT @rowno:=0) b