`
jay88489
  • 浏览: 70544 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate support dao template

阅读更多
package com.daluo.fortrade.dao.support;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.daluo.fortrade.dao.IDAO;
import com.daluo.fortrade.model.BaseForm;
import com.daluo.fortrade.util.Pagination;

public class DAOSupport extends HibernateDaoSupport implements IDAO {
	public void delete(BaseForm baseForm) {
		this.getHibernateTemplate().delete(baseForm);
	}

	public void save(BaseForm baseForm) {
		this.getHibernateTemplate().save(baseForm);
	}

	public void update(BaseForm baseForm) {
		this.getHibernateTemplate().update(baseForm);
	}

	public void batchDelete(String[] Id, Class classType) {
		for(int i=0;i<Id.length;i++){
			BaseForm form = (BaseForm)load(classType, Id[i]);
        	getHibernateTemplate().delete(form);
		}
	}
	
	
	public BaseForm get(Class classType, String Id) {
		return (BaseForm)this.getHibernateTemplate().get(classType, Integer.valueOf(Id));
	}
	
	public BaseForm load(Class classType, String Id){
		return (BaseForm)this.getHibernateTemplate().load(classType, Integer.valueOf(Id));
	}


	public List findByExample(BaseForm baseForm) {
		return this.getHibernateTemplate().findByExample(baseForm);
	}
	
	public List findByHql(String hql) {
		return this.getHibernateTemplate().find(hql);
	}

	public List findBySQL(String sql) {
		return this.getSession().createQuery(sql).list();
	}
	
	public List findBySQL(String sql, List params){
		try {
			Connection con = this.getSession().connection();
			PreparedStatement ps = con.prepareStatement(sql);
			int paramSize = params.size();
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1, (String) params.get(i));
			}
			ResultSet rs = ps.executeQuery();
			List<Object[]> items = new ArrayList<Object[]>();
			while(rs.next()){
				Object[] row = new Object[rs.getMetaData().getColumnCount()];
				for (int i = 0; i < row.length; i++) {
					row[i] = rs.getObject(i+1);
				}
				items.add(row);
			}
			//ps.close();
			//con.close();
			return items;
		} catch (DataAccessResourceFailureException e) {
			e.printStackTrace();
		} catch (HibernateException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public List findByQBC(BaseForm baseForm) {
		return this.getSession().createCriteria(baseForm.getClass()).list();
	}

	public List findByHql(String hql, Object obj) {
		return this.getHibernateTemplate().find(hql, obj);
	}

	public List findByHql(String hql, Object[] obj) {
		return this.getHibernateTemplate().find(hql, obj);
	}

	public List findByPagination(final String hql, final int firstRow,
			final int maxRow) {
		return getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session s) throws HibernateException,
					SQLException {
				Query query = s.createQuery(hql);

				query.setFirstResult(firstRow);
				query.setMaxResults(maxRow);
				List list = query.list();
				return list;
			}
		});
	}

	public List findByPagination(final String hql, final Object[] params,
			final int firstRow, final int maxRow) {
		return getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session s) throws HibernateException,
					SQLException {
				Query query = s.createQuery(hql);
				for (int i = 0; i < params.length; i++) {
					query.setParameter(i, params[i]);
				}
				query.setFirstResult(firstRow);
				query.setMaxResults(maxRow);
				List list = query.list();
				return list;
			}
		});
	}
	
	
	// ---------------------------------------------------------------------
	// 无参数取得一页数据
	// --------------------------------------------------------------------
	public Pagination getPage(String queryName) {
		return getPage(queryName, null, Pagination.defaultPageSize(), 0);
	}

	public Pagination getPage(String queryName, int startIndex) {
		return getPage(queryName, null, Pagination.defaultPageSize(), startIndex);
	}

	public Pagination getPage(String queryName, int pageSize, int startIndex) {
		return getPage(queryName, new ArrayList(), pageSize,startIndex);
	}

	// ---------------------------------------------------------------------------
	// 使用带一个参数的HQL取得一页数据
	// ---------------------------------------------------------------------------
	@SuppressWarnings("unchecked")
	public Pagination getPage(String queryName, Object param) {
		boolean add = new ArrayList().add(param);
		return getPage(queryName, add, Pagination.defaultPageSize(), 0);
	}

	@SuppressWarnings("unchecked")
	public Pagination getPage(String queryName, Object param,
			int startIndex) {
		return getPage(queryName,new ArrayList().add(param), Pagination.defaultPageSize(), startIndex);
	}

	@SuppressWarnings("unchecked")
	public Pagination getPage(String queryName, Object param,
			int pageSize, int startIndex) {
		return getPage(queryName,new ArrayList().add(param), pageSize, startIndex);
	}

	// ------------------------------------------------------------------------------
	// 使用带有一系列参数的HQL取得一页数据
	// .------------------------------------------------------------------------------
	public Pagination getPage(String queryName, List params) {
		return getPage(queryName, params, Pagination.defaultPageSize(), 0);
	}

	public Pagination getPage(String queryName, List params, int startIndex) {
		return getPage(queryName, params, Pagination.defaultPageSize(), startIndex);
	}

	
	public Pagination getPage(final String hql, final List params,  final int curPage, final int pageSize) {
		if (params != null && params.size() != params.size()) {
			throw new IllegalArgumentException("Length of paramNames array must match length of values array");
		}
		return (Pagination) getHibernateTemplate().execute(
				new HibernateCallback() {
					public Object doInHibernate(Session session)
							throws HibernateException {
						Query query = session.createQuery(hql);
						for (int i = 0; i < params.size(); i++) {
							query.setParameter(i, params.get(i));
						}
						int startRecord = (curPage-1)*pageSize;
						query.setFirstResult(startRecord);
						query.setMaxResults(pageSize);
						String hqlCount = query.getQueryString();
						if(hqlCount.indexOf("from")!=-1){
							hqlCount = hqlCount.substring(hqlCount.indexOf("from"),hqlCount.length());
						}
						if(hqlCount.indexOf("order by")!=-1){
							hqlCount = hqlCount.substring(0,hqlCount.indexOf("order by"));
						}
						hqlCount = "select count(*) " + hqlCount;
						Query countQuery = session.createQuery(hqlCount);
						if (params != null) {
							for (int j = 0; j < params.size(); j++) {
								countQuery.setParameter(j, params.get(j));
							}
						}
						int totalCount = ((Integer) countQuery.list().iterator().next()).intValue();
						List items = query.list();
						Pagination ps = new Pagination(items, totalCount, curPage, pageSize, startRecord);
						return ps;
					}
				});
	}

	public Pagination getPageBySQL(String sql, List params, int curPage, int pageSize){
		try {
			Connection con = this.getSession().connection();
			sql = Pagination.getLimitSQL(sql,curPage,pageSize,Pagination.PAGINATION_SQLSERVER);
			PreparedStatement ps = con.prepareStatement(sql);
			System.out.println("sql:" + sql);
			int paramSize = params.size();
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1, (String) params.get(i));
			}
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1+paramSize, (String) params.get(i));
			}
			ResultSet rs = ps.executeQuery();
			List<Object[]> items = new ArrayList<Object[]>();
			while(rs.next()){
				Object[] row = new Object[rs.getMetaData().getColumnCount()];
				for (int i = 0; i < row.length; i++) {
					row[i] = rs.getObject(i+1);
				}
				items.add(row);
			}
			String hqlCount = sql;
			if(hqlCount.indexOf("from")!=-1){
				hqlCount = hqlCount.substring(hqlCount.indexOf("from"),hqlCount.length());
			}
			if(hqlCount.indexOf("order by")!=-1){
				hqlCount = hqlCount.replaceAll("(order by [^\\s]+? desc)|(order by [^\\s]+? asc)", "");
			}
			hqlCount = "select count(*) " + hqlCount;
			System.out.println("hqlCount:" + hqlCount);
			ps = con.prepareStatement(hqlCount);
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1, (String) params.get(i));
			}
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1+paramSize, (String) params.get(i));
			}
			ResultSet rsCount = ps.executeQuery();
			int totalCount = 0;
			if(rsCount.next()){
				totalCount = rsCount.getInt(1);
			}
			Pagination pagin = new Pagination(items, totalCount, curPage, pageSize);
			return pagin;
		} catch (DataAccessResourceFailureException e) {
			e.printStackTrace();
		} catch (HibernateException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}	
	
	public Pagination getPageByLimitedSQL(String sql, List params, int curPage, int pageSize){
		try {
			Connection con = this.getSession().connection();
			PreparedStatement ps = con.prepareStatement(sql);
			System.out.println("sql:" + sql);
			int paramSize = params.size();
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1, (String) params.get(i));
			}
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1+paramSize, (String) params.get(i));
			}
			ResultSet rs = ps.executeQuery();
			List<Object[]> items = new ArrayList<Object[]>();
			while(rs.next()){
				Object[] row = new Object[rs.getMetaData().getColumnCount()];
				for (int i = 0; i < row.length; i++) {
					row[i] = rs.getObject(i+1);
				}
				items.add(row);
			}
			String hqlCount = sql;
			if(hqlCount.indexOf("from")!=-1){
				hqlCount = hqlCount.substring(hqlCount.indexOf("from"),hqlCount.length());
			}
			if(hqlCount.indexOf("order by")!=-1){
				hqlCount = hqlCount.replaceAll("(order by [^\\s]+? desc)|(order by [^\\s]+? asc)", "");
			}
			hqlCount = "select count(*) " + hqlCount;
			System.out.println("hqlCount:" + hqlCount);
			ps = con.prepareStatement(hqlCount);
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1, (String) params.get(i));
			}
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1+paramSize, (String) params.get(i));
			}
			ResultSet rsCount = ps.executeQuery();
			int totalCount = 0;
			if(rsCount.next()){
				totalCount = rsCount.getInt(1);
			}
			Pagination pagin = new Pagination(items, totalCount, curPage, pageSize);
			return pagin;
		} catch (DataAccessResourceFailureException e) {
			e.printStackTrace();
		} catch (HibernateException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public Object[] findObjectBySQL(String sql, List params) {
		try {
			Connection con = this.getSession().connection();
			PreparedStatement ps = con.prepareStatement(sql);
			int paramSize = params.size();
			for (int i = 0; i < paramSize; i++) {
				ps.setString(i+1, (String) params.get(i));
			}
			ResultSet rs = ps.executeQuery();
			if(rs.next()){
				Object[] row = new Object[rs.getMetaData().getColumnCount()];
				for (int i = 0; i < row.length; i++) {
					row[i] = rs.getObject(i+1);
				}
				return row;
			}
		} catch (DataAccessResourceFailureException e) {
			e.printStackTrace();
		} catch (HibernateException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}	
}
 
分享到:
评论

相关推荐

    Hibernate封装dao层

    "Hibernate封装DAO层"就是将Hibernate的功能整合到DAO设计模式中,以实现更加高效、规范的数据库操作。 1. **DAO设计模式**: DAO模式是软件设计模式的一种,它的核心思想是创建一个独立于具体数据库操作的对象,...

    JPA(hibernate) Dao 和 DaoSupport

    综上所述,`JPA(hibernate) Dao 和 DaoSupport`涉及到Java持久化技术,主要关注如何通过面向对象的方式操作数据库,以及如何设计和使用DAO层来封装数据访问逻辑。在实际项目中,我们还需要了解如何使用Spring Data ...

    hibernate spring通用dao

    spring集成hibernate通用dao,泛型,server都可以调用

    hibernate dao 生成工具

    Hibernate DAO(Data Access Object)生成工具是用于自动化创建数据访问层对象的实用程序,它可以显著提高开发效率,尤其是在处理大量数据库交互的项目中。DAO模式是一种设计模式,它提供了对数据库操作的抽象,使得...

    HibernateDao.java

    《深入解析HibernateDao.java》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本文将深入探讨`HibernateDao.java`这一关键组件,揭示其背后的原理与实践应用。 `...

    Hibernate泛型Dao

    【标题】"Hibernate泛型Dao"是针对Java开发中的数据持久化框架Hibernate的一个高级应用,主要目的是为了提高代码的复用性和简洁性。在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data ...

    Hibernate通用Dao

    通用dao,简单全面,所有dao都可以继承这个dao.

    vc生成hibernate的dao类

    标题中的“vc生成hibernate的dao类”指的是在Visual C++(vc6.0)环境下,利用特定工具或插件来自动化生成基于Hibernate框架的Data Access Object(DAO)类。DAO模式是软件设计中常用的一种模式,它将业务逻辑与数据...

    Hibernate泛型DAO(结合spring模板支持)

    至于`Dao经典泛型.doc`文件,可能是更深入的关于Hibernate泛型DAO的文档,可能包含了如何配置Spring、如何处理复杂查询以及如何优化泛型DAO的更多细节。阅读这份文档将进一步提升你对泛型DAO的理解和应用能力。 ...

    HibernateDao 通用

    HibernateDao 是一种基于 Hibernate ORM(对象关系映射)框架的通用数据访问对象,它简化了对数据库的操作,提供了更高级别的抽象,使开发者能够更加专注于业务逻辑而不是底层的数据操作。在Java开发中,Hibernate...

    hibernate+dao实例

    通常,开发者会创建一个基类,比如HibernateDAO,提供通用的方法,然后为每个特定的数据模型创建继承自该基类的DAO实现。 在标签中,“源码”意味着讨论可能涉及到了具体的代码实现,而“工具”可能指的是Hibernate...

    hibernate通用dao

    **hibernate通用DAO(Data Access Object)**是软件开发中的一个重要概念,它主要用于数据库操作的抽象,使得业务逻辑层可以无需关注具体的SQL语句,从而实现数据访问的解耦。在Java EE应用中,Hibernate作为一款...

    Hibernate 原生通用DAO

    **Hibernate原生通用DAO**是基于Hibernate框架设计的一种简化数据访问操作的方式,它模仿了Spring框架中的`HibernateTemplate`类,旨在提供一个简单易用的DAO(Data Access Object)层,方便开发人员进行数据库操作...

    spring hibernate 泛型DAO

    本文将深入探讨“Spring Hibernate 泛型DAO”这一主题,以及如何通过泛型DAO实现更加高效、可复用的代码。 首先,让我们理解什么是DAO(Data Access Object)模式。DAO是一种设计模式,它的主要作用是隔离业务逻辑...

    Hibernate通用Dao设计。

    本篇文章将深入探讨Hibernate的通用Dao设计,帮助开发者理解如何利用Hibernate提高代码复用性和可维护性。 在传统的Java应用程序中,DAO(Data Access Object)层是用于封装数据库访问逻辑的地方,它隔离了业务逻辑...

    HibernateDao

    hibernateDao工具类

    Hibernate中的DAO模式

    在Java领域,尤其是在企业级应用开发中,DAO模式常与ORM(Object-Relational Mapping)框架如Hibernate结合使用。 **Hibernate** 是一个流行的ORM框架,它允许开发者用面向对象的方式操作数据库,而无需直接编写SQL...

    Hibernate_通用DAO模式,一个写好的dao层

    本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...

    Hibernate泛型DAO及使用方法

    而`Hibernate泛型DAO`则是为了减少代码重复性,提高代码复用性和可维护性的一种设计模式。本文将深入探讨`Hibernate泛型DAO`的实现及其使用方法。 首先,DAO(Data Access Object)模式是一种设计模式,它的主要...

Global site tag (gtag.js) - Google Analytics