SpringMVC 连接多个 MySQL 数据库
在开发 Web 应用中,我们常常需要连接多个数据库,来处理不同的数据操作。本文将介绍如何在 SpringMVC 中连接多个 MySQL 数据库,并提供相应的代码示例。
准备工作
在开始之前,我们需要先做一些准备工作:
- 确保已经安装好了 JDK 和 MySQL 数据库。
- 创建两个数据库,并分别为它们创建两个表。假设我们的数据库名为
db1
和db2
,每个数据库都有一个名为users
的表,表结构如下:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
配置数据源
首先,我们需要在 Spring 的配置文件中配置两个数据源,分别对应两个 MySQL 数据库。假设我们的 Spring 配置文件为 spring-config.xml
,请参考以下示例代码:
<beans xmlns="
xmlns:xsi="
xmlns:context="
xmlns:jdbc="
xsi:schemaLocation="
<!-- 配置第一个数据源 -->
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db1" />
<property name="username" value="root" />
<property name="password" value="password" />
</bean>
<!-- 配置第二个数据源 -->
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db2" />
<property name="username" value="root" />
<property name="password" value="password" />
</bean>
<!-- 配置第一个 JdbcTemplate -->
<bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource1" />
</bean>
<!-- 配置第二个 JdbcTemplate -->
<bean id="jdbcTemplate2" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource2" />
</bean>
</beans>
在上述代码中,我们配置了两个数据源 dataSource1
和 dataSource2
,分别对应 db1
和 db2
数据库。我们还配置了两个 JdbcTemplate
,分别对应两个数据源。
编写数据访问层代码
接下来,我们需要编写数据访问层代码,使用 JdbcTemplate
来操作数据库。请参考以下示例代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class UserRepository {
private final JdbcTemplate jdbcTemplate1;
private final JdbcTemplate jdbcTemplate2;
@Autowired
public UserRepository(JdbcTemplate jdbcTemplate1, JdbcTemplate jdbcTemplate2) {
this.jdbcTemplate1 = jdbcTemplate1;
this.jdbcTemplate2 = jdbcTemplate2;
}
public void addUserToDb1(String name, String email) {
jdbcTemplate1.update("INSERT INTO users (name, email) VALUES (?, ?)", name, email);
}
public void addUserToDb2(String name, String email) {
jdbcTemplate2.update("INSERT INTO users (name, email) VALUES (?, ?)", name, email);
}
}
在上述代码中,我们创建了一个名为 UserRepository
的数据访问层类。通过构造函数注入了两个 JdbcTemplate
,分别对应两个数据源。我们提供了两个方法 addUserToDb1
和 addUserToDb2
,用于向 db1
和 db2
数据库的 users
表中插入数据。
编写控制器代码
最后,我们需要编写一个控制器类,用于接收用户请求