SSH HibernateDaoImpl
来源:互联网 发布:淘宝代销下单怎么处理 编辑:程序博客网 时间:2024/05/26 22:09
package com.oa.common.hibernate;import java.io.Serializable;import java.sql.SQLException;import java.util.Collection;import java.util.List;import java.util.Map;import org.hibernate.Criteria;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.SQLQuery;import org.hibernate.Session;import org.hibernate.criterion.CriteriaSpecification;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Projections;import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.oa.common.utils.PageParam;import com.oa.common.utils.PageUtil;import com.oa.common.utils.StringUtil;/** * 扩展HibernateDaoSupport的泛型基类 * * @param <T> * 实体类型 */@SuppressWarnings("all")public class HibernateDaoImpl extends HibernateDaoSupport implements HibernateDao { /** * 删除对象 * * @param entity * 实体类 */ @Override public void delete(final Object entity) { getSession().delete(entity); } /** * 根据实体类与ID删除对象 * * @param clazz * 实体类 * @param id * 主键ID */ @Override public void delete(final Class<?> clazz, final Serializable id) { delete(get(clazz, id)); } /** * 获取所有数据 * * @param entityClass * 参数T的反射类型 */ @Override public <X> List<X> getAll(final Class<X> entityClass) { return createCriteria(entityClass).list(); } @Override public void save(Object transientInstance) { getHibernateTemplate().save(transientInstance); } @Override public void saveOrUpdate(Object transientInstance) { getHibernateTemplate().saveOrUpdate(transientInstance); } @Override public void update(Object transientInstance) { getHibernateTemplate().update(transientInstance); } @Override public Object merge(Object transientInstance) { return getHibernateTemplate().merge(transientInstance); } private boolean isNull(Serializable id) { if (id == null || id.toString().trim().length() < 1) return true; if (("Long".equals(id.getClass().getSimpleName()) || "Integer".equals(id.getClass().getSimpleName())) && Long.valueOf(id.toString()) == 0) { return true; } return false; } /** * 根据实体类与ID获得对象 * * @param clazz * 实体类 * @param id * 主键ID */ @Override public <T> T load(Class<T> entityClass, Serializable id) { if (isNull(id)) return null; return (T) getHibernateTemplate().load(entityClass, id); } /** * 根据实体类与ID获得对象 * * @param clazz * 实体类 * @param id * 主键ID */ @Override public <T> T get(Class<T> entityClass, Serializable id) { if (isNull(id)) return null; return (T) getHibernateTemplate().get(entityClass, id); } /** * HQL方式查询(不建议使用) * * @param hql * 符合HQL语法的查询语句 * @param values * 数量可变的条件值,按顺序绑定 */ public <T> List<T> queryByHQL(final String hql, final Object... values) { Query query = getSession().createQuery(hql); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return (List<T>) query.list(); } /** * HQL方式查询(建议使用) * * @param hql * 符合HQL语法的查询语句 * @param values */ public <T> List<T> queryByHQL(final String hql, final Map<String, Object> params) { Query query = getSession().createQuery(hql); if (params != null && !params.isEmpty()) { for (String key : params.keySet()) { query.setParameter(key, params.get(key)); } } return (List<T>) query.list(); } /** * SQL方式查询 * * @param sql * 符合SQL语法的查询语句 * @param values * 数量可变的条件值,按顺序绑定 */ public <T> List<T> queryBySQL(final Class<T> clazz, final String sql, final Object... values) { SQLQuery query = getSession().createSQLQuery(sql); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return (List<T>) query.addEntity(clazz).list(); } /** * 根据类型创建查询对象 * * @param clazz * 类型 */ public Criteria createCriteria(final Class clazz) { return getSession().createCriteria(clazz); } /** * 对象化查询 * * @param entityClass * 参数T的反射类型 * @param criterions * 数量可变的Criterion */ public Criteria createCriteria(final Class clazz, final Criterion... criterions) { Criteria criteria = getSession().createCriteria(clazz); for (Criterion c : criterions) { criteria.add(c); } return criteria; } public <T> List<T> findByCriteria(final DetachedCriteria detachedCriteria) { return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); return criteria.list(); } }); } // 用于分页处理 public <T> List<T> findByCriteria(final DetachedCriteria detachedCriteria, final int pageSize, final int currentPage) { // 返回记录总数 int total = this.findRowCountByCriteria(detachedCriteria); return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); if (pageSize > 0) { criteria.setMaxResults(pageSize); } if (currentPage > 0) { criteria.setFirstResult(currentPage); } criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); return criteria.list(); } }); } // 用于分页处理 public List findByCriteriaPage(final DetachedCriteria detachedCriteria, final int pageSize, final int currentPage) { return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); if (pageSize > 0) { criteria.setFirstResult((currentPage - 1) * pageSize); criteria.setMaxResults(pageSize); } criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); return criteria.list(); } }); } @Override public <T> T findOne(final String hql, final Object... params) { return (T) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query hqlQuery = session.createQuery(hql); if (params != null) { for (int i = 0; i < params.length; i++) { hqlQuery.setParameter(i, params[i]); } } return hqlQuery.setMaxResults(1).uniqueResult(); } }); } public <T> T findOneCache(final String hql, final Object... params) { return (T) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query hqlQuery = session.createQuery(hql).setCacheable(true); if (params != null) { for (int i = 0; i < params.length; i++) { hqlQuery.setParameter(i, params[i]); } } return hqlQuery.setMaxResults(1).uniqueResult(); } }); } @Override public <T> T findOneSql(final String sql, final Class<T> entityClass, final Object... params) { return (T) getHibernateTemplate().execute(new HibernateCallback() { @Override public Object doInHibernate(Session arg0) throws HibernateException, SQLException { SQLQuery sqlQuery = arg0.createSQLQuery(sql); if (params != null) { for (int i = 0; i < params.length; i++) { sqlQuery.setParameter(i, params[i]); } } if (entityClass != null) { if (Map.class.getName().equals(entityClass.getName())) { sqlQuery.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); } else { sqlQuery.addEntity(entityClass); } } return sqlQuery.setMaxResults(1).uniqueResult(); } }); } @Override public <T> List<T> findBySql(final String sql, final Class<T> entityClass, final Object... params) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session arg0) throws HibernateException, SQLException { SQLQuery sqlQuery = arg0.createSQLQuery(sql); if (params != null) { for (int i = 0; i < params.length; i++) { sqlQuery.setParameter(i, params[i]); } } if (entityClass != null) { if (Map.class.getName().equals(entityClass.getName())) { sqlQuery.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); } else { sqlQuery.addEntity(entityClass); } } return sqlQuery.list(); } }); } public int findRowCountByCriteria(final DetachedCriteria detachedCriteria) { return ((Integer) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); Integer totalCount = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult(); criteria.setProjection(null); return Integer.valueOf((totalCount == null) ? 0 : totalCount.intValue()); } })).intValue(); } public <T> List<T> findByProjectionDetachedCriteria(final DetachedCriteria detachedCriteria) { return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); criteria.setResultTransformer(CriteriaSpecification.PROJECTION); return criteria.list(); } }); } @Override public <E> void deleteCollection(Collection<E> objs) { getHibernateTemplate().deleteAll(objs); } @Override public Integer executeSql(final String sql, final Object... params) { return (Integer) getHibernateTemplate().execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createSQLQuery(sql); if (params != null) { for (int i = 0; i < params.length; i++) { query.setParameter(i, params[i]); } } return query.executeUpdate(); } }); } @Override public <T> List<T> exeHqlList(String hql, int pageSize, int currentPage) { Query query = getSession().createQuery(hql); if (pageSize > 0) { query.setFirstResult((currentPage - 1) * pageSize); query.setMaxResults(pageSize); } query.setCacheable(true); return query.list(); } @Override public <E> void saveOrUpdate(Collection<E> objs) { getHibernateTemplate().saveOrUpdateAll(objs); } @Override public void updateHqlQuery(String hql) { Query query = getSession().createQuery(hql); query.setCacheable(true); query.executeUpdate(); } @Override public <X> List<X> findByHql(String hql, Object... params) { return (List<X>) getHibernateTemplate().find(hql, params); } @Override public <T> T execute(final String hql, final Object... params) { return (T) getHibernateTemplate().execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery(hql); if (params != null) { for (int i = 0; i < params.length; i++) { query.setParameter(i, params[i]); } } return query.executeUpdate(); } }); } @Override public List findPageBySql(final String sql, final Map<String, Object> sqlParamMap) { final PageParam pageParam = PageUtil.getPageParam(); // 计算总算 if (!StringUtil.required(pageParam.getTotalSql())) { int index = PageUtil.indexOf(sql.toLowerCase(), " from "); int endIndex = PageUtil.indexOf(sql.toLowerCase(), " order "); if (endIndex == -1) { endIndex = sql.length(); } pageParam.setTotalSql("select count(*) " + sql.substring(index, endIndex)); } pageParam.setTotalRow((Integer) this.getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createSQLQuery(pageParam.getTotalSql()); if (sqlParamMap != null && sqlParamMap.size() > 0) { query.setProperties(sqlParamMap); } return StringUtil.toInt(query.setProperties(sqlParamMap).uniqueResult()); } })); // 分页数据 return this.getHibernateTemplate().executeFind(new HibernateCallback() { @Override public List doInHibernate(Session session) throws HibernateException, SQLException { SQLQuery query = session.createSQLQuery(pageParam.getOrderBy(sql)); if (sqlParamMap != null && sqlParamMap.size() > 0) { query.setProperties(sqlParamMap); } if (pageParam.getEntityClass() != null) { query.addEntity(pageParam.getEntityClass()); } else { // 预设为MAP query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); } return query.setFirstResult(pageParam.getCurrRowNum()).setMaxResults(pageParam.getPageSize()).list(); } }); } @Override public List findPageByHql(final String hql, final Object... conditions) { final PageParam pageParam = PageUtil.getPageParam(); // 计算总算 int total = 0; int index = -1; if (hql.matches("(?i)^\\s*select\\b.*")) { index = hql.toLowerCase().indexOf(" from "); } int endIndex = hql.toLowerCase().lastIndexOf(" order "); if (index == -1) { index = 0; } if (endIndex == -1) { endIndex = hql.length(); } List l = this.getHibernateTemplate().find("select count(*) " + hql.substring(index, endIndex).replaceAll("\\bfetch\\b", ""), conditions); if (l != null && l.size() > 0) { total = StringUtil.toInt(l.get(0)); } pageParam.setTotalRow(total); // 分页数据 return this.getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery(pageParam.getOrderBy(hql)); if (conditions != null && conditions.length > 0) { for (int i = conditions.length - 1; i >= 0; i--) { query.setParameter(i, conditions[i]); } } return query.setFirstResult(pageParam.getCurrRowNum()).setMaxResults(pageParam.getPageSize()).list(); } }); } @Override public <X> List<X> findByHqlCache(final String hql, final Object... params) { return getHibernateTemplate().executeFind(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { Query hqlQuery = session.createQuery(hql).setCacheable(true); if (params != null) { for (int i = 0; i < params.length; i++) { hqlQuery.setParameter(i, params[i]); } } return hqlQuery.list(); } }); } @Override public void executeLocalSql(String sql) { getSession().createSQLQuery(sql).executeUpdate(); }}
0 0
- SSH HibernateDaoImpl
- SSH...
- ssh
- ssh
- ssh
- SSH
- ssh
- SSH
- ssh
- SSH
- SSH
- SSH
- ssh
- ssh
- ssh
- SSH
- ssh
- ssh
- beego MySQL数据库连接池
- MYSQL性能优化详解(一)
- shiro中的细节问题(1)
- Windows环境下配置oracle 11gR2 Data Guard详细过程
- 剑指:从尾到头打印链表
- SSH HibernateDaoImpl
- FFmpeg的安装
- java实现图片格式转换为JPG
- Java程序如何生成Jar、exe及安装文件
- No input file specified
- head里面的内容跑到body里怎么办?
- Android中Handler简介
- 小波变换(wavelet transform)的通俗解释(二)
- 微信小程序开发--『侧边栏滑动』特效