前面实验用到的查询方式使用的是Named Query,这是一种基于String的查询方式。
现在我们使用Critieria API来查询,这是一种面向对象的查询方式。
1. 生成元数据模型类
右键项目,选择清理并生成,会生成一些类,类的名字结尾都是下划线:—。
NetBeans使用EclipseLink来生成这些元数据模型类。
比如,Address_.java内容如下:
2. 在CustomerSessionBean中增加一个方法:getCustomers2
这里我们使用的是Criteria API,可以看出完全是面向对象的操作。
3. 修改TestServlet,替换getCustomers为getCustomers2
List result = bean.getCustomers2();
4. 运行TestServlet,效果应该和使用Named Query结果相同。
现在我们使用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 ListgetCustomers2() { 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
4. 运行TestServlet,效果应该和使用Named Query结果相同。
没有评论:
发表评论