我正在创建一个Web应用程序,允许用户使用spring和hibernate通过GUI通过DB存储和检索数据库中的信息。
在创建DAO和服务层时,我陷入了困境。我想创建一种可以添加新交付的方法。在我的交货表中,我有 产品ID 和 客户ID ,它们都映射到各自的表,分别包含 产品名称,产品类型 和 客户名称,客户国家/地区 。
我遇到的问题是我希望最终用户通过输入 产品类型,产品名称,客户名称,客户国家和日期 来记录交货。我呢
(1)使用添加包含这些对象的新交付的方法创建DAO
要么
(2)创建一个仅将通用对象持久保存到数据库的DAO,然后使用服务方法为每个单独的对象实现DAO?
感谢您的帮助!
/ D
这是我的通用dao的片段,我将其插入到每个服务层类中。
@Component("Dao") public class Dao implements IDao { @Resource(name = "sessionFactory") private SessionFactory sessionFactory; @Override public <T> T save(final T o){ return (T) sessionFactory.getCurrentSession().save(o); } @Override public void delete(final Object object) { sessionFactory.getCurrentSession().delete(object); } @Override public <T> T get(final Class<T> type, final Long id) { return (T) sessionFactory.getCurrentSession().get(type, id); } @Override public <T> List<T> getFieldsEq(final Class<T> type, final Map<String, Object> restrictions) { final Session session = sessionFactory.getCurrentSession(); final Criteria crit = session.createCriteria(type); for (Map.Entry<String, Object> entry : restrictions.entrySet()) { crit.add(Restrictions.eq(entry.getKey(), entry.getValue())); } return crit.list(); } }
可以在服务层中使用哪种方法,如下所示:
@Transactional(readOnly = true) public List<City> getCities() { return dao.getAll(City.class); }
当然,您可以将dao扩展为特定的复杂查询。有一个通用的DAO服从 的责任原则单点 , DRY ,并使其更容易测试。事务应在服务层上,并直接与工作单元有关。