gpt4 book ai didi

java - 使用来自多个表的信息来记录交付的通用或特定 DAO?

转载 作者:行者123 更新时间:2023-12-01 05:22:33 25 4
gpt4 key购买 nike

我正在创建一个 Web 应用程序,让用户使用 spring 和 hibernate 通过 GUI 存储和检索数据库中的信息。

在创建 DAO 和服务层时我陷入了困境。我想创建一个可以添加新交付的方法。在我的交货表中,我有产品ID客户ID,它们都映射到自己的表,其中包含产品名称、产品类型>分别是客户名称、客户国家/地区。

我遇到问题的部分是我希望最终用户通过输入产品类型、产品名称、客户名称、客户国家/地区和日期来记录交货。我是吗,

(1) 使用添加包含这些对象的新交付的方法创建 DAO

(2) 创建一个仅将通用对象持久化到数据库的 DAO,然后使用服务方法为每个单独的对象实现 DAO?

感谢您的帮助!

/D

最佳答案

这是我的通用 dao 的片段,我将其注入(inject)到每个服务层类中。

@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,并且更容易测试。事务应该位于服务层并与工作单元直接相关。

关于java - 使用来自多个表的信息来记录交付的通用或特定 DAO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10173331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com