2012年2月2日星期四

NetBeans_006:开发JavaEE 6 应用之六:使用Critieria API访问数据库

前面实验用到的查询方式使用的是Named Query,这是一种基于String的查询方式。
现在我们使用Critieria API来查询,这是一种面向对象的查询方式。

1. 生成元数据模型类
右键项目,选择清理并生成,会生成一些类,类的名字结尾都是下划线:—。


NetBeans使用EclipseLink来生成这些元数据模型类。

比如,Address_.java内容如下:
package org.glassfish.samples.entities;

import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
import org.glassfish.samples.entities.MicroMarket;

@Generated(value="EclipseLink-2.3.0.v20110604-r9504", date="2012-01-23T10:54:15")
@StaticMetamodel(Address.class)
public class Address_ { 

    public static volatile SingularAttribute
addressline2; public static volatile SingularAttribute
zip; public static volatile SingularAttribute
addressline1; public static volatile SingularAttribute
state; public static volatile SingularAttribute
city; }

2. 在CustomerSessionBean中增加一个方法:getCustomers2
这里我们使用的是Criteria API,可以看出完全是面向对象的操作。
  public List getCustomers2() {
        CriteriaBuilder builder = em.getCriteriaBuilder();
        CriteriaQuery criteria = builder.createQuery(Customer.class);
        // FROM clause
        Root root = criteria.from(Customer.class);
        // SELECT clause
        criteria.select(root);
        // No WHERE clause
        // FIRE query
        TypedQuery query = em.createQuery(criteria);
        // PRINT result
        return query.getResultList();
    }

3. 修改TestServlet,替换getCustomers为getCustomers2
List result = bean.getCustomers2();

4. 运行TestServlet,效果应该和使用Named Query结果相同。

没有评论: