import java.io.Serializable;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
/**
*
* @author kingschan
* date:2014-1-9
* @param <T>
*/
@Repository("BaseDao")
public class BaseDao {
public Logger log = LoggerFactory.getLogger(BaseDao.class);
private SessionFactory sessionfactory;
public SessionFactory getSessionfactory() {
return sessionfactory;
}
@Resource(name="sessionFactory")
public void setSessionfactory(SessionFactory sessionfactory) {
this.sessionfactory = sessionfactory;
log.info("注入sessionfactory");
}
public Session getSession() {
Session session = null;
try
{
session = sessionfactory.getCurrentSession();
//log.info("只有在事务管理下,才能通过 getCurrentSession() 得到 session ,如果显示这个信息,则说明事务管理工作起作用了。");
}
catch(HibernateException ex)
{
session = sessionfactory.openSession();
log.info("*************************************************************");
log.info("* *");
log.info("* 通过 openSession() 得到。事务管理没有起作用,需要检查配置。 *");
log.info("* *");
log.info("*************************************************************");
}
return session;
}
/**
* 保存一个对象
* @param obj
*/
public void save(Object obj) {
Session s = getSession();
s.save(obj);
}
/**
* 根据hql返回一个list 如果有参数刚hql用?来表示条件
* @param hql
* @param args 从1开始赋值
* @return
*/
public List<?> queryForList(String hql,Object...args) {
List<?> lis =null;
Session s = getSession();
Query q = s.createQuery(hql);
if (null!=args&&args.length>0) {
for (int i = 0; i < args.length; i++) {
q.setParameter(i, args[i]);
}
}
lis = q.list();
return lis;
}
/**
* 分页查询
* @param hql
* @param pageindex
* @param limit
* @param args
* @return
*/
public List<?> Pagination(String hql,int pageindex,int limit,Object...args) {
List<?> lis =null;
Session s = getSession();
Query q = s.createQuery(hql);
if (null!=args&&args.length>0) {
for (int i = 0; i < args.length; i++) {
q.setParameter(i, args[i]);
}
}
q.setFirstResult((pageindex-1)*limit);
q.setMaxResults((pageindex-1)*limit+limit);
lis = q.list();
return lis;
}
/**
* 修改一个实体
* @param obj
*/
public void update(Object obj) {
getSession().update(obj);
}
/**
* 删除一个实体
* @param obj
*/
public void delete(Object obj) {
getSession().delete(obj);
}
/**
* 根据主键返回一个实体
* @param clazz
* @param id
* @return
*/
public Object get(Class<?> clazz,Object id) {
return getSession().get(clazz, (Serializable) id);
}
/**
* 执行HQL
* @param hql
* @param obj
*/
public int executeHQL(String hql,Object...args) {
Query q = getSession().createQuery(hql);
if (null!=args&&args.length>0) {
for (int i = 0; i < args.length; i++) {
q.setParameter(i, args[i]);
}
}
return q.executeUpdate();
}
/**
* 执行SQL
* @param hql
* @param obj
*/
public int executeSQL(String sql,Object...args) {
Query q = getSession().createSQLQuery(sql);
if (null!=args&&args.length>0) {
for (int i = 0; i < args.length; i++) {
q.setParameter(i, args[i]);
}
}
return q.executeUpdate();
}
/**
* hql单一值查值
* @param hql
* @param args
* @return
*/
public Object uniqueQuery(String hql,Object...args) {
Query q = getSession().createQuery(hql);
if (null!=args&&args.length>0) {
for (int i = 0; i < args.length; i++) {
q.setParameter(i, args[i]);
}
}
return q.uniqueResult();
}
/***
* sql 单一值查值
* @param sql
* @param args
* @return
*/
public Object uniqueQueryBySql(String sql,Object...args) {
Query q = getSession().createSQLQuery(sql);
if (null!=args&&args.length>0) {
for (int i = 0; i < args.length; i++) {
q.setParameter(i, args[i]);
}
}
return q.uniqueResult();
}
/**
* 本地命名查询返回List<Map>
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List<?> getNameQuery(String key,Object...args)throws Exception{
List<Map<String, Object>> lis = null;
Session s = getSession();
Query q = s.getNamedQuery(key);
if (null!=args&&args.length>0) {
for (int i = 0; i < args.length; i++) {
q.setParameter(i, args[i]);
}
}
q.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
lis = q.list();
return lis;
}
/**
* <font color='red'>执行sql语句返回list<map<String,object>></font>
* @param sql
* @param objects
* @return
*/
public List<?> executeSQLQuery(String sql ,Object...objects){
List<?> lis =null;
Session s = getSession();
Query q = s.createSQLQuery(sql);
if (null!=objects&&objects.length>0) {
for (int i = 0; i < objects.length; i++) {
q.setParameter(i, objects[i]);
}
}
q.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
return lis = q.list();
}
}
初用Hibernate4写了个BaseDao实现请多多指教
最新推荐文章于 2020-09-15 14:47:09 发布