baseDAO ,封装了基本的增删改查方法和分页查询
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.jr.sys.exam.dao.IBase;
public class BaseDAO<T> implements IBase<T> {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession(){
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("rawtypes")
private Class Tclass;
@SuppressWarnings("rawtypes")
public Class getTclass() {
if(Tclass == null){
Type type = this.getClass().getGenericSuperclass();
ParameterizedType type2 = (ParameterizedType) type;
Type[] types = type2.getActualTypeArguments();
Tclass = (Class<?>) types[0];
}
return Tclass;
}
@SuppressWarnings("rawtypes")
public void setTclass(Class tclass) {
Tclass = tclass;
}
@SuppressWarnings("rawtypes")
public BaseDAO() {
Type type = this.getClass().getGenericSuperclass();
if(type.toString().indexOf("BaseDAO") != -1){
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setTclass((Class) types[0]);
}else{
type = ((Class) type).getGenericSuperclass();
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setTclass((Class) types[0]);
}
}
public BaseDAO(SessionFactory sessionFactory, Class tclass) {
super();
this.sessionFactory = sessionFactory;
Tclass = tclass;
}
@Override
public void save(T t) {
// TODO Auto-generated method stub
getSession().save(t);
}
@Override
public void update(T t) {
// TODO Auto-generated method stub
getSession().update(t);
}
@Override
public int save(String hql, Object[] params) {
Query query = this.getSession().createQuery(hql);
for(int i=0;i<params.length;i++){
query.setParameter(i, params[i]);
}
return query.executeUpdate();
}
//删除
@Override
public void delete(T t) {
// TODO Auto-generated method stub
getSession().delete(t);
}
@Override
public void deleteById(String hql, Object[] params) {
Query query = (Query) this.getSession().createQuery(hql);
for(int i = 0; i<params.length; i++){
query.setParameter(i, params[i]);
}
query.executeUpdate();
}
@Override
public int update(String hql, Object[] params) {
Query query = this.getSession().createQuery(hql);
if(params == null){
return query.executeUpdate();
}
for(int i=0;i<params.length ;i++){
query.setParameter(i, params[i]);
}
return query.executeUpdate();
}
//通过id得到对象
@SuppressWarnings("unchecked")
@Override
public T get(Serializable id) {
// TODO Auto-generated method stub
return (T) getSession().get(getTclass(), id);
}
//懒加载
@SuppressWarnings("unchecked")
@Override
public T load(Serializable id) {
// TODO Auto-generated method stub
return (T) getSession().load(getTclass(), id);
}
@SuppressWarnings({ "unchecked", "null" })
@Override
public List<T> listNotIn(String hql, Object[] params) {
Query query = this.getSession().createSQLQuery(hql).addEntity(Tclass);
List<T> list = null;
if(null != params || params.length != 0){
for(int i=0;i<params.length;i++){
System.out.println("params: " + params[i]);
query.setParameter(i, params[i]);
}
}
list = query.list();
return list;
}
@SuppressWarnings("unchecked")
@Override
public List<T> getByHqlNotIn(String hql, Object[] params) {
System.out.println("Tclass:" + Tclass);
Query query = this.getSession().createSQLQuery(hql).addEntity(Tclass);
List<T> list = null;
for(int i=0;i<params.length;i++){
query.setParameter(i, params[i]);
}
list = query.list();
return list;
}
//获得所有的对象
@SuppressWarnings("unchecked")
@Override
public List<T> listAll() {
String hql = "from " + getTclass().getSimpleName();
return this.getSession().createQuery(hql).list();
}
/**
* 同类分页
*
* @param int firstResult 从第几条开始
* @param int maxResults 要取几条
*/
@SuppressWarnings("unchecked")
@Override
public List<T> listFenYe(int firstResult, int maxResults) {
String hql = "from " + getTclass().getSimpleName();
Query query = this.getSession().createQuery(hql).setMaxResults(maxResults).setFirstResult(firstResult);
return query.list();
}
@SuppressWarnings({ "unchecked", "unused", "null" })
@Override
public List<T> listFenYeNotIn(int firstResult, int maxResults, String hql,
Object[] params) {
Query query = this.getSession().createSQLQuery(hql).addEntity(Tclass);
List<T> list = null;
if(null == params || params.length == 0){
list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
}
if(null != params || params.length != 0){
for(int i=0;i<params.length;i++){
System.out.println("params: " + params[i]);
query.setParameter(i, params[i]);
}
list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
}
return null;
}
//取得行数
@Override
public long getCount() {
String hql = "select count(*) from " + getTclass().getSimpleName();
return (Long) this.getSession().createQuery(hql).uniqueResult();
}
@SuppressWarnings("null")
@Override
public long getCount(String hql, Object[] params) {
Query query = this.getSession().createQuery(hql);
if(null != params || params.length != 0){
for(int i=0;i<params.length;i++){
query.setParameter(i, params[i]);
}
}
return (Long) query.uniqueResult();
}
//hql解决方案
@SuppressWarnings("unchecked")
@Override
public List<T> listByHql(String hql, Object[] params) {
Query query = this.getSession().createQuery(hql);
if(null == params || params.length == 0){
return query.list();
}else{
for(int i=0;i<params.length;i++){
query.setParameter(i, params[i]);
}
}
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public T getByHql(String hql, Object[] params) {
Query query = this.getSession().createQuery(hql);
for(int i=0;i<params.length;i++){
query.setParameter(i, params[i]);
}
return (T) query.uniqueResult();
}
@SuppressWarnings("unchecked")
@Override
public List<T> listFenYeAddparams(int firstResult, int maxResults,
String hql, Object[] params) {
Query query = this.getSession().createQuery(hql);
List<T> list = null;
if(null == params || params.length == 0){
list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
}
return list;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public List<T> queryPage(Map map, int firstResult, int maxResults,
String hql) {
StringBuffer buffer = new StringBuffer(hql);
StringBuffer wherestring = new StringBuffer();
Iterator paramnames = (Iterator) map.keySet().iterator();
while(paramnames.hasNext()){
String paramname = (String)paramnames.next();
String value = null;
value = String.valueOf(map.get(paramname));
if(value != null){
value = value.trim();
if(value.equals("")){
continue;
}
}
if(wherestring.length() == 0){
wherestring.append(" where ");
}else{
wherestring.append(" and ");
}
wherestring.append(paramname).append("=").append(value);
buffer.append(wherestring);
}
Query query = this.getSession().createQuery(buffer.toString());
List<T> list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
return list;
}
@SuppressWarnings("rawtypes")
@Override
public long getCount(String hql, Map map) {
StringBuffer buffer = new StringBuffer(hql);
StringBuffer wherestring = new StringBuffer();
Iterator paramnames = (Iterator) map.keySet().iterator();
while(paramnames.hasNext()){
String paramname = (String) paramnames.next();
String value = null;
value = String.valueOf(map.get(paramname));
if(value != null){
value = value.trim();
if(value.equals(" ")){
continue;
}
}
if(wherestring.length() == 0){
wherestring.append(" where ");
}else{
wherestring.append(" and ");
}
wherestring.append(paramname).append("=").append(value);
buffer.append(wherestring);
}
Query query = this.getSession().createQuery(buffer.toString());
return (Long) query.uniqueResult();
}
@SuppressWarnings("unchecked")
public T queryObject(String hql, Object[] params) {
Query query = this.getSession().createQuery(hql);
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
return (T) query.uniqueResult();
}
}