返回

多数据源,玩转人大金仓数据库!

后端

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数据库

  1. 安装KingbaseES8并创建kingbase数据库和kingbase_user用户,并赋予其所有权限。
  2. 使用pgAdmin或Navicat等工具连接到KingbaseES8数据库。
  3. 创建表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

  1. 添加Mybatis依赖:
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>
  1. 配置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>
  1. 配置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

  1. 添加Springboot依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. 创建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);
    }
}
  1. 配置application.yml:
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/kingbase
    username: kingbase_user
    password: password

6. 配置Mybatis Generate

  1. 添加Mybatis Generate依赖:
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.5.0</version>
</dependency>
  1. 配置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>
  1. 执行命令生成实体类和映射文件:
mvn mybatis-generator:generate

7. 配置多数据源

  1. 添加数据源配置:
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);
    }
}
  1. 配置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配置多数据源。通过采用这种配置,开发者可以灵活地使用多个数据库,从而满足不同的业务需求。希望本教程能够为读者搭建多数据源项目提供帮助。

常见问题解答

  1. 如何切换不同的数据源?

    可以使用@DataSource注解指定要使用的特定数据源,例如:

    @Autowired
    @Qualifier("kingbaseJdbcTemplate")
    private JdbcTemplate kingbaseJdbcTemplate;
    
    @Autowired
    @Qualifier("pgSQLJdbcTemplate")
    private JdbcTemplate pgSQLJdbcTemplate;
    
    public void useKingbase() {
        // 使用kingbaseJdbcTemplate执行数据库操作
    }
    
    public void usePgSQL() {
        // 使用pgSQLJdbcTemplate执行数据库操作
    }
    
  2. 如何使用JdbcTemplate执行数据库操作?

    JdbcTemplate提供了一系列方便的方法来执行数据库操作,例如:

    • queryForList:查询结果并返回一个列表
    • queryForObject:查询结果并返回一个对象
    • update:执行更新