使用 JPA 实施 Java 项目,JDBC 使用 Spring
Implement Java Project with JPA,JDBC using Spring
我有一个 java 项目,它与 JDBC(作为单例)和 MySQL 服务器一起工作。
我将项目转换为 JPA 项目,并使用来自同一 MySQL 服务器的整个实体实施 JPA class。我想使用 Spring API 来配置是使用 JDBC 还是 JPA 最好的方法是什么?假设我将在 spring 配置文件中将两者都配置为 bean。下一步是什么?我应该如何处理代码,一次使用 JPA,一次使用 JDBC。
提前致谢!
执行此操作的最佳方法是抽象您的 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 数据库管理器单例的 DAO 实现。
public abstract class JDBCDao implements Dao {
protected MyDBManager dbManager;
//delegate calls to db manager
现在实现所有特定于功能的 DAO;每个 JPA 基础 class 和 JDBC 基础 class。
实现一个 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
使用 -D
参数将开关传递给 JVM。
因此,例如,当您想要使用基于 JPA 的 DAO 时,您可以 运行 java 作为:
java -Ddao.config="myJPADaoFactory" <Your App>
如果您使用的是应用服务器,您需要编辑其特定的配置文件以传递-D参数。例如,在 tomcat 中,这可以通过 CATALINA_OPTS
变量设置。这在很大程度上取决于您使用的应用程序服务器。
我有一个 java 项目,它与 JDBC(作为单例)和 MySQL 服务器一起工作。 我将项目转换为 JPA 项目,并使用来自同一 MySQL 服务器的整个实体实施 JPA class。我想使用 Spring API 来配置是使用 JDBC 还是 JPA 最好的方法是什么?假设我将在 spring 配置文件中将两者都配置为 bean。下一步是什么?我应该如何处理代码,一次使用 JPA,一次使用 JDBC。
提前致谢!
执行此操作的最佳方法是抽象您的 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 数据库管理器单例的 DAO 实现。
public abstract class JDBCDao implements Dao {
protected MyDBManager dbManager;
//delegate calls to db manager
现在实现所有特定于功能的 DAO;每个 JPA 基础 class 和 JDBC 基础 class。 实现一个 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
使用 -D
参数将开关传递给 JVM。
因此,例如,当您想要使用基于 JPA 的 DAO 时,您可以 运行 java 作为:
java -Ddao.config="myJPADaoFactory" <Your App>
如果您使用的是应用服务器,您需要编辑其特定的配置文件以传递-D参数。例如,在 tomcat 中,这可以通过 CATALINA_OPTS
变量设置。这在很大程度上取决于您使用的应用程序服务器。