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就封装好了, 这个没有加入事务处理..则需要另外在创建一个代理类,去负责专门的事务处理工作。