初用Hibernate4写了个BaseDao实现请多多指教


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();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值