程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> hibernate基礎dao類,hibernate基礎dao

hibernate基礎dao類,hibernate基礎dao

編輯:JAVA綜合教程

hibernate基礎dao類,hibernate基礎dao


功能:數據庫的保存、更新、刪除;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 @Override 110 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 @Override 122 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 @Override 126 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 @Override 139 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 @Override 149 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 @Override 165 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 sql 177 * @return 分頁對象 178 */ 179 @Override 180 public Pagination findPage(final int pageNum, final int pageSize,final String sql){ 181 final Pagination page = new Pagination(); 182 getSession().doWork(new Work() { 183 @Override 184 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 @Override 216 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 } View Code

 

基礎dao類接口,BaseDao.class

1 import java.io.Serializable; 2 import java.util.List; 3 import java.util.Map; 4 5 import org.hibernate.criterion.DetachedCriteria; 6 7 /** 8 * 統一數據訪問接口 9 */ 10 public interface BaseDao<T extends Serializable> { 11 12 /** 13 * 保存實體對象 14 * @param entity 實體對象 15 */ 16 public void save(T entity); 17 18 /** 19 * 更新實體對象 20 * @param 實體對象 21 */ 22 public void update(T entity); 23 24 /** 25 * 保存或更新實體對象 26 * @param entity 實體對象 27 */ 28 public void saveOrUpdate(T entity); 29 30 /** 31 * 刪除實體對象 32 * @param entity 實體對象 33 */ 34 public void delete(T entity); 35 36 /** 37 * 查詢hql語句,返回唯一結果 38 * @param hql 39 */ 40 public Object findUniqueResult(String hql); 41 42 /** 43 * 執行sql語句,更新數據庫 44 * @param sql 45 */ 46 public void updateBySql(String sql); 47 48 /** 49 * 通過Criteria對象查詢,返回實體對象結果集 50 * @param detachedCriteria 離線的Criteria對象 51 * @return 實體對象結果集 52 */ 53 public List findByCriteria(DetachedCriteria detachedCriteria); 54 55 /** 56 * 通過sql語句查詢,返回map對象結果集 57 * @param sql 58 * @return map對象結果集 59 */ 60 public List<Map<String, Object>> findBySql(String sql); 61 62 /** 63 * 查詢sql語句,返回唯一結果 64 * @param sql 65 */ 66 public Object findUniqueResultBySql(String sql); 67 68 /** 69 * 通過Criteria對象查詢,返回結果集的記錄數 70 * @param detachedCriteria 離線的Criteria對象 71 * @return 結果集的記錄數 72 */ 73 public long getCount(DetachedCriteria detachedCriteria); 74 75 /** 76 * 通過Criteria對象進行分頁查詢,返回實體對象結果集 77 * @param pageNum 第幾頁 78 * @param pageSize 每頁大小 79 * @param detachedCriteria 離線的Criteria對象 80 * @return 實體對象結果集 81 */ 82 public List<T> findPage(int pageNum, int pageSize, DetachedCriteria detachedCriteria); 83 84 /** 85 * 通過sql語句,進行分頁查詢,返回分頁對象 86 * @param pageNum 第幾頁 87 * @param pageSize 每頁大小 88 * @param sql 89 * @return 分頁對象 90 */ 91 public Pagination findPage(int pageNum, int pageSize, String sql); // 查找分頁對象列表 92 93 /** 94 * 調用存儲過程,返回單結果集 95 * @param proceName 存儲過程名稱 96 * @param params 輸入參數集合 97 * @return map對象結果集 98 */ 99 public List<Map<String, Object>> callProcedure(String proceName, final List<Object> params); 100 } View Code

 

數據庫結果集幫助器,RsHelper.class  

1 import java.sql.ResultSet; 2 import java.sql.ResultSetMetaData; 3 import java.sql.SQLException; 4 import java.util.ArrayList; 5 import java.util.Collections; 6 import java.util.HashMap; 7 import java.util.List; 8 import java.util.Map; 9 10 /** 11 * 數據庫結果集幫助器 12 */ 13 public class RsHelper { 14 /** 15 * 返回結果集中的唯一結果,沒有則返回null 16 * @param rs 結果集 17 * @return 18 * @throws SQLException 19 */ 20 public static Object getUniqueResult(ResultSet rs) throws SQLException{ 21 if(rs.next()) { 22 return rs.getObject(1); 23 } 24 return null; 25 } 26 27 /** 28 * 將實體結果集對象轉換為map對象結果集 29 * @param rs 實體結果集對象 30 * @return map對象結果集 31 * @throws SQLException 32 */ 33 public static List<Map<String,Object>> rSToList(ResultSet rs) throws SQLException { 34 if (rs == null) 35 return Collections.EMPTY_LIST; 36 ResultSetMetaData md = rs.getMetaData(); //得到結果集(rs)的結構信息,比如字段數、字段名等 37 int columnCount = md.getColumnCount(); //返回此 ResultSet 對象中的列數 38 List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); 39 Map<String,Object> rowData = new HashMap<String,Object>(); 40 while (rs.next()) { 41 rowData = new HashMap<String,Object>(columnCount); 42 for (int i = 1; i <= columnCount; i++) { 43 rowData.put(md.getColumnName(i), rs.getObject(i)); 44 } 45 list.add(rowData); 46 } 47 return list; 48 } 49 } View Code

 

分頁對象類,Pagination.class

1 import java.util.ArrayList; 2 import java.util.List; 3 4 /** 5 * 分頁對象,一般用於響應頁面請求 6 */ 7 public class Pagination { 8 /** 9 * 總記錄數 10 */ 11 private Long total = 0l; 12 13 /** 14 * 記錄集合 15 */ 16 private List rows = new ArrayList(); 17 18 public Long getTotal() { 19 return total; 20 } 21 public void setTotal(Long total) { 22 this.total = total; 23 } 24 25 public List getRows() { 26 return rows; 27 } 28 public void setRows(List rows) { 29 this.rows = rows; 30 } 31 } View Code

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved