简单CRUD的EJB 3会话Bean设计
我正在编写一个应用程序,它的唯一目的是为了维护数据库中的记录而进行CRUD操作。 某些表/实体之间存在关系。 我见过的用于创建会话bean的大多数示例都涉及与我没有的许多实体交互的复杂业务逻辑/操作。
由于我的应用程序非常基础,会话bean的最佳设计是什么?
我想每个实体有一个会话bean,它有CRUD定义的方法。 然后我想把所有这些会话bean组合成一个会话bean。 然后我发现这个博客条目很吸引人,但我必须承认我不了解所有这些(什么是ServiceFacade?)。
我倾向于会话bean /实体类,但希望听到更多有经验的意见。
谢谢。
哎呀,这是博客链接: http : //www.adam-bien.com/roller/abien/entry/generic_crud_service_aka_dao
不确定你在谈论什么博客条目:)但在你的特殊情况1 ,我可能会使用一个会话bean实现类似于以下的接口:
public interface GenericCrudService { public T create(T t); public T find(Class type, Object id); public void delete(T t); public T update(T t); public List findWithNamedQuery(String queryName); public List findWithNamedQuery(String queryName, int resultLimit); public List findWithNamedQuery(String namedQueryName, Map parameters); public List findWithNamedQuery(String namedQueryName, Map parameters, int resultLimit); public List findWithNativeQuery(String sql, Class type); }
豆子将如下:
@Stateless @Remote(GenericCrudService.class) @TransactionAttribute(TransactionAttributeType.MANDATORY) public class GenericCrudServiceBean implements GenericCrudService { @PersistenceContext private EntityManager em; @Override public T create(T t) { em.persist(t); return t; } @Override public T find(Class type, Object id) { return em.find(type, id); } @Override public void delete(T t) { t = em.merge(t); em.remove(t); } @Override public T update(T t) { return em.merge(t); } @Override public List findWithNamedQuery(String queryName) { return em.createNamedQuery(queryName).getResultList(); } @Override public List findWithNamedQuery(String queryName, int resultLimit) { return em.createNamedQuery(queryName).setMaxResults(resultLimit) .getResultList(); } @Override public List findWithNamedQuery(String namedQueryName, Map parameters) { return findWithNamedQuery(namedQueryName, parameters, 0); } @Override public List findWithNamedQuery(String namedQueryName, Map parameters, int resultLimit) { Query query = this.em.createNamedQuery(namedQueryName); if(resultLimit > 0) { query.setMaxResults(resultLimit); } for (Map.Entry entry : parameters.entrySet()) { query.setParameter(entry.getKey(), entry.getValue()); } return query.getResultList(); } @Override @SuppressWarnings("unchecked") public List findWithNativeQuery(String sql, Class type) { return em.createNativeQuery(sql, type).getResultList(); } }
也可以看看
- 使用Java EE 5的通用CRUD组件
- 不要重复DAO! – 使用Hibernate和Spring DAO构建generics类型安全DAO
1大多数应用程序不应将原始CRUD直接暴露给客户端,而是将CRUD屏蔽在实现业务规则和封装对域存储( EntityManager
)的访问的服务之后。
- 从无状态Bean中获取JDBC Connection对象
- 在测试中模拟EJB注入
- 如果将Jboss AS 7中的jdbc部署为Web应用程序,那么模块名称是什么
- 从JSF中的Datatable获取选定的行数据
- 为什么我们必须在扩展的PersistenceContext中手动flush()EntityManager?
- “本地事务已经有1个非XA资源:无法添加更多资源”错误
- 无法使用资源注释在JBoss 6.1.0中注入JMS QueueConnectionFactory
- java.lang.NoClassDefFoundError:无法初始化类org.hibernate.ejb.Ejb3Configuration
- EntityBean,SessionBean,databean和accessbean