package cn.itsource.crm.dao; import java.io.Serializable; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import java.util.Map; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import cn.itsource.crm.query.BaseQuery; import cn.itsource.crm.utils.PageResult; public class BaseDao<T> extends HibernateDaoSupport { public void save(T t) { getHibernateTemplate().save(t); } public void update(T t) { getHibernateTemplate().update(t); } /** * * @param Serializable * id:Hibernate主键类型只要实现Serializable接口就可以使用 Long,String */ public void delete(Class<T> entityClass, Serializable id) { T t = get(entityClass, id); if (t != null) getHibernateTemplate().delete(t); } public T get(Class<T> entityClass, Serializable id) { return getHibernateTemplate().get(entityClass, id); } public List<T> getAll(Class<T> entityClass) { return getHibernateTemplate().loadAll(entityClass); // return getHibernateTemplate().find("from " + entityClass.getName()); } public PageResult<T> findPageResult(final BaseQuery baseQuery) { // System.out.println("hql:" + baseQuery.getHql()); // System.out.println("countHql:" + baseQuery.getCountHql()); // System.out.println("param:" + baseQuery.getParamList()); // 获取到原生Hibernate.Session对象做查询 // 单例是否对应一个请求 // getSession();// 单例 // getSessionFactory().openSession();// 多例 // getSessionFactory().getCurrentSession();// 单例 // 上面获取的session都必须自己关闭,都不用 // 下面都会自动关闭session.由spring关闭的 // getHibernateTemplate().executeFind(action)// 多例 // getHibernateTemplate().executeWithNewSession(action)// 多例 /******************** 必须使用Native的 *********************/ // getHibernateTemplate().executeWithNativeSession(action)// 单例 // 1.count查询 Long count = getHibernateTemplate().executeWithNativeSession( new HibernateCallback<Long>() { // 由spring把session注入进来 public Long doInHibernate(Session session) throws HibernateException, SQLException { // counthql Query query = session.createQuery(baseQuery .getCountHql()); // 加入条件 builderParam(query, baseQuery.getParamList()); return (Long) query.uniqueResult(); } }); if (count.intValue() == 0) { return new PageResult<T>(); } int currentPage = baseQuery.getCurrentPage(); int pageSize = baseQuery.getPageSize(); int totalCount = count.intValue(); final PageResult<T> pageResult = new PageResult<T>(currentPage, pageSize, totalCount); // 2.*查询 List<T> rows = getHibernateTemplate().executeWithNativeSession( new HibernateCallback<List<T>>() { public List<T> doInHibernate(Session session) throws HibernateException, SQLException { // hql Query query = session.createQuery(baseQuery.getHql()); // 加入条件 builderParam(query, baseQuery.getParamList()); // 分页:使用经过处理后的变量 int first = (pageResult.getCurrentPage() - 1) * pageResult.getPageSize(); int max = pageResult.getPageSize(); query.setFirstResult(first).setMaxResults(max); return query.list(); } }); pageResult.setRows(rows); return pageResult; } private void builderParam(Query query, List paramList) { int index = 0; for (Object object : paramList) { query.setParameter(index++, object); } } // select count(o) from Employee o where o.name=? // select o.name from Employee o where o.name=? // select o from Employee o where o.name=? // select o.name,o.age from Employee o where o.name=? public List findByHql(String hql, Object... objects) { System.out.println("hql:" + hql); System.out.println("objects:" + Arrays.toString(objects)); return getHibernateTemplate().find(hql, objects); } // 根据sql查询结果 // 目前主要做报表支撑 public List<Map> findMap(String hql, Object... params){ return getHibernateTemplate().find(hql, params); } }
最近下载更多
彭斌java LV6
2022年12月2日
wanglinddad LV55
2022年4月20日
wangyang520 LV6
2022年4月17日
487948123 LV8
2022年4月13日
crofsun LV8
2022年4月5日
7z7z7z LV5
2022年3月21日
lywang LV7
2021年12月12日
wuhaigang LV9
2021年10月20日
a1323617295 LV5
2020年12月17日
kook_82 LV9
2020年12月1日