Skip to main content

Springboot-mybatis多数据源

springboot-mybatis项目中需要连接多个数据库配合查询相关数据。

数据库有:mysqloralce

新建项目

  1. 新建项目,按照spingboot项目创建方式创建项目即可

alt text

alt text

  1. 添加依赖,个人习惯选择默认安装两个Spring Web、`Spring Boot DevTools``

alt text

项目结构

新建项目后,删除不必要的内容,添加项目文件结构

controller: 控制层,提供对外的api皆苦 dao:数据访问层,提供对数据库的访问 service:业务逻辑层,提供对业务逻辑的实现 pojo:实体类

调用层次:controller -> service -> dao

alt text

配置pom.xml依赖

找到pom.xml文件,添加依赖。将相关依赖手动添加到pom.xml文件中,然后刷新依赖,在网络情况不好的情况下有些慢。

  • mysql数据库驱动
  • oracle数据库驱动
  • mybatis数据库访问框架
  • mybatis-spring-boot-startermybatis数据库访问框架
  • druid数据库连接池
  • dynamic-datasource-spring-boot-starter动态多数据源管理
  • lomok简化实体类代码依赖
  <!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池管理 druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<!-- Oracle驱动 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.8.0.0</version>
</dependency>
<!-- Oracle i18n 数据库编码 -->
<dependency>
<groupId>cn.easyproject</groupId>
<artifactId>orai18n</artifactId>
<version>12.1.0.2.0</version>
</dependency>
<!-- 动态多数据库管理 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- lombok 简化实体类代码依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

配置application.yml

resources目录下将application.pro*** 更改为 application.yml,以yml后缀名的文件,有结构层次直观方便。

可根据实际情况自行修改调整,简单配置如下

server:
port: 8099
spring:
datasource: # 多数据源管理
dynamic:
primary: primary # 默认的主数据源名称,名称跟下面的保持一致即可
strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
primary: # 数据源名称1,可以自行修改,后续dao层方便引用
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://101.34.172.113:3306/mybatis
username: root
password: 1234qwer/.,m
driver-class-name: com.mysql.cj.jdbc.Driver
secondary: # 数据源名称2,可以自行修改,后续dao层方便引用
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:oracle:thin:@101.34.172.113:1521:his
username: xthis
password: xthis
driver-class-name: oracle.jdbc.driver.OracleDriver

mybatis: # 配置mybatis对应的xml
type-aliases-package: jianjun.mybatisdemo.pojo
mapper-locations: classpath:/mybatis/*.xml

logging:
file:
name: log/log.log
level:
root: info
jianjun: debug

pojo实体类

需要导入lombok相关类,自动生成一些getter、setter、toString方法

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String Id;
private String Name;
}

dao

需要使用 Mapper、Repository、DS 注解

  • Mapper 用于mybatis访问数据库
  • Repository 交由springboot框架访问数据库
  • DS 用于指定数据源
import com.baomidou.dynamic.datasource.annotation.DS;
import jianjun.mybatisdemo.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface UserDao {

@DS("primary")
public List<User> listUser();

@DS("secondary")
public List<User> listUserLw();
}

service

需要使用 @Service 注解,交由springboot框架管理

public interface UserService {
public List<User> selectUser();
public List<User> selectUserLw();
}

@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;

@Override
public List<User> selectUser() {
return userDao.listUser();
}

public List<User> selectUser() {
return userDao.listUserLw();
}
}

controller

需要使用 @Controller 注解,交由springboot框架管理

@Controller
public class UserController {
@Autowired
private UserService userService;

@GetMapping("/user")
@ResponseBody
public String listUser(){
return userService.selectUser().toString();
}

@GetMapping("/lw-user")
@ResponseBody
public String lwlistUser(){
return lwuserService.selectUserLw().toString();
}
}

mybatis配置文件

  • 在resources目录下新建mybatis文件夹,在文件夹下新建UserMapper.xml文件,内容如下。
  • 配置文件需要使用mapper标签,指定namespace属性,指定UserDao接口的包路径,指定resultType属性,指定返回类型。
  • select标签用于指定查询方法,指定id属性,指定resultType属性,指定返回类型。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="jianjun.mybatisdemo.dao.UserDao">

<select id="listUser" resultType="jianjun.mybatisdemo.pojo.User">
select * from mybatis.user
</select>

<select id="listUserLw" resultType="jianjun.mybatisdemo.pojo.User">
select EMPNO_CHR id,lastname_vchr as name from T_BSE_EMPLOYEE where EMPNO_CHR = '0001'
</select>
</mapper>

如果安装了mybatisX插件,可以在xml文件中使用自动提示功能插件,可以在xml文件上右键,选择Generate MyBatis XML,自动生成xml文件。也有小鸟的图标,点击后能自动跳转到相关xml文件,或者select节点

alt text

启动项目

启动成功后,会看到运行窗口的日志

alt text

使用api调用工具,可以调用接口测试看看是否正常。

连接oracle数据库测试,访问http://localhost:8099/lw-user,返回数据为[User(Id=0001, Name=管理员2)]

alt text

连接mysql数据库测试,访问http://localhost:8099/user,返回数据为[User(Id=1, Name=Lily), User(Id=2, Name=Poly)]

alt text