你的位置:首页 > 软件开发 > Java > hibernate基础dao类

hibernate基础dao类

发布时间:2016-08-07 18:00:12
功能:数据库的保存、更新、删除;sql、hql查询;分页查询;调用存储过程基础dao类,BaseDaoImpl.class 1 import java.io.Serializable; 2 import java.sql.CallableStatement; 3 import j ...

功能:数据库的保存、更新、删除;sql、hql查询;分页查询;调用存储过程

基础dao类,BaseDaoImpl.class

hibernate基础dao类hibernate基础dao类
 1 import java.io.Serializable; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.text.MessageFormat; 7 import java.util.ArrayList; 8 import java.util.List; 9 import java.util.Map; 10  11 import org.hibernate.Criteria; 12 import org.hibernate.Query; 13 import org.hibernate.Session; 14 import org.hibernate.criterion.DetachedCriteria; 15 import org.hibernate.criterion.Projections; 16 import org.hibernate.jdbc.Work; 17 import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 18  19 public class BaseDaoImpl<T extends Serializable> extends HibernateDaoSupport implements BaseDao<T>{      20   public BaseDaoImpl(){ 21     super(); 22   } 23    24   /** 25    * 返回数据库session对象 26    * @return 27   */ 28   protected Session getCurrentSession(){ 29     return getHibernateTemplate().getSessionFactory().getCurrentSession(); 30   } 31  32   /** 33    * 保存实体对象 34    * @param entity 实体对象 35   */ 36   @Override 37   public void save(T entity){ 38     Session session = getCurrentSession(); 39     session.save(entity);     40     session.flush(); 41     session.evict(entity); 42   } 43    44   /** 45    * 更新实体对象 46    * @param 实体对象 47   */ 48   @Override 49   public void update(T entity){ 50     Session session = getCurrentSession(); 51     session.update(entity);     52     session.flush(); 53     session.evict(entity); 54   } 55    56   /** 57    * 保存或更新实体对象 58    * @param entity 实体对象 59   */ 60   @Override 61   public void saveOrUpdate(T entity) {     62     Session session = getCurrentSession(); 63     session.saveOrUpdate(entity);     64     session.flush(); 65     session.evict(entity);   66   } 67  68   /** 69    * 删除实体对象 70    * @param entity 实体对象 71   */ 72   @Override 73   public void delete(T entity){ 74     Session session = getCurrentSession(); 75     session.delete(entity);     76     session.flush(); 77     session.evict(entity); 78   }   79    80   /** 81    * 查询hql语句,返回唯一结果 82    * @param hql  83   */ 84   @Override 85   public Object findUniqueResult(String hql){ 86     Query query = getCurrentSession().createQuery(hql); 87     return query.uniqueResult(); 88   } 89    90   /** 91    * 执行sql语句,更新数据库 92    * @param sql 93   */ 94   @Override 95   public void updateBySql(final String sql){ 96     getSession().doWork(new Work() {   97       @Override 98       public void execute(Connection connection) throws SQLException { 99         connection.prepareStatement(sql).executeUpdate();100       }101     });102   }  103   104   /**105    * 通过Criteria对象查询,返回实体对象结果集106    * @param detachedCriteria 离线的Criteria对象107    * @return 实体对象结果集108   */109   @Override110   public List findByCriteria(DetachedCriteria detachedCriteria){111     Criteria criteria = detachedCriteria.getExecutableCriteria(getCurrentSession());112     List records = criteria.list();113     return records;114   }115   116   /**117    * 通过sql语句查询,返回map对象结果集118    * @param sql 119    * @return map对象结果集120   */121   @Override122   public List<Map<String, Object>> findBySql(final String sql){123     final List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();124     getSession().doWork(new Work() {  125       @Override126       public void execute(Connection connection) throws SQLException {127         ResultSet rs = connection.prepareStatement(sql).executeQuery();128         result.addAll(RsHelper.rSToList(rs));129       }130     });131     return result;132   }133   134   /**135    * 查询sql语句,返回唯一结果136    * @param sql 137   */138   @Override139   public Object findUniqueResultBySql(String sql) {  140     return getCurrentSession().createSQLQuery(sql.toString()).uniqueResult();141   }142   143   /**144    * 通过Criteria对象查询,返回结果集的记录数145    * @param detachedCriteria 离线的Criteria对象146    * @return 结果集的记录数147   */148   @Override149   public long getCount(DetachedCriteria detachedCriteria) {150     Criteria criteria = detachedCriteria.getExecutableCriteria(getCurrentSession());151     Object object = criteria.setProjection(Projections.rowCount()).uniqueResult();152     criteria.setProjection(null);153     Long totalRow = Long.valueOf(String.valueOf(object));154     return totalRow;155   }156   157   /**158    * 通过Criteria对象进行分页查询,返回实体对象结果集159    * @param pageNum 第几页160    * @param pageSize 每页大小161    * @param detachedCriteria 离线的Criteria对象162    * @return 实体对象结果集 163   */164   @Override165   public List<T> findPage(int pageNum, int pageSize, 166       DetachedCriteria detachedCriteria){167     Criteria criteria = detachedCriteria.getExecutableCriteria(getCurrentSession());168     List<T> records = criteria.setFirstResult((pageNum-1) * pageSize).setMaxResults(pageSize).list();169     return records;170   }171   172   /**173    * 通过sql语句,进行分页查询,返回分页对象174    * @param pageNum 第几页175    * @param pageSize 每页大小176    * @param sql177    * @return 分页对象178   */179   @Override180   public Pagination findPage(final int pageNum, final int pageSize,final String sql){181     final Pagination page = new Pagination();182     getSession().doWork(new Work() {  183       @Override184       public void execute(Connection connection) throws SQLException {185         String countSql = MessageFormat.format("select count(*) from ({0}) page", sql);186         ResultSet rs = connection.prepareStatement(countSql).executeQuery();187         page.setTotal(Long.valueOf(RsHelper.getUniqueResult(rs).toString()));188         189         long firstResult = (pageNum - 1)*pageSize;190         String selectSql = MessageFormat.format("select * from ({0}) page limit {1},{2}", sql, firstResult, firstResult+pageSize);191         page.setRows(RsHelper.rSToList(connection.prepareStatement(selectSql).executeQuery()));192       }193     });194     195     return page;196   }197   198   /**199    * 调用存储过程,返回单结果集200    * @param proceName 存储过程名称201    * @param params 输入参数集合202    * @return map对象结果集203   */204   public List<Map<String, Object>> callProcedure(String proceName, final List<Object> params){205     final List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();206     final StringBuffer sql = new StringBuffer();207     sql.append("{call " + proceName + "(");208     for(int i=0; params!=null && i<params.size(); i++){209       sql.append("?");210       if(i+1!=params.size())211         sql.append(",");212     }213     sql.append(")}");214     getSession().doWork(new Work() {  215       @Override216       public void execute(Connection connection) throws SQLException {217         CallableStatement statement = connection.prepareCall(218             sql.toString());219         for(int i=0; i<params.size(); i++){220           statement.setObject(i+1, params.get(i));//设置参数221         }222 223         result.addAll(RsHelper.rSToList(statement.executeQuery()));224       }225     });226     227     return result;228   }229   230 }

原标题:hibernate基础dao类

关键词:Hibernate

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录