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设计模式中,以实现更加高效、规范的数据库操作。 1. **DAO设计模式**: DAO模式是软件设计模式的一种,它的核心思想是创建一个独立于具体数据库操作的对象,...
综上所述,`JPA(hibernate) Dao 和 DaoSupport`涉及到Java持久化技术,主要关注如何通过面向对象的方式操作数据库,以及如何设计和使用DAO层来封装数据访问逻辑。在实际项目中,我们还需要了解如何使用Spring Data ...
spring集成hibernate通用dao,泛型,server都可以调用
Hibernate DAO(Data Access Object)生成工具是用于自动化创建数据访问层对象的实用程序,它可以显著提高开发效率,尤其是在处理大量数据库交互的项目中。DAO模式是一种设计模式,它提供了对数据库操作的抽象,使得...
《深入解析HibernateDao.java》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本文将深入探讨`HibernateDao.java`这一关键组件,揭示其背后的原理与实践应用。 `...
【标题】"Hibernate泛型Dao"是针对Java开发中的数据持久化框架Hibernate的一个高级应用,主要目的是为了提高代码的复用性和简洁性。在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data ...
通用dao,简单全面,所有dao都可以继承这个dao.
标题中的“vc生成hibernate的dao类”指的是在Visual C++(vc6.0)环境下,利用特定工具或插件来自动化生成基于Hibernate框架的Data Access Object(DAO)类。DAO模式是软件设计中常用的一种模式,它将业务逻辑与数据...
至于`Dao经典泛型.doc`文件,可能是更深入的关于Hibernate泛型DAO的文档,可能包含了如何配置Spring、如何处理复杂查询以及如何优化泛型DAO的更多细节。阅读这份文档将进一步提升你对泛型DAO的理解和应用能力。 ...
HibernateDao 是一种基于 Hibernate ORM(对象关系映射)框架的通用数据访问对象,它简化了对数据库的操作,提供了更高级别的抽象,使开发者能够更加专注于业务逻辑而不是底层的数据操作。在Java开发中,Hibernate...
通常,开发者会创建一个基类,比如HibernateDAO,提供通用的方法,然后为每个特定的数据模型创建继承自该基类的DAO实现。 在标签中,“源码”意味着讨论可能涉及到了具体的代码实现,而“工具”可能指的是Hibernate...
**hibernate通用DAO(Data Access Object)**是软件开发中的一个重要概念,它主要用于数据库操作的抽象,使得业务逻辑层可以无需关注具体的SQL语句,从而实现数据访问的解耦。在Java EE应用中,Hibernate作为一款...
**Hibernate原生通用DAO**是基于Hibernate框架设计的一种简化数据访问操作的方式,它模仿了Spring框架中的`HibernateTemplate`类,旨在提供一个简单易用的DAO(Data Access Object)层,方便开发人员进行数据库操作...
本文将深入探讨“Spring Hibernate 泛型DAO”这一主题,以及如何通过泛型DAO实现更加高效、可复用的代码。 首先,让我们理解什么是DAO(Data Access Object)模式。DAO是一种设计模式,它的主要作用是隔离业务逻辑...
本篇文章将深入探讨Hibernate的通用Dao设计,帮助开发者理解如何利用Hibernate提高代码复用性和可维护性。 在传统的Java应用程序中,DAO(Data Access Object)层是用于封装数据库访问逻辑的地方,它隔离了业务逻辑...
hibernateDao工具类
在Java领域,尤其是在企业级应用开发中,DAO模式常与ORM(Object-Relational Mapping)框架如Hibernate结合使用。 **Hibernate** 是一个流行的ORM框架,它允许开发者用面向对象的方式操作数据库,而无需直接编写SQL...
本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...
而`Hibernate泛型DAO`则是为了减少代码重复性,提高代码复用性和可维护性的一种设计模式。本文将深入探讨`Hibernate泛型DAO`的实现及其使用方法。 首先,DAO(Data Access Object)模式是一种设计模式,它的主要...