1 /** 2 * 作者:宫长明 3 * 4 */ 5 6 7 import java.io.Serializable; 8 import java.util.List; 9 import java.util.Map; 10 11 import org.hibernate.criterion.Criterion; 12 import org.hibernate.criterion.DetachedCriteria; 13 14 @SuppressWarnings("unchecked") 15 public interface IBaseDao<T,PK extends Serializable> { 16 /** 17 * 保存PO对象 18 * @param obj PO所要保存值对象 19 * @return 保存记录数 0:为保存失败 20 * */ 21 public void save(T obj); 22 /** 23 * 保存PO对象 24 * @param obj PO所要保存值对象 25 * @return 保存记录数 0:为保存失败 26 * */ 27 public void saveByObj(T obj); 28 29 /** 30 * 保存多个PO对象,将PO封装到List中 31 * @param obj PO所要保存值对象 32 * @return 保存记录数 0:为保存失败 33 * */ 34 public void save(List<T> ls); 35 36 /** 37 * 删除表中所有数据,通过Object.ClassName得到表名称 38 * @param tableName删除表名称 39 * @return 删除记录数据 40 * */ 41 public int deleteAll(String tableName); 42 43 public void deleteById(PK id); 44 45 /** 46 * 根据查询语句,返回对象列表 47 * 48 * @param hql 49 * 查询语句 50 * @return 符合查询语句的对象列表 51 */ 52 public List find(String hql); 53 54 /** 55 * 返回指定起始位置,指定条数的对象 56 * 57 * @param hql 58 * 查询语句 59 * @param firstResult 60 * 起始位置 61 * @param maxResults 62 * 最多纪录数 63 * @return list 结果列表 64 */ 65 //public List<T> find(String hql,int firstResult,int maxResults); 66 67 /** 68 * 返回指定起始位置,指定条数的对象 69 * 70 * @param hql 71 * 查询语句 72 * @param pageNo 73 * 页数 74 * @return list 结果列表 75 */ 76 public List<T> find(String hql,int pageNo,int maxResults); 77 78 /** 79 * 查询语句需要的条件参数。通过map传递 80 * 81 * @param hql 82 * 查询语句 83 * @param map 84 * 参数 85 * @param firstResult 86 * 起始位置 87 * @param maxResults 88 * 最多纪录数 89 * @return list 结果列表 90 */ 91 //public List<T> find(String hql, Map map, int firstResult,int maxResults); 92 93 /** 94 * 查询语句需要的条件参数。通过map传递 95 * 96 * @param hql 97 * 查询语句 98 * @param map 99 * 参数 100 * @param pageNo 101 * 页数 102 */ 103 public List<T> find(String hql, Map map, int pageNo,int maxResults); 104 105 /** 106 * 根据查询语句,返回对象列表 107 * 108 * @param hql 109 * 查询语句 110 * @return 符合查询语句的对象列表 111 */ 112 public List<T> find(String hql, Map map); 113 114 115 /** 116 * 通过Hql 执行update/delete操作 117 * 118 * @param hql 119 * @return 120 */ 121 public int executeUpdate(String hql); 122 123 /** 124 * 查询表中所有记录 125 */ 126 public List<T> findAll() ; 127 128 /** 129 * 通过 DetachedCriteria 进行查询指定查询条数 130 * @param firstResult 131 * 起始位置 132 * @param maxResults 133 * 最多纪录数 134 * @param dc 135 * 136 * @return 符合查询语句的对象列表 137 */ 138 public List<T> findByCriteria(DetachedCriteria dc,int firstResult, int maxResults); 139 140 /** 141 * 统计符合查询语句的条数 142 * @param dc 143 * */ 144 public int countByCriteria(DetachedCriteria dc); 145 146 /** 147 * 通过Hql 执行update/delete操作 带条件查询 148 * 149 * @param hql 150 * @return 151 */ 152 public int executeUpdate(String hql, Map pMap); 153 154 /** 155 * 删除obj指定ID记录,通过捕捉异常来判断是否删除成功 156 * @param obj 指定ID记录数 157 * */ 158 public void delete(T obj); 159 160 /** 161 * 根据ID从内存中加载记录 162 * @param aclass 类 163 * @param id 可以为任意类型 164 * */ 165 public T load(PK id) ; 166 167 /** 168 * 加载数据 169 * */ 170 public T get(PK id); 171 172 public Object getObj(Class cls,PK id); 173 174 /** 175 * 保存或修改 176 * @param obj 保存对象 177 * */ 178 public void saveOrUpdate(T obj); 179 180 public void saveOrUpdate(List<T> lsj); 181 /** 182 * 更新记录 183 * @param obj 保存对象 184 * */ 185 public void update(T obj); 186 /** 187 * 更新记录 188 * @param obj 保存对象 189 * */ 190 public int update(String hql); 191 /** 192 * TODO count hql 方法 . 带条件 193 */ 194 public int count(String hql, Map params); 195 196 /** 197 * TODO count hql 方法 198 */ 199 public Integer count(String hql); 200 201 /** 202 * 根据hql删除记录 203 * @param hql 删除语句 204 * @param map 条件参数 205 * @return 删除条数 206 * */ 207 public int delete(String hql,Map map); 208 209 /** 210 * 根据hql删除记录 211 * @param hql 删除语句 212 * @param map 条件参数 213 * @return 删除条数 214 * */ 215 public int delete(String hql); 216 217 /** 218 * 根据hql语句,更新记录部分字段 219 * @param hql 更新语句 220 * @param map 更新参数及条件 221 * @return 返回值大于0则更新成功,否则更新失败 222 * */ 223 public int update(String hql,Map map); 224 225 /** 226 * 返回Object List数组 227 * @param hql 228 * @param map hql中的参数和参数值 229 * @param pageNo 页码 230 * @param maxResults 每页显示最大条数 231 * @return 232 */ 233 public List findObj( String hql, Map map, int pageNo, int maxResults); 234 235 /** 236 * 返回Object List数组 237 * @param hql 238 * @return 239 */ 240 public List findObj( String hql); 241 242 /** 243 * 返回Object List数组 244 * @param hql 245 * @param map hql中的参数和参数值 246 * @return 247 */ 248 public List findObj( String hql, Map map); 249 250 /** 251 * 252 * @功能描述: 查询 253 * @param firstResult首条数据位数 254 * @param maxResult 每次取出最大条数 255 * @param criterion 256 * @return 257 * @throws DataAccessException 258 * @return:List<T> 259 * @创建人:宫长明 260 * @创建时间:May 28, 2010 4:14:31 PM 261 */ 262 public List<T> findByCriteria( int firstResult, int maxResults, Criterion... criterion) ; 263 264 /** 265 * 266 * @功能描述: 查义 267 * @param firstResult 首条查询位置 268 * @param maxResults 第次查询最大数 小于0查询所有 269 * @param sortProperty 排序字段 270 * @param ascend 排序方法 true: ASC fasle: DESC 271 * @param criterion 272 * @return 273 * @return:List<T> 274 * @创建人:宫长明 275 * @创建时间:May 28, 2010 4:14:37 PM 276 */ 277 public List<T> findByCriteria( int firstResult, int maxResults, String sortProperty, boolean ascend, Criterion... criterion); 278 279 /** 280 * 281 * @功能描述: 282 * @param criterion 283 * @return 284 * @throws DataAccessException 285 * @return:List<T> 286 * @创建人:宫长明 287 * @创建时间:May 28, 2010 4:14:41 PM 288 */ 289 public List<T> findByCriteria( Criterion...criterion); 290 //throws DataAccessException; 291 292 /** 293 * 294 * @功能描述: 295 * @param criterion 296 * @return 297 * @throws DataAccessException 298 * @return:int 299 * @创建人:宫长明 300 * @创建时间:May 28, 2010 4:14:45 PM 301 */ 302 public int countByCriteria( Criterion... criterion) ; 303 304 /** 305 * @功能描述: 根据List删除数据 306 * @param obj List<T> 307 * @创建人:宫长明 308 * @创建时间:2011-4-8 上午09:15:05 309 */ 310 public void deleteByList(List<T> obj); 311 312 /** 313 * @功能描述: 合并重复obj后保存或添加 314 * @param obj 315 * @创建人:王树峰 316 * @创建时间:2011-4-8 下午03:19:03 317 */ 318 public void saveOrUpdateMerge(T obj); 319 320 /** 321 * 322 * @Title: saveOrUpdateClear 323 * @Description: 多了一句话.clear() 324 * @return: void 325 * @param: 326 * @throws 327 */ 328 public void saveOrUpdateClear(T obj); 329 330 public T mergeObj(T obj); 331 }
1 import java.io.Serializable; 2 import java.lang.reflect.ParameterizedType; 3 import java.sql.SQLException; 4 import java.util.ArrayList; 5 import java.util.List; 6 import java.util.Map; 7 8 import org.hibernate.Criteria; 9 import org.hibernate.HibernateException; 10 import org.hibernate.Query; 11 import org.hibernate.Session; 12 import org.hibernate.criterion.Criterion; 13 import org.hibernate.criterion.DetachedCriteria; 14 import org.hibernate.criterion.Order; 15 import org.hibernate.criterion.Projections; 16 17 18 /** 19 * 20 * @类描述: Hibernate Dal 基本方法 21 * @创建人:宫长明 22 * @创建时间:May 28, 2010 4:11:57 PM 23 * @项目名:办公用品 24 * @版本信息:V 1.0 25 * @Copyright (c) 北京开诚阳光科技有限公司-版权所有 V 2010.0 26 */ 27 @SuppressWarnings("unchecked") 28 public class BaseDaoHibernate<T,PK extends Serializable> extends HibernateDaoSupport implements IBaseDao<T,PK>{ 29 30 private final Class<T> aclass; 31 32 33 public BaseDaoHibernate(){ 34 this.aclass = (Class<T>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 35 } 36 37 public int count(final String hql,final Map mparams) { 38 39 List tempList = this.getHibernateTemplate().executeFind(new HibernateCallback(){ 40 public List doInHibernate(Session session) throws HibernateException, SQLException { 41 42 StringBuffer countQuery = new StringBuffer("select count(*) "); 43 countQuery.append(hql); 44 Query query = session.createQuery(countQuery.toString()); 45 String params[] = query.getNamedParameters(); 46 for(int i=0;i<params.length;i++){ 47 query.setParameter(params[i], mparams.get(params[i])); 48 } 49 List result = query.list(); 50 return result; 51 } 52 }); 53 54 Object obj = tempList!=null&&tempList.size()>0?tempList.get(0):0; 55 if (obj instanceof Long) { 56 Integer count = Integer.valueOf(String.valueOf(obj)); 57 return count; 58 }else{ 59 Integer count = Integer.valueOf(String.valueOf(obj)); 60 return count.intValue(); 61 } 62 } 63 64 public Integer count(String hql) { 65 List<Object> result = getHibernateTemplate().find("select count(*) "+hql); 66 Object obj = result.get(0); 67 if(obj instanceof Integer){ 68 Integer count = (Integer)obj; 69 return count; 70 }else{ 71 Long count = (Long)obj; 72 return count.intValue(); 73 } 74 } 75 76 public int countByCriteria(DetachedCriteria dc) { 77 78 return 0; 79 } 80 81 public void delete(final T obj) { 82 getHibernateTemplate().execute(new HibernateCallback(){ 83 public Object doInHibernate(Session session) throws HibernateException, SQLException { 84 session.clear(); 85 session.delete(obj); 86 return null; 87 } 88 89 }); 90 } 91 92 public void deleteByList(final List<T> obj) { 93 getHibernateTemplate().execute(new HibernateCallback(){ 94 public Object doInHibernate(Session session) throws HibernateException, SQLException { 95 session.clear(); 96 for(T t:obj){ 97 session.delete(t); 98 } 99 return null; 100 } 101 102 }); 103 } 104 105 public int deleteAll(final String tableName) { 106 107 StringBuffer hql = new StringBuffer("delete from "); 108 hql.append(tableName); 109 return executeUpdate(hql.toString()); 110 } 111 112 public int executeUpdate(final String hql) { 113 114 Object obj = getHibernateTemplate().execute(new HibernateCallback(){ 115 public Object doInHibernate(Session session) throws HibernateException, SQLException { 116 117 Query query = session.createQuery(hql); 118 int result = 0 ; 119 result = query.executeUpdate(); 120 getHibernateTemplate().flush(); 121 return result; 122 } 123 }); 124 if(obj!=null) 125 return ((Integer)obj).intValue(); 126 else 127 return 0; 128 } 129 130 public int executeUpdate(final String hql,final Map pMap) { 131 132 Object obj = getHibernateTemplate().execute(new HibernateCallback(){ 133 public Object doInHibernate(Session session) throws HibernateException, SQLException { 134 135 Query query = session.createQuery(hql); 136 String params[] = query.getNamedParameters(); 137 for(int i=0;i<params.length;i++){ 138 query.setParameter(params[i], pMap.get(params[i])); 139 } 140 int result = 0; 141 result = query.executeUpdate(); 142 getHibernateTemplate().flush(); 143 return result; 144 } 145 }); 146 if(obj!=null) 147 return ((Integer)obj).intValue(); 148 else 149 return 0; 150 } 151 152 public List<T> find(final String hql) { 153 return getHibernateTemplate().find(hql); 154 } 155 156 public List<T> findObj(final String hql) { 157 return getHibernateTemplate().find(hql); 158 } 159 160 public List<T> find(final String hql, final Map map) { 161 return getHibernateTemplate().executeFind(new HibernateCallback(){ 162 public List<T> doInHibernate(Session session) throws HibernateException, SQLException { 163 164 Query query = session.createQuery(hql); 165 String[] pamars = query.getNamedParameters(); 166 for(int i=0;i<pamars.length;i++){ 167 query.setParameter(pamars[i], map.get(pamars[i])); 168 } 169 List<T> results = new ArrayList(); 170 results = query.list(); 171 return results; 172 } 173 }); 174 } 175 176 public List findObj(final String hql, final Map map) { 177 return getHibernateTemplate().executeFind(new HibernateCallback(){ 178 public List<T> doInHibernate(Session session) throws HibernateException, SQLException { 179 180 Query query = session.createQuery(hql); 181 String[] pamars = query.getNamedParameters(); 182 for(int i=0;i<pamars.length;i++){ 183 query.setParameter(pamars[i], map.get(pamars[i])); 184 } 185 List<T> results = new ArrayList(); 186 results = query.list(); 187 return results; 188 } 189 }); 190 } 191 192 public List<T> findAll() throws DataAccessException { 193 return findByCriteria(); 194 } 195 196 public List<T> findByCriteria(DetachedCriteria dc, int firstResult, int maxResults) { 197 return null; 198 } 199 200 public T get(PK id) { 201 return (T)getHibernateTemplate().get(aclass, id); 202 } 203 204 public Object getObj(Class cls,PK id) { 205 return (T)getHibernateTemplate().get(cls, id); 206 } 207 208 public T load(PK id) throws DataAccessException { 209 210 return (T)getHibernateTemplate().load(aclass, id); 211 } 212 213 public void save(T obj) {//1 214 215 this.getHibernateTemplate().save(obj); 216 } 217 218 public void saveByObj(T obj) { 219 220 this.getHibernateTemplate().save(obj); 221 } 222 223 public void save(List<T> ls) { 224 225 this.getHibernateTemplate().saveOrUpdateAll(ls); 226 getHibernateTemplate().flush(); 227 } 228 229 public void saveOrUpdateMerge(T obj) 230 { 231 obj=(T)this.getHibernateTemplate().merge(obj); 232 this.getHibernateTemplate().saveOrUpdate(obj); 233 getHibernateTemplate().flush(); 234 getHibernateTemplate().clear(); 235 } 236 237 public void saveOrUpdate(T obj) { 238 this.getHibernateTemplate().saveOrUpdate(obj); 239 getHibernateTemplate().flush(); 240 } 241 242 public void saveOrUpdateClear(T obj) { 243 this.getHibernateTemplate().saveOrUpdate(obj); 244 getHibernateTemplate().flush(); 245 getHibernateTemplate().clear(); 246 } 247 public void saveOrUpdate(List<T> lsj) { 248 this.getHibernateTemplate().saveOrUpdateAll(lsj); 249 getHibernateTemplate().flush(); 250 } 251 252 public void update(T obj) { 253 this.getHibernateTemplate().update(obj); 254 getHibernateTemplate().flush(); 255 } 256 257 public HibernateTemplate getHibTemplate(){ 258 return this.getHibernateTemplate(); 259 } 260 261 public int delete(String hql, Map map) { 262 return executeUpdate(hql, map); 263 } 264 265 public int update(String hql, Map map) { 266 return executeUpdate(hql, map); 267 } 268 269 public int update(String hql) { 270 return executeUpdate(hql); 271 } 272 273 public int delete(String hql) { 274 return executeUpdate(hql); 275 } 276 277 public List<T> find(final String hql,final int pageNo,final int maxResults) { 278 return getHibernateTemplate().executeFind(new HibernateCallback(){ 279 public List<T> doInHibernate(Session session) throws HibernateException, SQLException { 280 281 Query query = session.createQuery(hql); 282 if(maxResults>0) 283 query.setFirstResult((pageNo-1)*maxResults).setMaxResults(maxResults); 284 List<T> results = query.list(); 285 return results; 286 } 287 }); 288 } 289 290 public List<T> find(final String hql,final Map map,final int pageNo,final int maxResults) { 291 return getHibernateTemplate().executeFind(new HibernateCallback(){ 292 public List<T> doInHibernate(Session session) throws HibernateException, SQLException { 293 294 Query query = session.createQuery(hql); 295 String[] pamars = query.getNamedParameters(); 296 for(int i=0;i<pamars.length;i++){ 297 query.setParameter(pamars[i], map.get(pamars[i])); 298 } 299 if(maxResults>0) 300 query.setFirstResult((pageNo-1)*maxResults).setMaxResults(maxResults); 301 List<T> results = new ArrayList(); 302 results = query.list(); 303 return results; 304 } 305 }); 306 } 307 308 public List findObj(final String hql,final Map map,final int pageNo,final int maxResults) { 309 310 return getHibernateTemplate().executeFind(new HibernateCallback(){ 311 public List<T> doInHibernate(Session session) throws HibernateException, SQLException { 312 313 Query query = session.createQuery(hql); 314 String[] pamars = query.getNamedParameters(); 315 for(int i=0;i<pamars.length;i++){ 316 query.setParameter(pamars[i], map.get(pamars[i])); 317 } 318 if(maxResults>0) 319 query.setFirstResult((pageNo-1)*maxResults).setMaxResults(maxResults); 320 List<T> results = new ArrayList(); 321 results = query.list(); 322 return results; 323 } 324 }); 325 } 326 327 public void deleteById(final PK id) { 328 getHibernateTemplate().execute(new HibernateCallback(){ 329 public Object doInHibernate(Session session) throws HibernateException, SQLException { 330 session.delete(session.get(aclass, id)); 331 return null; 332 } 333 334 }); 335 } 336 337 public List<T> findByCriteria(final int firstResult, final int maxResults, final Criterion... criterion) throws DataAccessException{ 338 return findByCriteria(firstResult, maxResults, null, false, criterion); 339 } 340 341 public List<T> findByCriteria(final int firstResult, final int maxResults, final String sortProperty, final boolean ascend, final Criterion... criterion){ 342 return getHibernateTemplate().executeFind(new HibernateCallback(){ 343 public List<T> doInHibernate(Session session) throws HibernateException, SQLException { 344 Criteria crit = session.createCriteria(aclass); 345 if(criterion != null){ 346 for(Criterion c : criterion){ 347 crit.add(c); 348 } 349 } 350 if(firstResult > 0) 351 crit.setFirstResult(firstResult); 352 if(maxResults > 0) 353 crit.setMaxResults(maxResults); 354 if(sortProperty != null && sortProperty.trim().length() > 0){ 355 crit.addOrder(ascend ? Order.asc(sortProperty) : Order.desc(sortProperty)); 356 } 357 return crit.list(); 358 } 359 360 }); 361 } 362 363 public List<T> findByCriteria(final Criterion...criterion) throws DataAccessException { 364 return findByCriteria(-1, -1, criterion); 365 } 366 367 public Criteria getCriteria(){ 368 return this.getSession().createCriteria(aclass); 369 } 370 371 public int countByCriteria(final Criterion... criterion) throws DataAccessException{ 372 Object obj = getHibernateTemplate().execute(new HibernateCallback(){ 373 public Integer doInHibernate(Session session) throws HibernateException, SQLException { 374 Criteria crit = session.createCriteria(aclass); 375 for(Criterion c : criterion){ 376 crit.add(c); 377 } 378 crit.setProjection(Projections.rowCount()); 379 Integer total = (Integer)crit.uniqueResult(); 380 return total; 381 } 382 383 }); 384 if(obj!=null) 385 return (Integer)obj; 386 return 0; 387 } 388 389 public T mergeObj(T obj){ 390 return (T)this.getSession().merge(obj); 391 } 392 }