首页>代码>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 LV8
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日