06通用DAO层实现分页和查询

1.一个通用接口
public interface  GenericDAOI <Obj,String>{
	int ADD=1;
	int DEL=2;
	int UPT=3;
	public boolean addObj(Obj obj) throws Exception;
	public boolean delObj(String id)throws Exception;
	public boolean uptObj(Obj obj) throws Exception;
	public Obj  getObjById(String id) throws Exception;
	//public List <Obj> getObjs(String hql,List<Object> params)throws Exception;
	public List <Obj> getObjs(String hql,Map<String,Object> params,int pageNO,int pageSize)throws Exception;
	public void setClzz(Class clzz);

}

2.实现接口

public class GenericDAOImpl <Obj,String>  implements GenericDAOI<Obj, String>{
	private Class clzz;
	private static SessionFactory sessionFactory;
	static{
		sessionFactory=new Configuration().configure("config/hibernate/cfg.xml").buildSessionFactory();
	}
	
	public void setClzz(Class clzz) {
		this.clzz = clzz;
	}

	public Class getClzz() {
		return clzz;
	}

	public boolean cud(Obj obj ,int opt){
		boolean flag=false;
		Session session=null;
		try {
		session=sessionFactory.openSession();
		session.beginTransaction();		
		switch(opt){
		case DEL: session.delete(obj);break;
		case ADD: session.persist(obj);break;
		case UPT: session.update(obj);break;
		default:break;
		}
		
		session.getTransaction().commit();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
		return flag;
		
	}
	
	
	
	public boolean addObj(Obj obj) throws Exception {
		return cud(obj,ADD);
	}

	public boolean delObj(String id) throws Exception {
		return cud(getObjById(id),DEL);
	}

	public boolean uptObj(Obj obj) throws Exception {
		return cud(obj,UPT);
	}

	public Obj getObjById(String id) throws Exception {
		Obj obj=null;
		Session session=null;
		try {
		session=sessionFactory.openSession();
		session.beginTransaction();
		obj=(Obj)session.get(clzz,(Serializable)id);
	    session.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
		return obj;
	}

	public List <Obj> getObjs(String hql,Map<String,Object>Params,int pageNO,int pageSize) throws Exception {
		List <Obj> objs=null;
		Session session=null;
		try {
		session=sessionFactory.openSession();
		session.beginTransaction();
		//HQL
		Query query=session.createQuery( (java.lang.String) hql);
		//设置参数
		
		//if(Params!=null){
			query.setProperties(Params);
		//}
		//设置分页	
		if(pageNO>=0){
			query.setFirstResult((pageNO-1)*pageSize);
			query.setMaxResults(pageSize);
		}
		
			
		objs=query.list();
		/*if(Params!=null){
			for(int idx=0;idx<Params.size();idx++){
				query.setParameter(idx, Params.get(idx));
			}*/
			
		
	    session.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
		return objs;
	}

}

3.具体类别

public interface PersonDAOI extends GenericDAOI<PersonPO, String> {
	public List<PersonPO> getPersons(int pageNO,int pageSize) throws Exception;
}
    
public class PersonDAOImpl  extends GenericDAOImpl<PersonPO, String> implements PersonDAOI{
	public List<PersonPO> getPersons(int pageNO,int pageSize) throws Exception {
	//  String hql="from PersonPO person";
	//	String hql="from PersonPO person where person.birthday between ? and ?";//按条件查询  占位符
	 //  List<Object> params=new ArrayList<Object>();
	 //  params.add("1980-1-1");
	 //  params.add("2017-12-30");
		String hql="from PersonPO person where person.name like:name";
		Map<String,Object> params=new  HashMap<String, Object>();
		params.put("name", "%cmj%");
		return this.getObjs(hql, params,pageNO,pageSize);
		
	}	
}

3.测试类
public class PersonHibernateTest {
    public PersonDAOI personDAO;
    public PersonHibernateTest() {
		personDAO=new PersonDAOImpl();
	}		
     @Test
     public void testGetPersons() throws Exception{
    	 List <PersonPO> persons=personDAO.getPersons(1,2);
    	 System.out.println(persons.size());
     }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值