package com.shlanbao.tzsc.base.dao.impl;
import java.io.Serializable;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import com.shlanbao.tzsc.base.dao.BaseDaoI;
import com.shlanbao.tzsc.base.model.PageParams;
import com.shlanbao.tzsc.utils.tools.BeanConvertor;
import com.shlanbao.tzsc.utils.tools.DateUtil;
import com.shlanbao.tzsc.utils.tools.StringUtil;
/**
* 通用dao实现类
*
@author Leejean
* @create 2014-6-24 下午04:14:54
* @param 目标类
*/
@SuppressWarnings("unchecked")
@Repository
public class BaseDaoImpl implements BaseDaoI {
private Logger log = Logger.getLogger(this.getClass());
private String message="数据库操作异常.";
@Autowired
private SessionFactory sessionFactory;
/**
* 获得当前事物的session
*
* @return org.hibernate.Session
*/
public Session getCurrentSession() {
return this.sessionFactory.getCurrentSession();
}
/**
* 保存
* @author Leejean
* @create 2014-7-5下午12:06:02
* @param o 持久化对象
* @return 执行结果
*/
@Override
public boolean save(T o){
try {
Serializable serializable=this.getCurrentSession().save(o);
return serializable==null?false:true;
} catch (DataAccessException e) {
e.printStackTrace();
log.error(message, e);
return false;
}
}
/**
* 保存
* @param o 持久化对象
* @return 执行结果
*/
@Override
public String saveBackKey(T o){
String key ="";
try {
Serializable serializable=this.getCurrentSession().save(o);
key = serializable.toString();
} catch (DataAccessException e) {
log.error(message, e);
key ="";
}
return key;
}
/**
* 更新
* @author Leejean
* @create 2014-7-5下午12:06:02
* @param o 持久化对象
* @return 执行结果
*/
@Override
public boolean update(T o){
boolean flag = false;
try {
this.getCurrentSession().update(o);
flag = true;
} catch (DataAccessException e) {
log.error(message, e);
flag = false;
}
return flag;
}
/**
* 保存或者修改
* @author liuligong
* @create 2014-11-10 8:58
* @param o 持久化对象
* @return 执行结果
*/
@Override
public boolean saveOrUpdate(T o){
try {
this.getCurrentSession().saveOrUpdate(o);
return true;
} catch (DataAccessException e) {
e.printStackTrace();
log.error(message, e);
return false;
}
}
/**
* 根据ID查找对象
* @author Leejean
* @create 2014-7-5下午12:06:17
* @param c 目标对象
* @param id ID
* @return 对象实例
*/
@Override
public T findById(Class c,String id) {
try {
return (T) this.getCurrentSession().get(c, id);
} catch (Exception e) {
e.printStackTrace();
log.error(message, e);
return null;
}
}
/**
* 普通分页查询
* @author Leejean
* @create 2014-7-5下午12:08:49
* @param hql HQL
* @param pageIndex 当前页
* @param pageSize 页大小
* @param params 参数
* @return 结果集
*/
@Override
public List queryByPage(String hql, int pageIndex,int pageSize, Object...params) {
try {
Query query = getQuery(hql);
query.setFirstResult((pageIndex-1)*pageSize);
query.setMaxResults(pageSize);
bandParameter(query, params);
return query.list();
} catch (Exception e) {
e.printStackTrace();
log.error(message, e);
return null;
}
}
/**
* 分页查询(适用于Easyui分页)
* 局限:排序仅支持单表
* @author Leejean
* @create 2014-6-27下午03:39:31
* @param hql HQL 目标表取别名为:o 无需后接空格 如:'from MyTable o'
* @param pageParams 分页参数
* @param params 用户输入参数,一般用来自于自定义Bean
* @return 结果集
*/
@Override
public List queryByPage(String hql, PageParams pageParams, Object...params) {
try {
if(StringUtil.notNull(pageParams.getOrder())&&StringUtil.notNull(pageParams.getSort())){
hql += " order by o." + pageParams.getSort() + " " + pageParams.getOrder();
}
Query query = getQuery(hql);
query.setFirstResult((pageParams.getPage()-1)*pageParams.getRows());
query.setMaxResults(pageParams.getRows());
bandParameter(query, params);
return query.list();
} catch (Exception e) {
e.printStackTrace();
log.error(message, e);
return null;
}
}
/**
* 分页查询带排序功能
* @author Leejean
* @create 2014-6-27下午03:39:31
* @param hql HQL语句
* @param pageIndex 页码
* @param pageSize 页大小
* @param sort 排序列
* @param order 升序asc&降序desc
* @param params 参数列表
* @return 结果集
*/
@Override
public List queryByPage(String hql, int pageIndex,int pageSize,String sort,String order,
Object... params) {
try {
if(sort!=null&&!sort.equals("")&&order!=null&&!order.equals("")){
hql += " order by o." + sort + " " + order;
}
Query query = getQuery(hql);
query.setFirstResult((pageIndex - 1) * pageSize);
query.setMaxResults(pageSize);
bandParameter(query, params);
return query.list();
} catch (Exception e) {
e.printStackTrace();
log.error(message, e);
return null;
}
}
/**
* 普通查询
* @param hql HQL语句
* @param params 参数列表
* @return 对象集合
*/
@Override
public List query(String hql,Object...params) {
try {
Query query=getQuery(hql);
bandParameter(query, params);
return (List)query.list();
} catch (Exception e) {
e.printStackTrace();
log.error(message, e);
return null;
}
}
/**
*
*/
@SuppressWarnings("hiding")
@Override
public T query(Class clazz, String hql, Object... params) {
try {
Query query=getQuery(hql);
bandParameter(query, params);
return (T)query.list();
} catch (Exception e) {
e.printStackTrace();
log.error(message, e);
return null;
}
}
@Override
public List