【问题标题】:Implement Java Project with JPA,JDBC using Spring使用 JPA 实现 Java 项目,使用 Spring 的 JDBC
【发布时间】:2015-06-27 11:10:35
【问题描述】:

我有一个使用 JDBC(作为单例)和 MySQL 服务器的 java 项目。 我将项目转换为 JPA 项目,并使用来自同一 MySQL 服务器的整个实体实现了 JPA 类。我想使用 Spring API 来配置是使用 JDBC 还是 JPA 最好的方法是什么?假设我将在 spring 配置文件中将两者配置为 bean。接下来是什么?我应该如何处理代码以使用 JPA 和使用 JDBC 一次。

提前致谢!

【问题讨论】:

  • 我被要求实现这两种技术。通过使用 Spring,我将选择我想使用其中的哪一个。

标签: java spring jpa jdbc


【解决方案1】:

最好的方法是抽象你的 DAO 层。您提供如下界面:

public interface Dao {
      void persist(E entity);
      void remove(E entity);
      E findById(K id);
}

提供它的抽象实现为

public abstract class JpaDao implements Dao {
    protected Class entityClass;

    @PersistenceContext
    protected EntityManager entityManager;
    //so on.. and delegate calls to entity manager.

现在提供另一个依赖于 JDBC DB 管理器单例的 DAO 实现。

public abstract class JDBCDao implements Dao {
        protected MyDBManager dbManager;
        //delegate calls to db manager

现在实现所有特定于功能的 DAO;分别用于 JPA 基类和 JDBC 基类。 实现一个abstract factory,它可以根据您需要 JPA 家族还是 JDBC 家族来为您创建各种 DAO。

完成后,使用工厂定义您的 daos,例如:

<!-- factory instance to create JPA family of DAOs -->
<bean id="myJPADaoFactory"
  class="AbstractDAOFactory"> 
  <!--other init  parameters specific to JPA -->

<!-- factory instance to create JDBC family of DAOs -->
<bean id="myJDBCaoFactory"
  class="AbstractDAOFactory"> 
  <!-- other init  parameters specific to JDBC -->

现在将您的 DAO bean 定义为:

<bean id="exampleDaoBean"
      factory-bean="#{systemProperties.dao.config}"
      factory-method="createExampleDAO"/>

注意,factory-bean 是一个动态参数,要从System.properties 加载

当您启动应用程序时,使用参数 dao.config 将开关传递给 JVM,并使用 -D 参数。

因此,例如,当您想使用基于 JPA 的 DAO 时,您可以将 java 运行为: java -Ddao.config="myJPADaoFactory" &lt;Your App&gt;

如果您使用的是应用服务器,则需要编辑其特定的配置文件以传递 -D 参数。例如,在 tomcat 中,这可以通过 CATALINA_OPTS 变量设置。这在很大程度上取决于您使用的应用服务器。

【讨论】:

  • 我忘了提到我已经有了 JPA 和 JDBC 的接口。你的回答很好很简单。我想从spring配置文件中导入并将其投射到界面中。一旦我有了实例,我就调用方法。它正是你回答的!谢谢!
  • dao.config 文件是什么??它是 Spring 的一部分吗?
  • 没有 dao.config 只是一个属性键。您从 java 命令“-D”参数传递的值。作为-Ddao.config="myJPADaoFactory"
  • 我不使用 CMD 运行我的应用程序。还重要吗?
  • 这个想法怎么样:当使用 Spring API -> ApplicationContext theContext = new ClassPathXmlApplicationContext("any name.xml");我的接口 obj = (我的接口)theContext.getBean("JPA Manager");我的接口 obj2 = (我的接口)theContext.getBean("JDBC Manager");
猜你喜欢
  • 2016-09-08
  • 2017-11-07
  • 1970-01-01
  • 2016-09-18
  • 2019-10-28
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 2012-12-22
相关资源
最近更新 更多