我在页面上给用户提供的查询条件有:工号,姓名,性别,
如果用户什么信息都不录入,便提交,hibernate就会不带条件进行查询所有的员工
如果用户只录入工号,hibernate就会带上条件(工号等于用户录入的信息)来进行查询
如果用户录入了工号和性别,hibernate将会带上两个条件(工号='' and 性别=‘’)来进行查询。
public List find(final String queryString, final Object values[])
throws DataAccessException
{
return (List)execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException
{
Query queryObject = session.createQuery(queryString);
prepareQuery(queryObject);
if(values != null)
{
for(int i = 0; i < values.length; i++)
queryObject.setParameter(i, values[i]);
}
return queryObject.list();
}
}
, true);
}
如果使用该方法,是否是先根据页面提交内容中各个字段是不是为空,进而确定好HQL并且为values[]赋值,二者作为参数,再调用该方法?有没有更好的方法啊?
注:使用的框架为spring+webwork+hibernate,刚学习hibernate不是很明白。
16 个解决方案
#1
我只能给你些建议。在写SQL语句的时候 用拼写查寻吧。。
#2
额。是HQL 应该是根据前台传的信息确定HQL语句。这个应该在HQL拼写的时候能做到 。
#3
是不是说,hibernate没有什么好的办法来实现动态查询,还是需要自己来做大量的判断。
#4
我也算楼上这意思,不过我更侧重组合查询的问题?
#5
飘过。。。
#6
是的,写情况都很复杂,且不固定,hibernate没有办法搞定所有情况
#7
find不是可以带一个数组么,查询条件按sql里出现顺序放到数组里去
#8
如果有的选项,提交的时候没填,那传过来的是NULL或“”,能放到数组里面?不会错?
#9
如果条件不是必要的,就别用find了吧
#10
可以用动态组建String来查询
#11
路过~
#12
Hibernate的Criteria接口是非常适合动态构造查询条件的,你可以这样来做
这种方式是可以完成功能的,其中employeeid,name,sex都是方法的参数
getHibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(User.class);
if(employeeid != null) {
criteria.add(Restrictions.eq("employeeid", employeeid));
}
if(name !=null) {
criteria.add(Restrictions.eq("name", name));
}
if(sex != null) {
criteria.add(Restrictions.eq("sex", sex));
}
}
});
这种方式是可以完成功能的,其中employeeid,name,sex都是方法的参数
#13
我知道楼上的方法,但感觉和拼HQL差不多,不知道有没有更好的方法?
#14
晕了,你用HQL还不把你给麻烦死...
#15
if(name !=null) {
criteria.add(Restrictions.eq("name", name));
}
=
if(name !=null) {
hql+=“and name=“+name
}
差不多!!
criteria.add(Restrictions.eq("name", name));
}
=
if(name !=null) {
hql+=“and name=“+name
}
差不多!!
#16
晕,你自己看你写的有没有问题...hql可以这样写吗?
#1
我只能给你些建议。在写SQL语句的时候 用拼写查寻吧。。
#2
额。是HQL 应该是根据前台传的信息确定HQL语句。这个应该在HQL拼写的时候能做到 。
#3
是不是说,hibernate没有什么好的办法来实现动态查询,还是需要自己来做大量的判断。
#4
我也算楼上这意思,不过我更侧重组合查询的问题?
#5
飘过。。。
#6
是的,写情况都很复杂,且不固定,hibernate没有办法搞定所有情况
#7
find不是可以带一个数组么,查询条件按sql里出现顺序放到数组里去
#8
如果有的选项,提交的时候没填,那传过来的是NULL或“”,能放到数组里面?不会错?
#9
如果条件不是必要的,就别用find了吧
#10
可以用动态组建String来查询
#11
路过~
#12
Hibernate的Criteria接口是非常适合动态构造查询条件的,你可以这样来做
这种方式是可以完成功能的,其中employeeid,name,sex都是方法的参数
getHibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = session.createCriteria(User.class);
if(employeeid != null) {
criteria.add(Restrictions.eq("employeeid", employeeid));
}
if(name !=null) {
criteria.add(Restrictions.eq("name", name));
}
if(sex != null) {
criteria.add(Restrictions.eq("sex", sex));
}
}
});
这种方式是可以完成功能的,其中employeeid,name,sex都是方法的参数
#13
我知道楼上的方法,但感觉和拼HQL差不多,不知道有没有更好的方法?
#14
晕了,你用HQL还不把你给麻烦死...
#15
if(name !=null) {
criteria.add(Restrictions.eq("name", name));
}
=
if(name !=null) {
hql+=“and name=“+name
}
差不多!!
criteria.add(Restrictions.eq("name", name));
}
=
if(name !=null) {
hql+=“and name=“+name
}
差不多!!
#16
晕,你自己看你写的有没有问题...hql可以这样写吗?