返回
多数据源,玩转人大金仓数据库!
后端
2023-04-09 12:42:41
Springboot+Mybatis+Mybatis Generate+KingbaseES8(pgSQL)多数据源配置攻略
1. 前言
Springboot凭借其简单易用和快速开发的特性,备受开发者青睐。Mybatis是一款出色的ORM框架,能够帮助开发者高效地完成数据持久层开发。KingbaseES8作为国产数据库,凭借其卓越的性能和稳定性,成为众多企业的首选。本篇教程将详细介绍如何使用Springboot、Mybatis、Mybatis Generate和KingbaseES8(pgSQL)搭建一个多数据源项目。
2. 搭建环境
- JDK 1.8+
- Springboot 2.6.7
- Mybatis 3.5.9
- Mybatis Generate 1.5.0
- KingbaseES8 9.2.0.45
- pgSQL 12.9
- IDEA
3. 配置KingbaseES8数据库
- 安装KingbaseES8并创建kingbase数据库和kingbase_user用户,并赋予其所有权限。
- 使用pgAdmin或Navicat等工具连接到KingbaseES8数据库。
- 创建表user:
CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);
4. 配置Mybatis
- 添加Mybatis依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
- 配置mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://localhost:5432/kingbase"/>
<property name="username" value="kingbase_user"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 配置UserMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="selectAll" resultType="com.example.demo.entity.User">
SELECT * FROM user;
</select>
<insert id="insert" parameterType="com.example.demo.entity.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password});
</insert>
<update id="update" parameterType="com.example.demo.entity.User">
UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id};
</update>
<delete id="delete" parameterType="int">
DELETE FROM user WHERE id = #{id};
</delete>
</mapper>
5. 配置Springboot
- 添加Springboot依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 创建Application.java:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 配置application.yml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/kingbase
username: kingbase_user
password: password
6. 配置Mybatis Generate
- 添加Mybatis Generate依赖:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.5.0</version>
</dependency>
- 配置mybatis-generator.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="default" targetRuntime="MyBatis3">
<jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://localhost:5432/kingbase" userId="kingbase_user" password="password"/>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.example.demo.entity" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.demo.mapper" targetProject="src/main/resources/mapper"/>
<table tableName="user" domainObjectName="User"/>
</context>
</generatorConfiguration>
- 执行命令生成实体类和映射文件:
mvn mybatis-generator:generate
7. 配置多数据源
- 添加数据源配置:
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean(name = "kingbaseDataSource")
@Qualifier("kingbaseDataSource")
@ConfigurationProperties(prefix = "spring.datasource.kingbase")
public DataSource kingbaseDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "pgSQLDataSource")
@Qualifier("pgSQLDataSource")
@ConfigurationProperties(prefix = "spring.datasource.pgSQL")
public DataSource pgSQLDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "kingbaseJdbcTemplate")
public JdbcTemplate kingbaseJdbcTemplate(
@Qualifier("kingbaseDataSource") DataSource kingbaseDataSource) {
return new JdbcTemplate(kingbaseDataSource);
}
@Bean(name = "pgSQLJdbcTemplate")
public JdbcTemplate pgSQLJdbcTemplate(
@Qualifier("pgSQLDataSource") DataSource pgSQLDataSource) {
return new JdbcTemplate(pgSQLDataSource);
}
}
- 配置application.yml:
spring:
datasource:
kingbase:
url: jdbc:postgresql://localhost:5432/kingbase
username: kingbase_user
password: password
pgSQL:
url: jdbc:postgresql://localhost:5432/pgSQL
username: pgSQL_user
password: password
结论
本教程详细介绍了如何在Springboot项目中使用Mybatis、Mybatis Generate、KingbaseES8和pgSQL配置多数据源。通过采用这种配置,开发者可以灵活地使用多个数据库,从而满足不同的业务需求。希望本教程能够为读者搭建多数据源项目提供帮助。
常见问题解答
-
如何切换不同的数据源?
可以使用
@DataSource
注解指定要使用的特定数据源,例如:@Autowired @Qualifier("kingbaseJdbcTemplate") private JdbcTemplate kingbaseJdbcTemplate; @Autowired @Qualifier("pgSQLJdbcTemplate") private JdbcTemplate pgSQLJdbcTemplate; public void useKingbase() { // 使用kingbaseJdbcTemplate执行数据库操作 } public void usePgSQL() { // 使用pgSQLJdbcTemplate执行数据库操作 }
-
如何使用JdbcTemplate执行数据库操作?
JdbcTemplate提供了一系列方便的方法来执行数据库操作,例如:
queryForList
:查询结果并返回一个列表queryForObject
:查询结果并返回一个对象update
:执行更新