徐州北大青鸟分享一个Java通用的DAO及接口代码——以下为DAO类代码
======================================================================
package com.oa.dao.support;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.oa.dao.IMultiDAO;
import com.oa.struts.PageInfo;
public class MultiDAO extends HibernateDaoSupport implements IMultiDAO {
private static final Log log = LogFactory.getLog(MultiDAO.class);
/**
* 自定义查询方法(无参)
*
* @param hql
* @return
* @throws Exception
*/
public List findMsg(String hql) throws Exception {
log.debug("自定义查询:" + hql);
try {
List list = getHibernateTemplate().find(hql);
return list;
} catch (Exception e) {
log.error("自定义查询:" + e.getMessage());
throw e;
}
}
/**
* 自定义查询方法(有参)
*
* @param hql
* @param params
* @return
* @throws Exception
*/
public List findMsg(String hql, Object[] params) throws Exception {
log.debug("自定义查询:" + hql);
try {
List list = getHibernateTemplate().find(hql, params);
return list;
} catch (Exception e) {
log.error("自定义查询:" + e.getMessage());
throw e;
}
}
/**
* 自定义查询方法
*
* @param cls
* @param id
* @return
*/
public Object getObject(Class cls, Serializable id) throws Exception {
log.debug("自定义查询:" + cls.getName());
try {
Object obj = this.getHibernateTemplate().get(cls, id);
return obj;
} catch (Exception e) {
log.error("自定义查询:" + e.getMessage());
throw e;
}
}
/**
* 分页查询方法
*
* @param queryString
* @param parameters
* @param pageInfo,必填充pageSize,pageIndex
* @return
*/
public PageInfo findPageByQuery(final String hql,
final Object[] parameters, final PageInfo pageInfo) {
List list = getHibernateTemplate().executeFind(new HibernateCallback()// 这里使用了匿名内部类
{
public Object doInHibernate(Session session)// Spring进行事务维护
// 省去每次创建session和关闭session
throws HibernateException {
Query query = session.createQuery(hql);
if (parameters != null) {
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}
ScrollableResults sr = query.scroll();
sr.last();// 滚至最后一行
int totalCount = sr.getRowNumber();// 最后记录行数,从零开始???
int startIndex = (pageInfo.getPageIndex() - 1)
* pageInfo.getPageSize();// 去除页数和页记录数计算开始位置
query.setMaxResults(pageInfo.getPageSize());
query.setFirstResult(startIndex);
int totalRec = totalCount + 1;// 获取总记录数
pageInfo.setTotalRec(totalRec);// 设置总记录数
int totalPage = (totalRec + pageInfo.getPageSize() - 1)
/ pageInfo.getPageSize();// 计算总页数
pageInfo.setTotalPage(totalPage);// 设置总页数
pageInfo.setPrePage(pageInfo.getPageIndex() - 1);// 设置上一页
pageInfo.setNextPage(pageInfo.getPageIndex() + 1);// 设置下一页
return query.list();
}
});
pageInfo.setPageList(list);
return pageInfo;
}
/**
* 自定义保存方法
*
* @param entity
* @throws Exception
*/
public void save(Object entity) throws Exception {
log.debug("保存数据:" + entity.toString());
try {
this.getHibernateTemplate().save(entity);
} catch (Exception e) {
log.error("保存错误:" + e.getMessage());
throw e;
}
}
/**
* 自定义删除方法
*
* @param entity
* @throws Exception
*/
public void delete(Object entity) throws Exception {
log.debug("删除操作:" + entity.toString());
try {
this.getHibernateTemplate().delete(entity);
} catch (Exception e) {
log.error("删除错误:" + e.getMessage());
throw e;
}
}
/**
* 自定义更新操作
*
* @param entity
* @throws Exception
*/
public void update(Object entity) throws Exception {
log.debug("更新操作:" + entity.toString());
try {
this.getHibernateTemplate().update(entity);
} catch (Exception e) {
log.error("更新操作:" + e.getMessage());
throw e;
}
}
/**
* 特殊情况多数更新删除时
*
* @param hql
* @throws Exception
*/
public void userDefined(String hql, Object[] params) throws Exception {
log.debug("自定义操作:" + hql);
Session session = this.getSession();
Transaction trans = session.beginTransaction();// 开始事务
try {
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);// 填入参数
}
}
query.executeUpdate();
trans.commit();// 提交事务
} catch (Exception e) {
trans.rollback();// 回滚事务
log.error("自定义操作" + e.getMessage());
throw e;
} finally {
session.close();// 关闭Session
}
}
}
======================================================================
徐州北大青鸟分享一个Java通用的DAO及接口代码——以下为接口代码
======================================================================
package com.oa.dao;
import java.io.Serializable;
import java.util.List;
import com.oa.struts.PageInfo;
public interface IMultiDAO {
/**
* 自定义查询方法(无参)
*
* @param hql
* @return
* @throws Exception
*/
public List findMsg(String hql) throws Exception ;
/**
* 自定义查询方法(有参)
* @param hql
* @param params
* @return
* @throws Exception
*/
public List findMsg(String hql,Object [] params) throws Exception;
/**
* 自定义查询方法
* @param cls
* @param id
* @return
*/
public Object getObject(Class cls,Serializable id) throws Exception;
/**
* 分页查询方法
* @param queryString
* @param parameters
* @param pageInfo,必填充pageSize,pageIndex
* @return
*/
public PageInfo findPageByQuery(final String hql,
final Object[] parameters, final PageInfo pageInfo) ;
/**
* 自定义保存方法
* @param entity
* @throws Exception
*/
public void save(Object entity) throws Exception;
/**
* 自定义删除方法
* @param entity
* @throws Exception
*/
public void delete(Object entity)throws Exception;
/**
* 自定义更新操作
* @param entity
* @throws Exception
*/
public void update(Object entity) throws Exception;
/**
* 特殊情况多数更新删除时
* @param hql
* @throws Exception
*/
public void userDefined(String hql,Object [] params) throws Exception;
}
===============================================================
徐州北大青鸟分享
(责任编辑:代码如诗) |