快速业务通道

JPA设计模式系列一 DAO Pattern in JPA - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
 this.date = date;}

DAO 接口

首先我们定义一个泛化的DAO接口,包括最常用的方法,比如:

public interface Dao<K, E> {        void persist(E entity);        void remove(E entity);        E findById(K id); }

K ,E为泛型,你可以加其他的方法比如:List findAll().

然后我们定义一个自接口,实现特殊的方法,比如,我们想查找一定条件的Order信息:

public interface OrderDao extends Dao<Integer, Order> {          List<Order> findOrdersSubmittedSince(Date date); }

JPA设计模式系列一 DAO Pattern in JPA(3)

时间:2011-12-08 BlogJava advincenting

基本DAO的实现

第三步就是创建基本的JPA DAO的实现。它实现了Dao接口。

public abstract class JpaDao<K, E> implements Dao<K, E> {          protected Class<E> entityClass;          @PersistenceContext          protected EntityManager entityManager;          public JpaDao() {                 ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();                 this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1];          }          public void persist(E entity) { entityManager.persist(entity); }          public void remove(E entity) { entityManager.remove(entity); }          public E findById(K id) { return entityManager.find(entityClass, id); }

上述实现是直接明了的,大家还要注意几点:

JpaDao的构造方法是通过ParameterizedType获取具体的实体类。

通过@PersistenceContext 获取EntityManager

entityClass和EntityManager是Protected类型,子类可以直接访问。

特殊的DAO实现

最后,我们创建特殊的DAO,它扩张了基本的DAO接口实现了OrderDAO接口

public class JpaOrderDao extends JpaDao<Integer, Order> implements OrderDao {          public List<Order> findOrdersSubmittedSince(Date date) {                 Query q = entityManager.createQuery(                         "SELECT e FROM " + entityClass.getName() + " e WHERE date >= :date_since");                 q.setParameter("date_since", date);                 return (List<Order>) q.getResultList();

DAO的使用

在EJB3中,

@EJB(name="orderDao") private OrderDao orderDao;

在Spring中,我们使用XML bean 文件,或者通过autowiring 如下:

@Autowired public OrderDao orderDao;

JPA设计模式系列一 DAO Pattern in JPA(4)

时间:2011-12-08 BlogJava advincenting

总之。当我们获取到了DAO的引用后,我们可以如下使用:

Order o = new Order(); o.setCustomerName("Peter Johnson"); o.setDate(new Date()); orderDao.persist(o);

当然,我们可以再OrderDao接口中加入其它的查询:

List<Order> orders = orderDao.findOrdersSubmittedSince(date); for (Order each : orders) {          System.out.println("order id = " + each.getI

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号