public class BaseDao<T extends Serializable> {
protected static final Logger logger = Logger.getLogger(BaseDao.class);
private Class<T> clazz;
private String clazzName;
public BaseDao() {
// 使用反射的方式获得类名(表名)
Type type = this.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) type;
Type[] tps = pt.getActualTypeArguments();
if (tps.length > 0) {
this.clazz = (Class<T>) tps[0];
this.clazzName = clazz.getName();
}
}
}
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public Session getSession() {
return hibernateTemplate.getSessionFactory().getCurrentSession();
}
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
* 保存或更新实体类
* @param t 实体类
* @return 实体类
*/
public T saveOrUpdate(T t) {
getSession().saveOrUpdate(t);
// hibernateTemplate.saveOrUpdate(t);
return t;
}
/**
* 根据ID获取实体类
* @param id
* @return 实体类
*/
public T get(Serializable id) {
T t = (T) getSession().get(this.clazz, id);
return t;
}
/**
* 根据实体及ID获取实体类
* @param clazz
* @param id
* @return 实体类
*/
public T get(Class clazz, Serializable id) {
T t = (T) getSession().get(clazz, id);
return t;
}
/**
* 根据实体类获取所有数据
* @param entity
* @return 实体类集合
*/
public List<T> getAll(Class clazz) {
Query q = getSession().createQuery("from " + clazz.getName());
return q.list();
}
/**
* 根据实体类获取所有数据
* @param entity
* @return 实体类集合
*/
public List<T> getAll() {
Query q = getSession().createQuery("from " + clazzName);
return q.list();
}
/**
* 根据ID删除实体类
* @param id
* @return 执行条数
*/
public int del(long id) {
Query q = getSession().createQuery("delete from " + clazzName + " where id = ?");
return q.setParameter(0, id).executeUpdate();
}
/**
* 根据ID删除实体类
* @param id
* 参数为String类型
* @return 执行条数
*/
public int del(String id) {
Query q = getSession().createQuery("delete from " + clazzName + " where id = ?");
return q.setParameter(0, id).executeUpdate();
}
/**
* 根据实体类删除
* @param t
* @return 返回实体类(可作为验证)
*/
public T del(T t) {
getSession().delete(t);
return t;
}
/**
* 根据HQL查询List
* @param hql
* @return List
*/
protected List<T> find(String hql) {
Query q = getSession().createQuery(hql);
return q.list();
}
/**
* 执行HQL语句
* @param hqlString HQL
* @param values 不确定参数
*/
public void queryHql(String hqlString, Object... values) {
Query query = 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 不确定参数
*/
public void querySql(String sqlString, Object... values) {
Query query = 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 不确定参数
* @return 实体类
*/
public T getByHQL(String hqlString, Object... values) {
Query query = 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 不确定参数
* @return 实体类
*/
public T getBySQL(String sqlString, Object... values) {
Query query = 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 不确定参数
* @return List
*/
public List<T> getListByHQL(String hqlString, Object... values) {
Query query = getSession().createQuery(hqlString);
if (values != null) {
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
return query.list();
}
/**
* 根据HQL分页查询List
* @param hqlString HQL
* @param values 不确定参数
* @return List
*/
public List<T> getPageListByHQL(String hqlString, Integer pageNo, Integer pageSize, Object... values) {
Query query = getSession().createQuery(hqlString);
if (values != null) {
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
List<T> itemList = query.setFirstResult(pageNo).setMaxResults(pageSize).list();
if (itemList == null) {
itemList = new ArrayList<T>();
}
return itemList;
}
/**
* 根据SQL查询List
* @param sqlString SQL
* @param values 不确定参数
* @return List
*/
public List<T> getListBySQL(String sqlString, Object... values) {
Query query = getSession().createSQLQuery(sqlString);
if (values != null) {
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
return query.list();
}
/**
* 根据HQL获取记录数
* @param hql
* @param values 不确定参数
* @return 总数
*/
public Long countByHql(String hql, Object... values) {
hql = "select count(*) "+hql;
Query query = 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
* @param pageNo 页数
* @param pageSize 条数
* @param values 不确定参数
* @return page
*/
public Page<T> findPageByHql(String hql, int pageNo, int pageSize, Object... values) {
Page<T> retValue = new Page<T>();
Query query = 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);
Long count = countByHql(hql, 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;
}
}
hibernate Dao层
猜你喜欢
转载自blog.csdn.net/plazyj/article/details/80985386
今日推荐
周排行