我正在创建一个 Web 应用程序,让用户使用 spring 和 hibernate 通过 GUI 存储和检索数据库中的信息。
在创建 DAO 和服务层时我陷入了困境。我想创建一个可以添加新交付的方法。在我的交货表中我有产品编号 and 客户ID两者都映射到自己的表,其中包含产品名称、产品类型 and 客户名称、客户国家/地区分别。
我遇到问题的部分是我希望最终用户通过输入来记录交付产品类型、产品名称、客户名称、客户国家/地区和日期. Do I,
(1) 创建一个 DAO,其中包含添加包含这些对象的新交付的方法
or
(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。有一个通用的道服从单点责任原则, DRY,并使其更容易测试。事务应该位于服务层并与工作单元直接相关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)