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