java新建dao类_【Java 新建项目】使用程序对新项目的各个实体 创建Dao、DaoImpl、Service、ServiceImpl层的文件...

这是一个Java实现的泛型DAO基础类,实现了自动创建针对不同实体类的CRUD操作,包括保存、更新、加载、删除等基本数据库操作。该类通过反射获取实体类,并使用Hibernate的Criteria API进行复杂查询。此外,还提供了根据HQL和SQL执行增删改查的方法,以及分页查询功能。
摘要由CSDN通过智能技术生成

1 packagecom.agen.dao.impl;2

3 importjava.io.Serializable;4 importjava.lang.reflect.Field;5 importjava.util.ArrayList;6 importjava.util.Collection;7 importjava.util.List;8 importjava.util.Map;9 importjava.util.Map.Entry;10

11 importorg.hibernate.Criteria;12 importorg.hibernate.Query;13 importorg.hibernate.QueryException;14 importorg.hibernate.ScrollableResults;15 importorg.hibernate.Session;16 importorg.hibernate.SessionFactory;17 importorg.hibernate.criterion.CriteriaSpecification;18 importorg.hibernate.criterion.Criterion;19 importorg.hibernate.criterion.DetachedCriteria;20 importorg.hibernate.criterion.Order;21 importorg.hibernate.criterion.Projections;22 importorg.hibernate.criterion.Restrictions;23 importorg.hibernate.internal.CriteriaImpl;24 importorg.hibernate.internal.CriteriaImpl.Subcriteria;25 importorg.springframework.beans.factory.annotation.Autowired;26 importorg.springframework.transaction.annotation.Transactional;27 importorg.springframework.util.Assert;28

29 importjava.lang.reflect.ParameterizedType;30

31 importcom.agen.dao.GenericDao;32 importcom.github.pagehelper.PageInfo;33

