首页>代码>Struts2.3.5+Hibernate3+Spring3.1基于注解实现的多文件上传,下载>/FileUploadDownLoad/FileUploadDownLoad/src/cn/gov/csdn/base/dao/impl/BaseDaoImpl.java
package cn.gov.csdn.base.dao.impl; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.SessionFactory; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import cn.gov.csdn.base.dao.BaseDao; import cn.gov.csdn.base.util.ValidateUtil; import cn.gov.csdn.base.vo.Paginater; /** * * File: BaseDaoImpl抽象类 * Author: admin * Version: 1.0 * Date: 2014/01/02 15:33 * Modify: * Description:用于继承 * Copyright csdn */ public abstract class BaseDaoImpl<T> implements BaseDao<T> { private Class clazz; /* 注入SessionFactory */ @Resource private SessionFactory sf; public BaseDaoImpl() { ParameterizedType type = (ParameterizedType) this.getClass() .getGenericSuperclass(); clazz = (Class) type.getActualTypeArguments()[0]; } public void saveEntity(T t) { sf.getCurrentSession().save(t); } public void saveOrUpdateEntity(T t) { sf.getCurrentSession().saveOrUpdate(t); } public void updateEntity(T t) { sf.getCurrentSession().update(t); } public void deleteEntity(T t) { sf.getCurrentSession().delete(t); } public SessionFactory getSf() { return sf; } public void setSf(SessionFactory sf) { this.sf = sf; } /** * 按照hql语句批量写操作 */ public void batchEntityByHQL(String hql, Object... objects) { Query q = sf.getCurrentSession().createQuery(hql); for (int i = 0; i < objects.length; i++) { q.setParameter(i, objects[i]); } q.executeUpdate(); } public T loadEntity(Integer id) { return (T) sf.getCurrentSession().load(clazz, id); } public T getEntity(Integer id) { return (T) sf.getCurrentSession().get(clazz, id); } public List<T> findAllEntities() { String hql = "from " + clazz.getSimpleName(); return findEntityByHQL(hql); } // 执行原生sql语句 protected void executeSQL(String sql, Object... objects) { SQLQuery q = sf.getCurrentSession().createSQLQuery(sql); for (int i = 0; i < objects.length; i++) { q.setParameter(i, objects[i]); } q.executeUpdate(); } protected List<T> findEntityByHQL(String hql, Object... objects) { Query q = sf.getCurrentSession().createQuery(hql); for (int i = 0; i < objects.length; i++) { q.setParameter(i, objects[i]); } return q.list(); } // 按照sql查询 protected List<T> findObjectBySQL(String sql, Object... objects) { SQLQuery q = sf.getCurrentSession().createSQLQuery(sql); for (int i = 0; i < objects.length; i++) { q.setParameter(i, objects[i]); } // 给查询添加实体 q.addEntity(clazz); return q.list(); } // 单值检索,查询结果有且仅有一条记录 protected Object uniqueResult(String hql, Object... objects) { Query q = sf.getCurrentSession().createQuery(hql); for (int i = 0; i < objects.length; i++) { q.setParameter(i, objects[i]); } return q.uniqueResult(); } /** * 开启hibernate二级缓存的查询缓存版本 hibernate二级缓存共有四部分,除了用于缓存hql的查询缓存 * 剩下三部分是:类缓存,集合缓存,更新时间戳缓存 */ @SuppressWarnings("rawtypes") protected List batchEntityByHQLCacheable(String hql, Object... objects) { Query q = getSf().getCurrentSession().createQuery(hql); for (int i = 0; i < objects.length; i++) { q.setParameter(i, objects[i]); } q.setCacheable(true); return q.list(); } // 解决hibernate的a different object with the same identifier // value was already associated with the session问题 // saveOrUpdate之前先clear(); public void saveOrUpClearFirst(T t) { sf.getCurrentSession().clear(); sf.getCurrentSession().saveOrUpdate(t); } /** * 分页,模糊查询目前版本没有实现。等下个版本。 */ public Paginater findPaging(int pageNo, int pageSize, Object... objects) { if (objects == null) { return findPaging(pageNo, pageSize, null, null); } else { List<Criterion> lst = new ArrayList<Criterion>(); Criterion criterion = Restrictions.eq(objects[0].toString(), objects[1]); lst.add(criterion); return findPaging(pageNo, pageSize, lst, null); } } protected Paginater findPaging(int pageNo, int pageSize, List<Criterion> crits, List<Order> orders) { Criteria criteria = sf.getCurrentSession().createCriteria(clazz); if (ValidateUtil.isValid(crits)) { // 拼装查询条件 for (int i = 0; i < crits.size(); i++) { criteria.add(crits.get(i)); } } if (ValidateUtil.isValid(orders)) { // 拼装排序条件 for (int i = 0; i < orders.size(); i++) { criteria.addOrder(orders.get(i)); } } else { criteria.addOrder(Order.desc("id")); } int currentPage = pageNo == 0 ? 1 : pageNo; // 获取根据条件分页查询的总行数 int count = ((Long) criteria.setProjection(Projections.rowCount()) .uniqueResult()).intValue(); // 查完条数记得清空Projection criteria.setProjection(null); int totalPage = count % pageSize == 0 ? count / pageSize : count / pageSize + 1; int start = (currentPage - 1) * pageSize; // 进行查库 List<T> list = criteria.setFirstResult(start).setMaxResults(pageSize) .list(); // 封装分页对象 Paginater paginater = new Paginater(); paginater.setPageSize(pageSize); paginater.setCurrentPage(currentPage); paginater.setTotalNum(count); paginater.setTotalPage(totalPage); paginater.setRoot(list); if (currentPage == 1) { paginater.setFirstPage(true); paginater.setHasPreviousPage(false); } else { paginater.setFirstPage(false); paginater.setHasPreviousPage(true); } if (currentPage == totalPage) { paginater.setHasNextPage(false); } else { paginater.setHasNextPage(true); } if (totalPage < currentPage) { paginater.setHasPreviousPage(true); } else { paginater.setHasNextPage(false); } return paginater; } }

597117933 LV9
2020年12月17日
17704627276 LV17
2020年10月19日
annazhang LV29
2020年7月19日
lwp011 LV27
2020年7月7日
1404002391 LV12
2020年5月20日
912299793 LV21
2020年5月15日
angujj LV1
2020年3月23日
13148918399 LV9
2019年12月10日
592381035 LV1
2019年12月5日
hzhsh0223 LV18
2019年9月18日