⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractmanager.java

📁 这是一个jbpm的高级应用,是一个oa工作流的系统,里面用到了spring,hibernate技术等.实为学习jbpm的好资料!
💻 JAVA
字号:
package com.xiangfeng.manager;

import java.util.Collection;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import com.xiangfeng.model.General_Goods;
import com.xiangfeng.pagetaglib.PagerModel;
import com.xiangfeng.pagetaglib.SystemContext;

public abstract class AbstractManager {

	/**
	 * 根据HQL语句进行分页查询,分页查询的参数通过ThreadLocal传递
	 * 
	 * @param hql
	 * @return
	 */
	public PagerModel searchPaginated(Session session, String hql) {

		// 从ThreadLocal变量中取出offset和pagesize的值

		System.out.println("SystemContext.getOffset()  is  "
				+ SystemContext.getOffset());
		System.out.println("SystemContext.getPagesize()  is  "
				+ SystemContext.getPagesize());
		return searchPaginated(session, hql, null, SystemContext.getOffset(),
				SystemContext.getPagesize());
	}

	/**
	 * 根据HQL语句进行分页查询,分页查询的参数通过ThreadLocal传递
	 * 
	 * @param hql
	 *            HQL语句
	 * @param obj
	 *            HQL语句的参数
	 * @return
	 */
	public PagerModel searchPaginated(Session session, String hql, Object obj) {
		return searchPaginated(session, hql, new Object[] { obj },
				SystemContext.getOffset(), SystemContext.getPagesize());
	}

	/**
	 * 根据HQL语句进行分页查询,分页查询的参数通过ThreadLocal传递
	 * 
	 * @param hql
	 *            hql语句
	 * @param params
	 *            HQL语句的多个参数
	 * @return
	 */
	public PagerModel searchPaginated(Session session, String hql,
			Object[] params) {
		return searchPaginated(session, hql, params, SystemContext.getOffset(),
				SystemContext.getPagesize());
	}

	/**
	 * 根据HQL语句进行分页查询
	 * 
	 * @param hql
	 *            HQL语句
	 * @param offset
	 *            从第几条记录开始查询
	 * @param pagesize
	 *            每页显示多少行
	 * @return
	 */
	public PagerModel searchPaginated(Session session, String hql, int offset,
			int pagesize) {
		return searchPaginated(session, hql, null, offset, pagesize);
	}

	/**
	 * 根据HQL语句进行分页查询
	 * 
	 * @param hql
	 *            hql语句
	 * @param obj
	 *            hql语句带的参数值
	 * @param offset
	 *            从第几条记录开始查询
	 * @param pagesize
	 *            每页显示多少行
	 * @return
	 */
	public PagerModel searchPaginated(Session session, String hql, Object obj,
			int offset, int pagesize) {
		return searchPaginated(session, hql, new Object[] { obj }, offset,
				pagesize);
	}

	/**
	 * 根据HQL语句进行分页查询
	 * 
	 * @param hql
	 *            hql语句
	 * @param params
	 *            hql语句带的多个参数值
	 * @param offset
	 *            从第几条记录开始查询
	 * @param pagesize
	 *            每页显示多少行
	 * @return
	 */
	public PagerModel searchPaginated(Session session, String hql,
			Object[] params, int offset, int pagesize) {

		// 获取记录总数
		//session.createQuery(hql).list();
		
		String countHql = getCountQuery(hql);

		Query query = session.createQuery(countHql);
		if (params != null && params.length > 0) {
			for (int i = 0; i < params.length; i++) {
				query.setParameter(i, params[i]);
			}
		}
		int total = ((Long) query.uniqueResult()).intValue();
		System.out.println("---------------记录总数为 " + total);
		// 获取当前页的结果集
		query = session.createQuery(hql);
		if (params != null && params.length > 0) {
			for (int i = 0; i < params.length; i++) {
				query.setParameter(i, params[i]);
			}
		}
		query.setFirstResult(offset);
		query.setMaxResults(pagesize);
		List datas = query.list();
		System.out
				.println("-----------------当前取出的data 数据数量为 : " + datas.size());
		PagerModel pm = new PagerModel();
		pm.setDatas(datas);
		pm.setTotal(total);

		return pm;
	}
	
	public PagerModel searchPaginated( String hql, Session session,int total) {
		return searchPaginated( hql, 
				SystemContext.getOffset(), SystemContext.getPagesize(),session,total);
	}
	//专门给原生SQL的高级搜索使用
	
	public PagerModel searchPaginated( String hql,
			 int offset, int pagesize,Session session,int total) {

		// 获取记录总数
		//session.createQuery(hql).list();
		
		//String countHql = getCountQuery(hql);

		//Query query = session.createSQLQuery(countHql);
	
	//	int total = ((Long) query.uniqueResult()).intValue();
	//	System.out.println("---------------记录总数为 " + total);
		// 获取当前页的结果集
		Query	query = session.createSQLQuery(hql).addEntity(General_Goods.class);
	
		query.setFirstResult(offset);
		query.setMaxResults(pagesize);
		List datas = query.list();
		System.out
				.println("-----------------当前取出的data 数据数量为 : " + datas.size());
		PagerModel pm = new PagerModel();
		
		//int total= datas.size();
		System.out.println("total is "+total);
		pm.setDatas(datas);
		pm.setTotal(total);

		return pm;
	}

	/**
	 * 根据HQL查询语句,获得查找总记录数的HQL语句 如: select c from Customer c where ( c.name like ?
	 * or c.shortName like ? ) and c.owner.id = ? 经过转换,可以得到: select count(*)
	 * from Customer c where ( c.name like ? or c.shortName like ? ) and
	 * c.owner.id = ?
	 * 
	 * @param hql
	 * @return
	 */
	private String getCountQuery(String hql) {
		int index = hql.indexOf("from");
		if (index != -1) {
			return "select count(iid) " + hql.substring(index);
		}
		throw new RuntimeException("HQL查询语句【" + hql + "】有误,必须包含from子句");
	}
	
	
	
	public PagerModel searchPaginated(int offset, int pagesize,Session session, String hql,
			Collection collection) {

		// 获取记录总数
		String countHql = getCountQuery(hql);

		Query query = session.createQuery(countHql);
		query.setParameterList("CGoodsNOs", collection);
		int total = ((Long) query.uniqueResult()).intValue();
		System.out.println("---------------记录总数为 " + total);
		// 获取当前页的结果集
		query = session.createQuery(hql);
		query.setParameterList("CGoodsNOs", collection);
		query.setFirstResult(offset);
		query.setMaxResults(pagesize);
		List datas = query.list();
		System.out
				.println("-----------------当前取出的data 数据数量为 : " + datas.size());
		PagerModel pm = new PagerModel();
		pm.setDatas(datas);
		pm.setTotal(total);

		return pm;
	}
	
	public PagerModel searchPaginated(Session session, String hql,
			Collection collection) {
		return searchPaginated(SystemContext.getOffset(), SystemContext.getPagesize(), session, hql, collection);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -