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:=@rowno + 1 AS rowno,a.* FROM tableName a,(SELECT @rowno:=0) b

猜你喜欢

转载自blog.csdn.net/qq_43181514/article/details/83548110
今日推荐