Web 应用程序:用于数据层的 DAO 和 JPA
Posted
技术标签:
【中文标题】Web 应用程序:用于数据层的 DAO 和 JPA【英文标题】:Web Application: DAO and JPA for data layer 【发布时间】:2011-12-13 14:02:40 【问题描述】:我正在尝试使用OWASP specification for hashing 进行安全登录以防止 SQLInjection,但对于我的应用程序的其他部分,我正在考虑使用 JPA,但我不知道使用混合,还是我应该坚持对所有数据层使用 DAO 并保持一致?
我也想知道同时使用 JPA 和 DAO 是否会导致运行时出现兼容性问题?
谢谢
【问题讨论】:
【参考方案1】:这是关于在使用 JPA 时使用 DAO 层是否有意义的讨论的答案。
How should EntityManager be used in a nicely decoupled service layer and data access layer?
我认为这同样适用于任何数据访问逻辑(例如登录)
【讨论】:
所以我应该只使用 DAO 进行身份验证,其余部分使用 JPA,因为我使用自定义查询更容易。 如上面的帖子中提到的,如果您的数据访问逻辑只涉及调用 EntityManager 的 crud 方法,我认为最好不包含 DAO,在这种情况下它只是EntityManager 不添加任何值。 好的,我现在明白了,你说得对,我应该只坚持 JPA。感谢您的澄清。【参考方案2】:最好的方法是您可以使用 DAO 来实现安全登录哈希目的。您的应用程序的其余部分可以使用 JPA。在我的项目中,我使用的是 Hibernate 而不是 JPA。
【讨论】:
好的,这不会导致任何兼容性问题吗?【参考方案3】:您的 DAO 应该是基于接口的,这意味着您可以通过插入新的实现来随意修改实现。客户端应该只知道 DAO 接口。
如果这是正确的,那么我不明白你的问题。你的 DAO 就是接口; JPA 将是您在众多实现中选择的一种。不是非此即彼;它是接口/实现。
【讨论】:
好吧,你说得清楚一些,“更清楚”,因为我打算使用接口来公开服务,但我认为 DAO 是实现而不是模式。以上是关于Web 应用程序:用于数据层的 DAO 和 JPA的主要内容,如果未能解决你的问题,请参考以下文章
java web spring jpa 在以接口为dao的方法里使用原生sql,联合查找没有对应实体,用啥来接收? 求大神