浏览 12132 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-16
根据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; } 根据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; } 都能把结果正确查询出来,但是当我要输入一个或者多个查询条件时,却不知道该如何实现了;因为我输入的查询条件个数是不确定的; 当然,如果我要查询的条件个数不是很多的话,判断以下就成,但是 如果条件很多的话,用判断显然是不行的; 请教大家这个问题该如何解决? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-16
其实这个不难实现,函数输入3个数组:String[] props, String[] opers, Object[] values。第一个参数是条件的属性名,第二个参数是操作符,第三个参数是值。先Criteria cri=sess.createCriteria(Sysuser.class);然后通过一个循环语句来执行cri.add(...);最后执行List list= cri.list();
|
|
返回顶楼 | |
发表时间:2007-01-16
以下供参考,用占位符,输入参数用pojo或map hibernate为最新的3.2 public static List query(String hsql,Object param, int off,int max)throws Exception{ Session s = null; Transaction tx = null; Query q = null; List list = null; String c = null; try { s = getSession(); //tx = s.beginTransaction(); q = s.createQuery(hsql); if(param!=null){ //q.setProperties(param); c = param.getClass().getName(); //System.out.println(c); if(c.equals("java.util.HashMap")){ q.setProperties((Map)param); }else{ q.setProperties(param); } } if(off>0){ q.setFirstResult(off); } if(max>0){ q.setMaxResults(max); } list = q.list(); //tx.commit(); return list; } catch (Exception e) { //if (tx!=null) tx.rollback(); throw e; } finally { s.close(); } } String sql = null; User user = new User(); Map map = new HashMap(); List list = null; sql = "from User where name = :name"; user.setName("tiger"); list = Hb3Util.query(sql,user,5,8); sql = "from User where name like :name"; map.put("name","%tiger%"); list = Hb3Util.query(sql,map,5,8); |
|
返回顶楼 | |
发表时间:2007-01-16
public List searchSysusers(Sysuser sysuser){ SessionFactory sessionFactory=getHibernateTemplate().getSessionFactory(); Session sess=sessionFactory.openSession(); Criteria c=sess.createCriteria(Sysuser.class); if(XXXXXXX){ c.add(Restrictions.eq("userid", "test1")); } if(YYYYYYYY){ c.add(Restrictions.like("department","%工程部%")); } List list = c.list(); sess.close(); return list; } 弱智 |
|
返回顶楼 | |
发表时间:2007-01-16
方法大同小异,不过众多的判断语句是少不了的咯:
return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria crit = session.createCriteria(Xxx.class); getAllConditions(crit, xxxx); crit.addOrder(Order.asc("xxxx.id")); return crit.list(); } }); private void getAllConditions(Criteria crit, final Xxxx xxxx) { if (xxxx != null) { if (xxxx.getXx() != null && !"".equals(xxxx.getXx()) && xxxx.getXx().intValue() != 0) { crit.add(Expression.eq("xx", xxxx.getXx())); } if (xxxx.getXxx() != null && !"".equals(xxxx.getXxx())) { crit.add(Expression.eq("xxx", xxxx.getXxx())); } } } |
|
返回顶楼 | |
发表时间:2007-01-22
一般可以用map或者数组(不好的选择),作为参数,使用固定函数,
遍历map和数组, 动态生成查询。 |
|
返回顶楼 | |
发表时间:2007-01-22
如果查询条件涉及多个表,那么如何用Criteria或Query组合呢?是先把那些条件所涉及的属性创建一个新的对象,然后再操作。还是有其他好的方法?
|
|
返回顶楼 | |
发表时间:2007-01-22
tony.lee 写道 如果查询条件涉及多个表,那么如何用Criteria或Query组合呢?是先把那些条件所涉及的属性创建一个新的对象,然后再操作。还是有其他好的方法?
createAlias() Or createCriteria() |
|
返回顶楼 | |
发表时间:2007-04-03
如果查询条件涉及多个表,并且各个表之间没有设置关联关系,那有没有办法使用Criteria进行查询呢?
|
|
返回顶楼 | |