在以前的一些解决方案中,关于多条件查询我都是采用拼SQL语句,但是,hibernate3.0在输入中文时,出现乱码,所以,只有换一种方式来解决;我看大家都说用站位符,但没有很详细的说明,采用站位符,该如何实现多条件差查询;下面是我看文档写的一个测试方法:
根据userid查询:
根据userid 和department查询:
根据userid查询:
- public List searchSysusers(Sysuser sysuser){
- SessionFactory sessionFactory=getHibernateTemplate().getSessionFactory();
- Session sess=sessionFactory.openSession();
- List list=sess.createCriteria(Sysuser.class)
- .add(Restrictions.eq("userid", "test1")).list();
- sess.close();
- return list;
public List searchSysusers(Sysuser sysuser){ SessionFactory sessionFactory=getHibernateTemplate().getSessionFactory(); Session sess=sessionFactory.openSession(); List list=sess.createCriteria(Sysuser.class) .add(Restrictions.eq("userid", "test1")).list(); sess.close(); return list; }
根据userid 和department查询:
- public List searchSysusers(Sysuser sysuser){
- SessionFactory sessionFactory=getHibernateTemplate().getSessionFactory();
- Session sess=sessionFactory.openSession();
- List list=sess.createCriteria(Sysuser.class)
- .add(Restrictions.eq("userid", "test1"))
- .add(Restrictions.like("department","%工程部%")).list();
- sess.close();
- return list;
- }
public List searchSysusers(Sysuser sysuser){ SessionFactory sessionFactory=getHibernateTemplate().getSessionFactory(); Session sess=sessionFactory.openSession(); List list=sess.createCriteria(Sysuser.class) .add(Restrictions.eq("userid", "test1")) .add(Restrictions.like("department","%工程部%")).list(); sess.close(); return list; }
都能把结果正确查询出来,但是当我要输入一个或者多个查询条件时,却不知道该如何实现了;因为我输入的查询条件个数是不确定的; 当然,如果我要查询的条件个数不是很多的话,判断以下就成,但是 如果条件很多的话,用判断显然是不行的;
请教大家这个问题该如何解决?
---------------------------------------------
其实这个不难实现,函数输入3个数组:String[] props, String[] opers, Object[] values。第一个参数是条件的属性名,第二个参数是操作符,第三个参数是值。先Criteria cri=sess.createCriteria(Sysuser.class);然后通过一个循环语句来执行cri.add(...);最后执行List list= cri.list();