关于Hibernate的动态查询

  今天做完了一个用hibernate完成的动态组合查询,现在总结了一些常用的方法,大家一起交流一下;
  现在有一个用户的名字:username 年龄 age为查询条件:
第一种:hql的方式
  public list findUserInfo(String name ,int age) throws Exception{

    StringBuffer hqlstr=new StringBuffer("from User u");
    if(name!=null) hqlstr.append("where lower(u.username)  like:username");
   if(age!=0 && username!=null) hqlste.append("and u.age=:age");
   if(age!=0&&username==null) hqlstr.append("where u.age=:age");

   Query query=getSession.createQuery(hqlstr.toString());
    if(username!=null)query.getString("username",name.toLowerCase());
    if(age!=0)query.setInteger("age",age);
    return query.list();
   }
当然这种方法比较繁琐,我们可以用QBC和QBE的方法来简化程序:
第二中:QBC的方式
   public list findUserInfo(String name ,int age) throws Exception{
   Criteria criter=session.createCrirtia(User.class);
   if(username!=null){
    criter.add(Expression.ilike("username",username.toLowercase(),MacthMode.ANYWHERE));
  if(age!=0)
   criter.add(Excepression.eq("age"),newInterger(age));
    return criter.list();
  }
第三种:QBE的方式:
  public list findUserInfo(String name ,int age) throws Exception{
  Example exa=Example.create(MatchMode);
  exa.ignoreCase().enableLike(MatchMode.ANYWHERE);
  exa.excludeZeroes();
  Criteria criter=getSession.createCrirtia(User.class).add(exa);
}
当我们需要完成上面情况的查询时候,可以采用下面的两种方法来执行.

你可能感兴趣的:(Hibernate)