1. 程式人生 > >hql的通用分頁,檢視,原生程式碼

hql的通用分頁,檢視,原生程式碼

  1. BaseDAO
  2. 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(

) from (hql) t
*/

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();
  }

}

}

  1. 原生sql

  2. //原生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;
     }
    
  3. 檢視對映

  4. //檢視
    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;
     }
    
  5. 兩張表 hql
    三張以上 原生sql、檢視、儲存過程

類似於偽列
SELECT @rowno:[email protected] + 1 AS rowno,a.* FROM tableName a,(SELECT @rowno:=0) b