Springboot+mybatis-plus+druid多数据源

一、简介

     网上看了很多Mybatis的多数据源配置,使用aop或者编写配置类自定义数据源等等,感觉蛮复杂的,后面发现mybatis-plus配置多数据源方式很简单,就一个配置文件加@DS注解搞定,简单又好维护

      mybatis-plus作为mybatis的增强版,在维持Mybatis自带功能基础上扩展了新的功能,主要包括:

  • 提供CRUD方法:封装了一些通用的增删改查方法,包括批量操作,可以直接使用提供的接口调用
  • 代码生成器:比mybatis的好用
  • 条件构造器:通过EntityWrapper<T>可自行构造sql条件,可以理解为将sql语句转换为java代码

二、使用

  1. pom文件加入依赖
    <dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid-spring-boot-starter</artifactId>
    			<version>1.1.20</version>
    </dependency>
    
    <dependency>
    			<groupId>com.baomidou</groupId>
    			<artifactId>mybatis-plus-boot-starter</artifactId>
    			<version>3.3.2</version>
    </dependency>
    
    <dependency>
    			<groupId>com.baomidou</groupId>
    			<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    			<version>3.2.1</version>
    </dependency>

     

  2. applicaton文件进行配置

    mybatis-plus:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.example.demo.entity
      gloabl_config:
        db-config:
          #AUTO数据库ID自增,NONE若有手动设置主键值,则使用手动设置的值,如果没有,则使用雪花算法生成,INPUT insert前自行set主键值
          #ASSIGN_ID雪花算法分配ID,主键类型为Number或String,ASSIGN_UUID分配UUID,主键类型为String
          id-type: ASSIGN_UUID
          #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
          field-strategy: NOT_NULL
          #逻辑删除值
          logic-delete-value: -1
          logic-not-delete-value: 0
        #原生配置
        configuration:
          #数据库字段下划线转换为驼峰命名
          map-underscore-to-camel-case: true
          #是否开启缓存
          cache-enabled: false
          #字段为null也返回
          call-setters-on-nulls: true
          #传入Null值时设置转换类为空
          jdbc-type-for-null: 'null'
    spring:
      datasource:
        druid:
          validation-query: SELECT 1 FROM DUAL
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          stat-view-servlet:
            enabled: true
            url-pattern: /druid/*
            reset-enable: false
            login-username: admin
            login-password: admin
          filter:
            stat:
              enabled: true
              log-slow-sql: true
              slow-sql-millis: 1000
              merge-sql: false
            wall:
              enabled: true
              config:
                multi-statement-allow: true
          web-stat-filter:
            enabled: true
            url-pattern: /*
            exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
            profile-enable: true
            session-stat-enable: true
            session-stat-max-count: 200
            principal-cookie-name: USER_COOKIE
            principal-session-name: USER_SESSION
          aop-patterns: com.example.demo.service.*  # 如果有循环依赖导致报错,则需去掉此项配置,并启用DruidConfig
        dynamic:
          primary: master
          datasource:
            master:
              url: jdbc:oracle:thin:@xxxxxxx:Desendb
              username: xxxxx
              password: xxxxx
              driver-class-name: oracle.jdbc.OracleDriver
              type: com.alibaba.druid.pool.DruidDataSource
            slave_1:
              url: jdbc:oracle:thin:@xxxxxxx:Desendb
              username: xxxxx
              password: xxxxx
              driver-class-name: oracle.jdbc.OracleDriver
              type: com.alibaba.druid.pool.DruidDataSource

    上面贴出了一些常见的配置(连接数据库的信息已注释,自行配置),具体详情参考官网文档。这里配置多数据源时遇到了点小问题,mybatis-plus官方给的文档没有集成druid,导致运行一直报错,后来反复调整配置最终出来了这一版可用,druid和dynamic是同一级,并且下面的子项缩进也要注意,一不小心就遇坑。

  3. springboot启动类配置

    @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
    }

    这里加上 exclude = DruidDataSourceAutoConfigure.class 是因为DruidDataSourceAutoConfigure会默认帮我们配置单数据源,但是项目中现在用的又是多数据源起冲突了,所以加上这个配置就排除了druid数据源的自动配置

  4. 使用

    @Service
    @DS("master")
    public class TaskLogServiceImpl extends ServiceImpl<TaskLogDao, TaskLog> implements TaskLogService {
    
        @Override
        public Pagination<TaskLog> queryPage(Map<String, Object> params) {
            IPage<TaskLog> page = this.page(new PageBuilder<TaskLog>(params).build(), new QueryWrapper<>());
            return new Pagination<>(page);
        }
    
        @Override
        public List<TaskLog> getAll() {
            return this.baseMapper.getAll();
        }
    }

    使用@DS注解进行切换,括号里的值为在配置文件自定义的数据源名称,该注解可用用在类上或方法上,方法的优先级大于类,官方推荐加在service的实现类上,避免混乱

  5. 测试

        如果配置成功,启动时日志会输出相应的数据源信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置多数据源: 1. 在pom.xml中添加mybatis-plusdruid依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 2. 在application.yml中添加数据源配置: ```yaml spring: datasource: druid: one: url: jdbc:mysql://localhost:3306/one?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver two: url: jdbc:mysql://localhost:3306/two?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource #默认数据源 primary: one ``` 3. 在代码中使用@DS注解切换数据源: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @DS("one") @Override public User getUserById(Long id) { return userMapper.selectById(id); } @DS("two") @Override public User getUserByName(String name) { return userMapper.selectOne(new QueryWrapper<User>().eq("name", name)); } } ``` 配置分页插件: 1. 在pom.xml中添加分页插件依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> ``` 2. 在配置类中配置分页插件: ```java @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); return paginationInterceptor; } } ``` 3. 在controller层中使用分页: ```java @GetMapping("/users") public IPage<User> getUsers(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { Page<User> page = new Page<>(pageNum, pageSize); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", 1); return userService.page(page, queryWrapper); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值