当前位置: 首页 > 面试题库 >

通用DAO或特定DAO记录带有多个表的信息的传递?

商华藏
2023-03-14
问题内容

我正在创建一个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
,并使其更容易测试。事务应在服务层上,并直接与工作单元有关。



 类似资料:
  • 问题内容: 我的web应用程序已经得到了很多服务表/实体,如,,,等。 每次添加新实体时,都必须编写一个DAO。问题是,它们基本上是相同的,但是唯一的区别是 实体类本身 。 我知道Hibernate工具可以自动为我生成代码,但是我现在不能使用它们(不要问为什么),所以我想到了 Generic DAO 。关于这方面有很多文献,但我无法整理并使其与Spring一起使用。 我认为这全都是关于泛型的,它将

  • 问题内容: 这有道理吗? 假设我需要从数据库中获取一个与另一个对象有关系的对象(由数据库中的外键以及域对象中的组合表示)。如果在我的第一个DAO中,我获取对象1的数据,则调用对象2的dao,最后(从第一个DAO中,调用对象1中的setter,并为其提供先前获取的对象2)。 我知道我可以代替加入连接,但是对我来说,断开功能耦合似乎更合乎逻辑(这就是为什么我对从另一个调用一个dao持怀疑态度)。还是应

  • 问题内容: 在使用hibernate时,我们将遵循Hibernate Doc中提到的通用Hibernate DAO模式。 因此,据此,我们目前为接口2)维护两个并行的层次结构1)以实现 因此,即使我们在标准持久性方法之外没有提出任何新方法的情况下以这种方式进行工作,我们也需要为该对象及其实现创建标记界面。 尽管这种方法及其明确的分隔似乎没有问题。 我的问题是是否有更好的方法/替代方法来实现这一目标

  • 问题内容: 我的web应用程序已经得到了很多服务表/实体,如,,,等。 每次添加新实体时,都必须编写一个DAO。问题是,它们基本上是相同的,但是唯一的区别是 实体类本身 。 我知道Hibernate工具可以为我自动生成代码,但是我现在不能使用它们(不要问为什么),所以我想到了 Generic DAO 。关于这方面有很多文献,但我无法整理并使其与Spring一起使用。 我认为这全都是关于泛型的,它将

  • 我的项目有问题 线程“main”组织中出现异常。jboss。焊接例外情况。DeploymentException:WELD-001408:JpaDAO类型与限定符@Default在注入点[BackedAnnotatedField]@InjectPrivate teste的未满足依赖关系。看法最重要的刀 JpaDAO(仅用于测试,未完全实现): 我的: 还有我的: 我做错了什么?

  • 我知道有很多问题涉及这个主题,但我不知道如何达到以下要求。 问题1:是否可以使用包装器对象实现这样的映射?(参见所引用问题的第一个答案-@modelattribute) 问题2:使用上述问题中回答的以下控制器方法 我假设它适用于单个文件。如何定义/描述请求部分以实现或[]? 提前道谢!