一个关于Hibernate的优化实例:从HQL到QBC,从QBC到QBE,再到“增强的”QBE

http://www.java-cn.com/club/html/07/n-1807.html

 

先解释一下标题的含义:为了实现一个组合条件查询,先是使用HQL书写,然后改用Query by Criteria方式,再尝试Query by Example,最后自己实现了一个增强的Example类来解决问题。
5n;H1H(Yb.AmoJAVA中文站社区门户(D*BS&zP6x;R
关于此问题的起源请阅读我以前的一个帖子:http://www.iteye.com/post/523791。在该帖子中已经实现了从HQL到QBC的转变,在这里就不再重复了。
z+MsO1f k+L`4RaJAVA中文站社区门户 h.C3h1Q m5r1_
在上一个帖子中没有模型类Product及Category的代码,为了方便讨论补充如下: JAVA中文站社区门户!iWY)ehYt&a2x(A
JAVA中文站社区门户 DP,o@+yLk

Java代码
1.public class Category {  
2.  private Long id;   3.  private String name; //类别名称   4. 
5.  //Other code omitted   6.}  
7. 
8.public class Product {   9.  private Long id;   10.  private String name;       //商品名称   11.  private Category category; //商品类别   12.  private Date expDate;      //有效期   13.  private Float price;       //单价   14. 
15.  //Other code omitted   16.} 
public class Category {
  private Long id;
  private String name; //类别名称

  //Other code omitted
}

public class Product {
  private Long id;
  private String name;       //商品名称
  private Category category; //商品类别
  private Date expDate;      //有效期
  private Float price;       //单价

  //Other code omitted
}
JAVA中文站社区门户a5W-F1vB(Qr

;k2du$W4n@/U Us/?Q&H从前一个帖子中可以看到,使用QBC后代码有所减少,但还是得把构造查询条件的代码写死,这非常不爽。重读了《Java Persistence with Hibernate》一书,发觉QBE是个好东东,于是尝试用改造代码如下: JAVA中文站社区门户K%d(j:Q~
JAVA中文站社区门户P;Uf,BO$[ZQB.U)X

Java代码
1.public List<Product> getProducts(Product product) {  
2.    final Example exampleProduct =   3.      Example.create(product).  
4.        enableLike(MatchMode.ANYWHERE).  
5.                   excludeZeroes();  
6. 
7.    return (List<Product>) getHibernateTemplate().execute(   8.      new HibernateCallback() {   9.        public Object doInHibernate(Session session) throws HibernateException {   10.            Criteria crit =  
11.              session.createCriteria(Product.class).   12.              add(exampleProduct);  
13.            return crit.list();   14.        }  
15.      }  
16.    );  
17.} 
 public List<Product> getProducts(Product product) {
  final Example exampleProduct =
    Example.create(product).
      enableLike(MatchMode.ANYWHERE).
                    excludeZeroes();

  return (List<Product>) getHibernateTemplate().execute(
    new HibernateCallback() {
      public Object doInHibernate(Session session) throws HibernateException {
       Criteria crit =
         session.createCriteria(Product.class).
         add(exampleProduct);
       return crit.list();
      }
    }
  );
 }

 

你可能感兴趣的:(java,html,Hibernate,J#)