`

BaseDao的封装

 
阅读更多

BaseDao 常用的方法,封装如下:

package pack.hibernate.basedao;

import java.io.Serializable;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import pack.hibernate.sessionfactory.HibernateSessionFactory;

/**
 * 基類;
 * @author zhouhaitao
 */
public class BaseDao {
 /**
  * 添加对象的方法;
  * @param obj
  */
 public void add(Object obj){
  HibernateSessionFactory.getSession().save(obj);
 }
 
 /**
  * 按主键查找;
  *
  */
 public Object selectById(Class c,Serializable s){
  Object obj=HibernateSessionFactory.getSession().load(c,s);
  return obj;
 }
 
 /**
  * 根据对象修改;
  *
  */
 public void updateObj(Object obj){
  HibernateSessionFactory.getSession().update(obj);
 }
 
 /**
  * 根据对象删除;
  * @param obj
  */
 public void delete(Object obj){
  HibernateSessionFactory.getSession().delete(obj);
 }
 
 /**
  * 根据主键删除;
  * @param c
  * @param s
  */
 public void delete(Class c,Serializable s){
  delete(selectById(c, s));
 }
 
 /**
  * 查找全部;
  * @return
  */
 public List selectAll(Class c){
  Session session=HibernateSessionFactory.getSession();
  List list=session.createQuery("From "+c.getName()).list();
  return list;
 }

 /**
  * 分页查找;
  * @param hql
  * @param page
  * @param size
  * @param objects
  * @return
  */
 public List pageQuery(String hql,Integer page,Integer size,Object...objects){
  Session session=HibernateSessionFactory.getSession();
  Query query=session.createQuery(hql);
  if(objects!=null){
   for(int i=0;i<objects.length;i++){
    query.setParameter(i,objects[i]);
   }
  }
  
  if(page!=null && size!=null){
   //分页操作;
   query.setFirstResult((page-1)*size).setMaxResults(size);
  }
  List list=query.list();
  return list;
 }
 
 
 /**
  * 按条件删除,修改;
  * @return
  */
 public boolean executeUpdate(String hql,Object...objects){
  Session session=HibernateSessionFactory.getSession();
  Query query=session.createQuery(hql);
  if(objects!=null){
   for(int i=0;i<objects.length;i++){
    query.setParameter(i, objects[i]);
   }
  }
  
  int rows=query.executeUpdate();
  return rows>0;
 }
}


 

 

UserDao接口代码:

package pack.hibernate.idao;

import java.util.List;
import pack.hibernate.pojo.Users;

/**
 * UsersDao接口;
 * @author zhouhaitao
 *
 */
public interface IUsersDao {

	/**
	 * 对象的添加;
	 * @param obj
	 */
	public abstract void add(Users obj);

	/**
	 * 根据主键查找;
	 * @param id
	 * @return
	 */
	public abstract Object selectById(Long id);

	/**
	 * 查询所有;
	 * @return
	 */
	public abstract List selectAll();

	/**
	 * 根据主键删除;
	 * @param id
	 */
	public abstract void delete(Long id);
	
	/**
	 * 根据对象删除;
	 * @param user
	 */
	public abstract void delete(Users user);

	/**
	 * 根据对象更新;
	 * @param user
	 */
	public abstract void update(Users user);


	/**
	 * 分页查询;
	 * @param hql
	 * @param page
	 * @param size
	 * @param objects
	 * @return
	 */
	public abstract List pageQuery(String hql, Integer page, Integer size,
			Object... objects);

	/**
	 * 删除,修改;
	 * @param hql
	 * @param objects
	 * @return
	 */
	public abstract boolean executeUpdate(String hql, Object... objects);

}

 

 

 

UserDaoImpl实现UserDao接口,并且继承BaseDao,封装代码如下:

package pack.hibernate.daoimpl;

import java.util.List;

import pack.hibernate.basedao.BaseDao;
import pack.hibernate.idao.IUsersDao;
import pack.hibernate.pojo.Users;

/**
 * UserDaoImpl的实现类;
 * @author zhouhaitao */
public class UserDaoImpl extends BaseDao implements IUsersDao{
	
	/**
	 * 添加对象;
	 */
	public void add(Users obj){
		super.add(obj);
	}

	/**
	 * 根据主键查找;
	 */
	public Object selectById(Long id){
		Object obj=super.selectById(Users.class, id);
		return obj;
	}

	/**
	 * 查询所有;
	 */
	public List selectAll(){
		List list=super.selectAll(Users.class);
		return list;
	}

	/**
	 * 根据主键删除;
	 */
	public void delete(Long id){
		super.delete(Users.class, id);
	}

	/**
	 * 删除对象;
	 */
	public void delete(Users user){
		super.delete(user);
	}

	/**
	 * 更新对象;
	 */
	public void update(Users user){
		super.updateObj(user);
	}

	/**
	 * 分页查询;
	 */
	public List pageQuery(String hql,Integer page,Integer size,Object...objects){
		List list=super.pageQuery(hql, page, size, objects);
		return list;
	}

	/**
	 *修改,删除操作;
	 */
	public boolean executeUpdate(String hql,Object...objects){
		return super.executeUpdate(hql, objects);	
	}
}

 

一个简单的DAO就封装好了, 这个没有加入事务处理..则需要另外在创建一个代理类,去负责专门的事务处理工作。

 

分享到:
评论
3 楼 xx599306170 2015-07-30  
 
2 楼 i5suoi 2013-04-22  
有没有个更新的版本,更稳定点的
1 楼 xj1990129 2012-12-24  
我们在service层为了解耦 写的是userdao接口类型,虽然spring实际注入的是userdaoImpl,但是在程序没运行之前是不知道,那么在service的接口类型的userdao的 引用 怎么能用到basedao中的方法啊?

相关推荐

Global site tag (gtag.js) - Google Analytics