功能:数据库的保存、更新、删除;sql、hql查询;分页查询;调用存储过程基础dao类,BaseDaoImpl.class 1 import java.io.Serializable; 2 import java.sql.CallableStatement; 3 import j ...
功能:数据库的保存、更新、删除;sql、hql查询;分页查询;调用存储过程
基础dao类,BaseDaoImpl.class
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
(#换成@)。