Springboot-mybatis多数据源
springboot-mybatis项目中需要连接多个数据库配合查询相关数据。
数据库有:mysql
、oralce
新建项目
- 新建项目,按照spingboot项目创建方式创建项目即可
- 添加依赖,个人习惯选择默认安装两个
Spring Web
、`Spring Boot DevTools``
项目结构
新建项目后,删除不必要的内容,添加项目文件结构
controller
: 控制层,提供对外的api
皆苦
dao
:数据访问层,提供对数据库的访问
service
:业务逻辑层,提供对业务逻辑的实现
pojo
:实体类
调用层次:controller
-> service
-> dao
配置pom.xml
依赖
找到pom.xml
文件,添加依赖。将相关依赖手动添加到pom.xml
文件中,然后刷新依赖,在网络情况不好的情况下有些慢。
mysql
数据库驱动oracle
数据库驱动mybatis
数据库访问框架mybatis-spring-boot-starter
mybatis数据库访问框架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节点
启动项目
启动成功后,会看到运行窗口的日志
使用api调用工具,可以调用接口测试看看是否正常。
连接oracle数据库测试,访问http://localhost:8099/lw-user
,返回数据为[User(Id=0001, Name=管理员2)]
连接mysql数据库测试,访问http://localhost:8099/user
,返回数据为[User(Id=1, Name=Lily), User(Id=2, Name=Poly)]