34 public class GenericDaoImpl implements GenericDao{35 /**

36 * 不建议直接使用37 */

38 @Autowired39 privateSessionFactory sessionFactory;40

41 publicSession getSession() {42 //需要开启事物,才能得到CurrentSession

43 returnsessionFactory.getCurrentSession();44 }45

46

47 protected ClassentityClass;48

49 protectedClass getEntityClass() {50 if (entityClass == null) {51 if(((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments().length > 0) {52 entityClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];53 }54 }55 returnentityClass;56 }57

58 publicSessionFactory getSessionFactory() {59 returnsessionFactory;60 }61

62 public voidsetSessionFactory(SessionFactory sessionFactory) {63 this.sessionFactory =sessionFactory;64 }65

66 @Override67 publicCriteria createCriteria() {68 returngetSession().createCriteria(getEntityClass());69 }70

71

72 @Override73 public voidsave(T t) {74 this.getSession().save(t);75 }76

77 @Override78 public voidsaveOrUpdate(T t) {79 Assert.notNull(t);80 this.getSession().saveOrUpdate(t);81 }82

83 @Override84 publicT load(PK id) {85 Assert.notNull(id);86 T load = (T) this.getSession().load(getEntityClass(), id);87 returnload;88 }89

90 @Override91 publicT get(PK id) {92 Assert.notNull(id);93 T load = (T) this.getSession().get(getEntityClass(), id);94 returnload;95 }96

97 @Override98 public booleancontains(T t) {99 Assert.notNull(t);100 return this.getSession().contains(t);101 }102

103 @Override104 public voiddelete(T t) {105 Assert.notNull(t);106 this.getSession().delete(t);107 }108

109 @Override110 public booleandeleteById(PK Id) {111 Assert.notNull(Id);112 T t =get(Id);113 if (t == null) return false;114 delete(t);115 return true;116 }117

118 @Override119 public void deleteAll(Collectionentities) {120 Assert.notNull(entities);121 for(Object entity : entities) {122 this.getSession().delete(entity);123 }124 }125

126 @Override127 public voidqueryHql(String hqlString, Object... values) {128 Query query = this.getSession().createQuery(hqlString);129 if (values != null) {130 for (int i = 0; i < values.length; i++) {131 query.setParameter(i, values[i]);132 }133 }134 query.executeUpdate();135 }136

137 /**

138 * 根据hql 和 map集合中的数据 进行相对应的 insert update delete操作139 *@paramhqlString140 *@paramparas141 */

142 public void queryHql(String hqlString, Mapparas) {143 Query query = this.getSession().createQuery(hqlString);144 if (paras != null) {145 for (Entryen : paras.entrySet()) {146 query.setParameter(en.getKey(), en.getValue());147 }148 }149 query.executeUpdate();150 }151

152 @Override153 public voidquerySql(String sqlString, Object... values) {154 Query query = this.getSession().createSQLQuery(sqlString);155 if (values != null) {156 for (int i = 0; i < values.length; i++) {157 query.setParameter(i, values[i]);158 }159 }160 query.executeUpdate();161 }162

163 @Override164 publicT getByHQL(String hqlString, Object... values) {165 Query query = this.getSession().createQuery(hqlString);166 if (values != null) {167 for (int i = 0; i < values.length; i++) {168 query.setParameter(i, values[i]);169 }170 }171 return(T) query.uniqueResult();172 }173

174 @Override175 public ListgetListByHQL(String hqlString, Object... values) {176 Query query = this.getSession().createQuery(hqlString);177 if (values != null) {178 for (int i = 0; i < values.length; i++) {179 query.setParameter(i, values[i]);180 }181 }182 returnquery.list();183 }184

185 @Override186 public ListgetListBySQL(String sqlString, Object... values) {187 Query query = this.getSession().createSQLQuery(sqlString);188 if (values != null) {189 for (int i = 0; i < values.length; i++) {190 query.setParameter(i, values[i]);191 }192 }193 returnquery.list();194 }195

196 @Override197 public voidrefresh(T t) {198 this.getSession().refresh(t);199 }200

201 @Override202 public voidupdate(T t) {203 this.getSession().update(t);204 }205

206 @Override207 publicLong countByHql(String hql, Object... values) {208 Query query = this.getSession().createQuery(hql);209 if (values != null) {210 for (int i = 0; i < values.length; i++) {211 query.setParameter(i, values[i]);212 }213 }214 return(Long) query.uniqueResult();215 }216

217 @Override218 public PageInfo findPageByHql(String hql, String countHql, int pageNo, intpageSize, Object... values) {219 PageInfo retValue = new PageInfo();220 Query query = this.getSession().createQuery(hql);221 if (values != null) {222 for (int i = 0; i < values.length; i++) {223 query.setParameter(i, values[i]);224 }225 }226 int currentPage = pageNo > 1 ? pageNo : 1;227 retValue.setPages(currentPage);228 retValue.setPageSize(pageSize);229 if (countHql == null) {230 ScrollableResults results =query.scroll();231 results.last();232 retValue.setTotal(results.getRowNumber() + 1);233 } else{234 Long count =countByHql(countHql, values);235 retValue.setTotal(count.intValue());236 }237 List itemList = query.setFirstResult((currentPage - 1) *pageSize).setMaxResults(pageSize).list();238 if (itemList == null) {239 itemList = new ArrayList();240 }241 retValue.setList(itemList);242 returnretValue;243 }244

245

246 @Override247 public voidmerge(T entity) {248 //TODO Auto-generated method stub

249 getSession().merge(entity);250 }251

252 @Override253 public booleanexists(PK id) {254 return null !=get(id);255 }256

257 @Override258 public intcountAll() {259 Criteria criteria =createCriteria();260 returnInteger.valueOf(criteria.setProjection(Projections.rowCount()).uniqueResult().toString());261 }262

263 @Override264 public intcountAll(Criteria criteria) {265 criteria.setProjection(null);266 returnInteger.valueOf(criteria.setProjection(Projections.rowCount()).uniqueResult().toString());267 }268

269 @Override270 public Listlist(Criteria criteria) {271 returncriteria.list();272 }273

274 @Override275 public Listlist(DetachedCriteria criteria) {276 return (List) list(criteria.getExecutableCriteria(getSession()));277 }278

279 @Override280 public List list(String orderBy, booleanisAsc) {281 Criteria criteria =createCriteria();282 if(isAsc) {283 criteria.addOrder(Order.asc(orderBy));284 } else{285 criteria.addOrder(Order.desc(orderBy));286 }287 returncriteria.list();288 }289

290 @Override291 public Listlist(String propertyName, Object value) {292 Criterion criterion = Restrictions.like(propertyName, "%"+ value +"%");293 returnlist(criterion);294 }295

296

297 @Override298 public Listlist(Criterion criterion) {299 Criteria criteria =createCriteria();300 criteria.add(criterion);301 returncriteria.list();302 }303

304 @Override305 public Listlist(Criterion... criterions) {306 returncreateCriteria(criterions).list();307 }308

309 @Override310 publicT uniqueResult(String propertyName, Object value) {311 Criterion criterion =Restrictions.eq(propertyName, value);312 return(T) createCriteria(criterion).uniqueResult();313 }314

315 @Override316 publicT uniqueResult(Criterion... criterions) {317 Criteria criteria =createCriteria(criterions);318 returnuniqueResult(criteria);319 }320

321 @Override322 publicT uniqueResult(Criteria criteria) {323 return(T) criteria.uniqueResult();324 }325

326 @Override327 publicInteger uniqueResultInt(Criteria criteria) {328 return(Integer) criteria.uniqueResult();329 }330

331

332 @Override333 publicCriteria distinct(Criteria criteria) {334 criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);335 returncriteria;336 }337

338 @Override339 public voidflush() {340 getSession().flush();341 }342

343 @Override344 public voidclear() {345 getSession().clear();346 }347

348

349 @Override350 publicCriteria createCriteria(Criterion... criterions) {351 Criteria criteria =createCriteria();352 for(Criterion c : criterions) {353 criteria.add(c);354 }355 returncriteria;356 }357

358 @Override359 public List findPage(Criteria criteria, int pageNo, intpageSize) {360 criteria.setFirstResult((pageNo - 1) *pageSize);361 criteria.setMaxResults(pageSize);362 returnlist(criteria);363 }364

365 @Override366 public PageInfo findQuery(Criteria criteria, int pageNo, intpageSize) {367 try{368 Assert.isTrue(pageNo >= 1, "pageNO should start from 1");369 while(criteria instanceofSubcriteria){370 criteria =((Subcriteria)criteria).getParent();371 }372 //拆分order by子句

373 while(criteria instanceofSubcriteria){374 criteria =((Subcriteria)criteria).getParent();375 }376 Field field = CriteriaImpl.class.getDeclaredField("orderEntries");377 field.setAccessible(true);378 List> orderEntrys = (List>) field.get(criteria);379 field.set(criteria, newArrayList());380 //统计总数

381 long totalCount =countAll(criteria);382 criteria.setProjection(null);383 //统计完了再把order by子句加上 这样保证了sql语句不会出错

384 field.set(criteria, orderEntrys);385 List list =findPage(criteria, pageNo, pageSize);386 if (totalCount < 1) {387 return new PageInfo();388 }389 PageInfo page = new PageInfo();390 page.setPageNum(pageNo);391 page.setTotal(totalCount);392 page.setPages((int) (totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1));393 page.setPageSize(pageSize);394 page.setList(list);395 returnpage;396 } catch(Exception e) {397 //TODO: handle exception

398 e.printStackTrace();399 throw new QueryException("查询出错!");400 }401

402 }403

404 @Override405 public List findQuery(String hql, int pageNo, int pageSize, Map, ?>map) {406 //TODO Auto-generated method stub

407 if(null == hql) return null;408 Query query =getSession().createQuery(hql);409 for (Entry, ?>en : map.entrySet()) {410 query.setParameter(en.getKey().toString(), en.getValue());411 }412 if(pageNo > 0) query.setFirstResult(pageNo);413 if(pageSize > 0) query.setFirstResult(pageSize);414 returnquery.list();415 }416

417 @Override418 public ListfindAll() {419 //TODO Auto-generated method stub

420 returncreateCriteria().list();421 }422 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值