hibernate多条件(条件个数不定)查询怎么写?

xiongzeng 2008-04-14 03:45:48
在hibernate中,对多条件的查询(或条件个数不定),大部分人都先判断这个参数是否为空,然后再用append()方法将条件追加大后面组装成一个多条件的查询语句。
但我觉得这样感觉代码很冗长,很累赘。请问各位大侠有没有更优雅的方法?
谢谢!
...全文
483 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunyujia 2008-04-27
  • 打赏
  • 举报
回复
呵呵,楼上的方法好,在此之前我一直通过OO设计来解决这个问题,下次做项目再用hibernate试下QBC.
Shine_Panda 2008-04-23
  • 打赏
  • 举报
回复
象这种动态条件的情况一般用 QBC 语言查询
xiongzeng 2008-04-23
  • 打赏
  • 举报
回复
forestking_xx,您好,就Hibernate example的查询一个小问题向您咨询。
example在处理日期比较怎么做?即我要查询为brithday大于'2008-04-22'和小于'2008-04-23'的记录,用
example怎么做?谢谢!
xiongzeng 2008-04-15
  • 打赏
  • 举报
回复
哦,非常感谢forestking_xx!
谢谢!结贴了。
forestking_xx 2008-04-15
  • 打赏
  • 举报
回复
1 首先是可以的, 但是要加上select,比如select user.name, user.age from User user
2 你不必担心搜出全部属性会影响性能,事实上,在from POJO时hibernate并没有搜出全部的属性,而只是取出了id,而qita的属性在使用的时候才会被拿出来。
xiongzeng 2008-04-15
  • 打赏
  • 举报
回复
谢谢 forestking_xx!
我想再问一个问题:在hibernate执行HQL查询时,都是利用From POJO,即将POJO的属性全部列出来;尤其是多张表进行连接查询时,它将所有POJO的属性全部列出来了。我觉得这样比较损耗性能。有没有方法来指定属性?即我不需要全部查询出来,只显示几个重要的属性?
谢谢!
forestking_xx 2008-04-14
  • 打赏
  • 举报
回复
可以用query by example,
具体讲(以查user为例, user有name、 age 、pwd等属性)
比如已知name 和 age,查这个user,
那么可以构建一个user(作为查询用到的example,注意这里不需要判断name、age是否为空,直接可以赋值)
User user = new User();
use.setName(xxx);...

Example example = Example.create(user);


Criteria criteria = session.createCriteria(User.class).add(example);
这样可能符合你的要求。
xiongzeng 2008-04-14
  • 打赏
  • 举报
回复
谢谢kunmingkunlun!
我看你代码,还是先判断,再追加。有没有好的解决办法?
kunmingkunlun 2008-04-14
  • 打赏
  • 举报
回复
public List getMembersByConditions(Long minAge, Long maxAge, String gender,
String provincecity,int start,int end) throws Exception {
Session session = HibernateSessionFactory.getSession();
List list = null;
String str = "from MemberInfo where 1=1";
if(minAge!=null && maxAge!=null) {
str = str +" and age between "+minAge+" and "+maxAge;

}
if(!gender.equals("unlimited")) {
if(gender.equals("0")) {
str = str+" and gender='0'";
}else {
str = str+" and gender='1'";
}
}
if(!provincecity.equals("unlimited")) {
str = str +" and provinceCity="+provincecity;
}
Query query = session.createQuery(str+"order by nickName");
query.setFirstResult(start);
query.setMaxResults(end);
list = query.list();
return list;
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