徐州北大青鸟
当前位置: 主页 > 学在青鸟 > 编程技巧 >

分享一个Java通用的DAO及接口代码——DAO类

时间:2016-10-12 11:14来源:未知 作者:代码如诗 点击:
徐州北大青鸟分享一个Java通用的DAO及接口代码以下为DAO类代码 ====================================================================== package com.oa.dao.support; import java.io.Serializable; import java.util.List; import

徐州北大青鸟分享一个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;
}

===============================================================

徐州北大青鸟分享

试听课
(责任编辑:代码如诗)
------分隔线----------------------------
栏目列表
推荐内容