标签:query page etc 封装 err delete auto rest 集合
package com.itv.launcher.util;import java.io.Serializable;import java.util.Collection;import java.util.List;/** * @ClassName: IBaseDao * @Description: Dao封装接口 * @author yz * @date 2014年6月16日17:05:17 */public interface IBaseDao<T, ID extends Serializable> { /** * <保存实体> * <完整保存实体> * @param t 实体参数 */ public abstract void save(T t); /** * <保存或者更新实体> * @param t 实体 */ public abstract void saveOrUpdate(T t); /** * <load> * <加载实体的load方法> * @param id 实体的id * @return 查询出来的实体 */ public abstract T load(ID id); /** * <get> * <查找的get方法> * @param id 实体的id * @return 查询出来的实体 */ public abstract T get(ID id); /** * <contains> * @param t 实体 * @return 是否包含 */ public abstract boolean contains(T t); /** * <delete> * <删除表中的t数据> * @param t 实体 */ public abstract void delete(T t); /** * <根据ID删除数据> * @param Id 实体id * @return 是否删除成功 */ public abstract boolean deleteById(ID Id); /** * <删除所有> * @param entities 实体的Collection集合 */ public abstract void deleteAll(Collection<T> entities); /** * <执行Hql语句> * @param hqlString hql * @param values 不定参数数组 */ public abstract void queryHql(String hqlString, Object... values); /** * <执行Sql语句> * @param sqlString sql * @param values 不定参数数组 */ public abstract void querySql(String sqlString, Object... values); /** * <根据HQL语句查找唯一实体> * @param hqlString HQL语句 * @param values 不定参数的Object数组 * @return 查询实体 */ public abstract T getByHQL(String hqlString, Object... values); /** * <根据SQL语句查找唯一实体> * @param sqlString SQL语句 * @param values 不定参数的Object数组 * @return 查询实体 */ public abstract T getBySQL(String sqlString, Object... values); /** * <根据HQL语句,得到对应的list> * @param hqlString HQL语句 * @param values 不定参数的Object数组 * @return 查询多个实体的List集合 */ public abstract List<T> getListByHQL(String hqlString, Object... values); /** * <根据SQL语句,得到对应的list> * @param sqlString HQL语句 * @param values 不定参数的Object数组 * @return 查询多个实体的List集合 */ public abstract List<T> getListBySQL(String sqlString, Object... values); /** * 由sql语句得到List * @param sql * @param map * @param values * @return List */ public List findListBySql(final String sql, final RowMapper map, final Object... values); /** * <refresh> * @param t 实体 */ public abstract void refresh(T t); /** * <update> * @param t 实体 */ public abstract void update(T t); /** * <根据HQL得到记录数> * @param hql HQL语句 * @param values 不定参数的Object数组 * @return 记录总数 */ public abstract Long countByHql(String hql, Object... values); /** * <HQL分页查询> * @param hql HQL语句 * @param countHql 查询记录条数的HQL语句 * @param pageNo 下一页 * @param pageSize 一页总条数 * @param values 不定Object数组参数 * @return PageResults的封装类,里面包含了页码的信息以及查询的数据List集合 */ public abstract PageResults<T> findPageByFetchedHql(String hql, String countHql, int pageNo, int pageSize, Object... values);}package com.itv.launcher.util;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.math.BigDecimal;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Timestamp;import java.sql.Types;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.List;import org.hibernate.Query;import org.hibernate.ScrollableResults;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.jdbc.Work;import org.springframework.beans.factory.annotation.Autowired;/** * @ClassName: BaseDao * @Description: baseDao实现 * @author yz * @date 2014年6月16日17:09:52 * */@SuppressWarnings({ "rawtypes", "unchecked" })public class BaseDao<T, ID extends Serializable> implements IBaseDao<T, ID> { @Autowired private SessionFactory sessionFactory; protected Class<T> entityClass; public BaseDao() { } protected Class getEntityClass() { if (entityClass == null) { entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } return entityClass; } /** * <保存实体> * <完整保存实体> * @param t 实体参数 * @see com.itv.launcher.util.IBaseDao#save(java.lang.Object) */ @Override public void save(T t) { this.getSession().save(t); } /** * <保存或者更新实体> * @param t 实体 * @see com.itv.launcher.util.IBaseDao#saveOrUpdate(java.lang.Object) */ @Override public void saveOrUpdate(T t) { this.getSession().saveOrUpdate(t); } /** * <load> * <加载实体的load方法> * @param id 实体的id * @return 查询出来的实体 * @see com.itv.launcher.util.IBaseDao#load(java.io.Serializable) */ @Override public T load(ID id) { T load = (T) this.getSession().load(getEntityClass(), id); return load; } /** * <get> * <查找的get方法> * @param id 实体的id * @return 查询出来的实体 * @see com.itv.launcher.util.IBaseDao#get(java.io.Serializable) */ @Override public T get(ID id) { T load = (T) this.getSession().get(getEntityClass(), id); return load; } /** * <contains> * @param t 实体 * @return 是否包含 * @see com.itv.launcher.util.IBaseDao#contains(java.lang.Object) */ @Override public boolean contains(T t) { return this.getSession().contains(t); } /** * <delete> * <删除表中的t数据> * @param t 实体 * @see com.itv.launcher.util.IBaseDao#delete(java.lang.Object) */ @Override public void delete(T t) { this.getSession().delete(t); } /** * <根据ID删除数据> * @param Id 实体id * @return 是否删除成功 * @see com.itv.launcher.util.IBaseDao#deleteById(java.io.Serializable) */ @Override public boolean deleteById(ID Id) { T t = get(Id); if(t == null){ return false; } delete(t); return true; } /** * <删除所有> * @param entities 实体的Collection集合 * @see com.itv.launcher.util.IBaseDao#deleteAll(java.util.Collection) */ @Override public void deleteAll(Collection<T> entities) { for(Object entity : entities) { this.getSession().delete(entity); } } /** * <执行Hql语句> * @param hqlString hql * @param values 不定参数数组 * @see com.itv.launcher.util.IBaseDao#queryHql(java.lang.String, java.lang.Object[]) */ @Override public void queryHql(String hqlString, Object... values) { Query query = this.getSession().createQuery(hqlString); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } query.executeUpdate(); } /** * <执行Sql语句> * @param sqlString sql * @param values 不定参数数组 * @see com.itv.launcher.util.IBaseDao#querySql(java.lang.String, java.lang.Object[]) */ @Override public void querySql(String sqlString, Object... values) { Query query = this.getSession().createSQLQuery(sqlString); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } query.executeUpdate(); } /** * <根据HQL语句查找唯一实体> * @param hqlString HQL语句 * @param values 不定参数的Object数组 * @return 查询实体 * @see com.itv.launcher.util.IBaseDao#getByHQL(java.lang.String, java.lang.Object[]) */ @Override public T getByHQL(String hqlString, Object... values) { Query query = this.getSession().createQuery(hqlString); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return (T) query.uniqueResult(); } /** * <根据SQL语句查找唯一实体> * @param sqlString SQL语句 * @param values 不定参数的Object数组 * @return 查询实体 * @see com.itv.launcher.util.IBaseDao#getBySQL(java.lang.String, java.lang.Object[]) */ @Override public T getBySQL(String sqlString, Object... values) { Query query = this.getSession().createSQLQuery(sqlString); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return (T) query.uniqueResult(); } /** * <根据HQL语句,得到对应的list> * @param hqlString HQL语句 * @param values 不定参数的Object数组 * @return 查询多个实体的List集合 * @see com.itv.launcher.util.IBaseDao#getListByHQL(java.lang.String, java.lang.Object[]) */ @Override public List<T> getListByHQL(String hqlString, Object... values) { Query query = this.getSession().createQuery(hqlString); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return query.list(); } /** * <根据SQL语句,得到对应的list> * @param sqlString HQL语句 * @param values 不定参数的Object数组 * @return 查询多个实体的List集合 * @see com.itv.launcher.util.IBaseDao#getListBySQL(java.lang.String, java.lang.Object[]) */ @Override public List<T> getListBySQL(String sqlString, Object... values ) { Query query = this.getSession().createSQLQuery(sqlString); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return query.list(); } /** * 由sql语句得到List * @param sql * @param map * @param values * @return List * @see com.itv.launcher.util.IBaseDao#findListBySql(java.lang.String, com.itv.launcher.util.RowMapper, java.lang.Object[]) */ @Override public List findListBySql(final String sql, final RowMapper map, final Object... values) { final List list = new ArrayList(); // 执行JDBC的数据批量保存 Work jdbcWork = new Work() { public void execute(Connection connection) throws SQLException { PreparedStatement ps = null; ResultSet rs = null; try { ps = connection.prepareStatement(sql); for (int i = 0; i < values.length; i++) { setParameter(ps, i, values[i]); } rs = ps.executeQuery(); int index = 0; while (rs.next()) { Object obj = map.mapRow(rs, index++); list.add(obj); } } finally { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } } } }; this.getSession().doWork(jdbcWork); return list; } /** * <refresh> * @param t 实体 * @see com.itv.launcher.util.IBaseDao#refresh(java.lang.Object) */ @Override public void refresh(T t) { this.getSession().refresh(t); } /** * <update> * @param t 实体 * @see com.itv.launcher.util.IBaseDao#update(java.lang.Object) */ @Override public void update(T t) { this.getSession().update(t); } /** * <根据HQL得到记录数> * @param hql HQL语句 * @param values 不定参数的Object数组 * @return 记录总数 * @see com.itv.launcher.util.IBaseDao#countByHql(java.lang.String, java.lang.Object[]) */ @Override public Long countByHql(String hql, Object... values) { Query query = this.getSession().createQuery(hql); if(values != null){ for(int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return (Long) query.uniqueResult(); } /** * <HQL分页查询> * @param hql HQL语句 * @param countHql 查询记录条数的HQL语句 * @param pageNo 下一页 * @param pageSize 一页总条数 * @param values 不定Object数组参数 * @return PageResults的封装类,里面包含了页码的信息以及查询的数据List集合 * @see com.itv.launcher.util.IBaseDao#findPageByFetchedHql(java.lang.String, java.lang.String, int, int, java.lang.Object[]) */ @Override public PageResults<T> findPageByFetchedHql(String hql, String countHql, int pageNo, int pageSize, Object... values) { PageResults<T> retValue = new PageResults<T>(); Query query = this.getSession().createQuery(hql); if(values != null){ for(int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } int currentPage = pageNo > 1 ? pageNo : 1; retValue.setCurrentPage(currentPage); retValue.setPageSize(pageSize); if (countHql == null) { ScrollableResults results = query.scroll(); results.last(); retValue.setTotalCount(results.getRowNumber() + 1);// 设置总记录数 } else { Long count = countByHql(countHql, values); retValue.setTotalCount(count.intValue()); } retValue.resetPageNo(); List<T> itemList = query.setFirstResult((currentPage - 1) * pageSize).setMaxResults(pageSize).list(); if (itemList == null) { itemList = new ArrayList<T>(); } retValue.setResults(itemList); return retValue; } /** * @return the sessionFactory */ public SessionFactory getSessionFactory() { return sessionFactory; } /** * @param sessionFactory the sessionFactory to set */ public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } /** * * @return session */ public Session getSession() { //需要开启事物,才能得到CurrentSession return sessionFactory.getCurrentSession(); } /** * * 设置每行批处理参数 * * @param ps * @param pos ?占位符索引,从0开始 * @param data * @throws SQLException * @see [类、类#方法、类#成员] */ private void setParameter(PreparedStatement ps, int pos, Object data) throws SQLException { if (data == null) { ps.setNull(pos + 1, Types.VARCHAR); return; } Class dataCls = data.getClass(); if (String.class.equals(dataCls)) { ps.setString(pos + 1, (String)data); } else if (boolean.class.equals(dataCls)) { ps.setBoolean(pos + 1, ((Boolean)data)); } else if (int.class.equals(dataCls)) { ps.setInt(pos + 1, (Integer)data); } else if (double.class.equals(dataCls)) { ps.setDouble(pos + 1, (Double)data); } else if (Date.class.equals(dataCls)) { Date val = (Date)data; ps.setTimestamp(pos + 1, new Timestamp(val.getTime())); } else if (BigDecimal.class.equals(dataCls)) { ps.setBigDecimal(pos + 1, (BigDecimal)data); } else { // 未知类型 ps.setObject(pos + 1, data); } }}package com.itv.launcher.util;import java.util.List;/** * 分页封装类 * 用于做分页查询的基础类,封装了一些分页的相关属性 * @author 闫洲 * @version v1.0 * @param <T> */public class PageResults<T> { // 下一页 private int pageNo; // 当前页 private int currentPage; // 每页个个数 private int pageSize; // 总条数 private int totalCount; // 总页数 private int pageCount; // 记录 private List<T> results; public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getPageNo() { if (pageNo <= 0) { return 1; } else{ return pageNo > pageCount ? pageCount : pageNo; } } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public List<T> getResults() { return results; } public void setResults(List<T> results) { this.results = results; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize <= 0 ? 10 : pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public void resetPageNo() { pageNo = currentPage + 1; pageCount = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1; }}package com.itv.launcher.util;import java.sql.ResultSet;import java.sql.SQLException;/** * RowMapper * @author yanzhou * @version v1.0 */public interface RowMapper{ public Object mapRow(ResultSet rs, int index) throws SQLException;}标签:query page etc 封装 err delete auto rest 集合
原文地址:http://www.cnblogs.com/sxf20/p/6745175.html