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