Springboot+MybatisPlust+ControllerAdvice ;Mybatis_Plus多数据源,controller统一异常返回


Springboot+MybatisPlus多数据源+controller全局异常返回

1、多数据源

1.1 添加依赖

<?xml version="1.0" encoding="UTF-8"?>

        4.0.0

    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.5
         
    
    com.mybatis_plus
    mybatisplus
    0.0.1-SNAPSHOT
    mybatisplus
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.3
        
        
            com.mybatiplus
            demo
            0.0.1-SNAPSHOT
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            com.baomidou
            mybatis-plus-boot-starter
            3.3.2
        

        
            mysql
            mysql-connector-java
            8.0.21
        

        
            org.projectlombok
            lombok
            1.18.12
        

        
            com.baomidou
            mybatis-plus-generator
            3.4.1
        
        
            com.baomidou
            mybatis-plus-core
            3.4.1
        
        
        
        
            org.springframework.boot
            spring-boot-actuator
        
        
            org.apache.velocity
            velocity-engine-core
            2.0
        
        
            org.springframework.boot
            spring-boot-autoconfigure
            2.4.5
            compile
        
        
            org.codehaus.jettison
            jettison
            1.4.0
            test
        

        
            com.baomidou
            dynamic-datasource-spring-boot-starter
            3.2.1
        
        
            org.codehaus.jettison
            jettison
            1.4.0
            compile
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
        
            
                src/main/java
                
                    **/*.xml
                
                false
            
        
    


1.2 MybatisPlus代码生成器

public class SggCodeGenerator {

    public static void main(String[] args) {

        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 2、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/mybatisplus/src/main/java");
        gc.setAuthor("ken");
        gc.setOpen(false); //生成后是否打开资源管理器
        gc.setFileOverride(false); //重新生成时文件是否覆盖
        gc.setServiceName("%sService"); //去掉Service接口的首字母I
        gc.setIdType(IdType.ID_WORKER_STR); //主键策略
        gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
        gc.setSwagger2(false);//开启Swagger2模式

        mpg.setGlobalConfig(gc);

        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/vhr?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(null); //模块名
        pc.setParent("com.ken.hr");
        pc.setController("controller");
        pc.setEntity("entity");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);

        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("hr");//对那一张表生成代码
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀

        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

        mpg.setStrategy(strategy);

        // 6、执行
        mpg.execute();
    }
}

1.3 mapper.xml

<?xml version="1.0" encoding="UTF-8"?>







    



    



    



    

    





1.4 dao

package com.ken.role.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ken.role.entity.Role;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**

 * @author ken
 * @since 2021-05-16
 */

@Mapper
public interface RoleMapper extends BaseMapper {


    /**
     *
     * 查询所有的Role
     *
     * @return
     */
    List> testReturnListMap() ;


    /**
     *
     * 通过ID查询记录
     * @param id
     * @return
     */
    List>  testReturnListMapById(@Param("id") Integer id);



    /**
     *
     * 通过ID查询记录
     * @param id
     * @return
     */
    List> exePro(@Param("id") Integer id);


    /**
     * 通过ID查询记录
     * @param role
     * @return
     */

    @DS("master")
    List> exeProByName(Role role);



}

1.5 Yml

server:
  port: 9009

mybatis-plus:
  mapper-locations: classpath:com/ken/role/mapper/xml/*.xml
  configuration:
    default-statement-timeout: 3

spring:
  application:
    name: mybatis_plus
  datasource:
    dynamic:
      primary: master  #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:      #默认数据源
          url: jdbc:mysql://localhost:3306/vhr?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false
          username: root
          password: root
          driver-calss-name: com.mysql.cj.jdbc.Driver

        db02:
          url: jdbc:mysql://localhost:3306/demo2?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false
          username: root
          password: root
          driver-calss-name: com.mysql.cj.jdbc.Driver

        db03:
          url: jdbc:mysql://localhost:3306/demo?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false
          username: root
          password: root
          driver-calss-name: com.mysql.cj.jdbc.Driver

2. 注意点:

  1. pom.xml 里面必须增加resources 指定Mapper.xml的位置,不然会提示找不到mapper

  2. 在Yml配置里面里面增加mybatis locations 也可以

  3. controller需要在启动类加上

    image-20210518212855100

  4. controller全局异常需要

    @Bean
    MyExceptionHandler myExceptionHandler(){
    
        return  new MyExceptionHandler();
    }
    

    不然全局异常类和controller要放到一个package上面