package com.wiseweb.core.dao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
@SuppressWarnings("unchecked")
public abstract class HibernateDAO <T, P extends Serializable> {
@Autowired
private SessionFactory sessionFactory;
/**
* 获取sessionFactory工厂
* @return
*/
protected SessionFactory getSessionFactory(){
return this.sessionFactory;
}
/**
* 获取数据库session会话
* @return
*/
protected Session getSession(){
return this.sessionFactory != null ? this.sessionFactory.getCurrentSession() : null;
}
/**
* 保存数据库
* @param object
* @throws Exception
*/
public void save(T object) throws Exception{
if (getSession() != null) {
getSession().save(object);
}
}
/**
* 删除数据库
* @param object
* @throws Exception
*/
public void delete(T object) throws Exception{
if (getSession() != null) {
getSession().delete(object);
}
}
/**
* 更新数据库
* @param object
* @throws Exception
*/
public void update(T object) throws Exception{
if (getSession() != null) {
getSession().update(object);
}
}
/**
* 根据id查询
* @param tClass
* @param id
* @return
* @throws Exception
*/
public T get(Class<T> tClass, P id) throws Exception{
if (getSession() != null) {
return (T) getSession().get(tClass, id);
}
return null;
}
/**
* 根据sql语句做相应的查询
* @param hql
* @return
* @throws Exception
*/
public List<T> createQueryByHql(String hql) throws Exception{
List<T> list = new ArrayList<T>();
if (hql != null || !hql.equals("")) {
if (getSession() != null) {
list = getSession().createQuery(hql).list();
}
}
return list;
}
/**
* 分页查询
* @param hql
* @param pageNum
* @param pageSize
* @return
* @throws Exception
*/
public List<T> createQueryByHql(String hql, int pageNum, int pageSize) throws Exception{
List<T> list = new ArrayList<T>();
if (hql != null || !hql.equals("")) {
if (getSession() != null) {
Query query = getSession().createQuery(hql);
query.setFirstResult((pageNum - 1) * pageSize);
query.setMaxResults(pageSize);
list = query.list();
}
}
return list;
}
}