• Springboot + mybatisPLus 多数据源


    参考: https://www.bilibili.com/video/BV17E411N7KN?p=14

    mybatisPLus 是mybatis的升级版,mybatis的功能都继承了都可以同样的使用

    目录

    MyBatisPlusConfig
    package com.config;
    
    import com.baomidou.mybatisplus.core.injector.ISqlInjector;
    import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    
    @Configuration
    @MapperScan("com.mapper")
    public class MyBatisPlusConfig {
    
        //分页插件
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
        //逻辑删除插件
        @Bean
        public ISqlInjector sqlInjector() {
            return new LogicSqlInjector();
        }
    
    //    sql执行效率插件
        @Bean
        @Profile({"dev","test"}) //设置dev、test环境开启
        public PerformanceInterceptor PerformanceInterceptor(){
            PerformanceInterceptor PerformanceInterceptor = new PerformanceInterceptor();
            PerformanceInterceptor.setMaxTime(1111);//设置sql执行的最大时间,如果超过了则不执行,抛异常
            PerformanceInterceptor.setFormat(true); //开启sql格式化
            return PerformanceInterceptor;
        }
    }
    
    UserMapper
    package com.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.pojo.User;
    import org.apache.ibatis.annotations.Select;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public interface UserMapper extends BaseMapper<User> {
    
    
        @Select("select * from user,user2  where user.id=user2.id")
        List<User> getUserById3();
    
        @Select("DELETE FROM User WHERE id = 3")
        List<User> getUserById2();
    
    }
    

      

    User
    帅爷说如果使用联表查这里里面的字段就要自定义去加
    package com.pojo;
    
    import com.baomidou.mybatisplus.annotation.TableLogic;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private int id;
        private String message;
        @TableLogic() //逻辑删除
        private Integer deleted;
    
    }
    

      

    MyBatisPlusApplication
    package com;
    
    import org.apache.ibatis.annotations.Mapper;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @MapperScan("com.mapper")
    @SpringBootApplication
    public class MyBatisPlusApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyBatisPlusApplication.class, args);
        }
    
    }
    

      

    application.yml

    ### 应用名称
    ##spring.application.name=Mybatis_7_20
    ##下面这些内容是为了让MyBatis映射
    ##指定Mybatis的Mapper文件
    #mybatis:
    #  mapper-locations: classpath:/mapper/*xml
    ##指定Mybatis的实体目录
    #  type-aliases-package: com.entity
    
    spring:
      #设置开发环境
      profiles:
        active: dev
        ## 数据库驱动:
    #    第一个数据库
      datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
      # 数据库连接地址
          url: jdbc:mysql://localhost:3306/datademo?serverTimezone=UTC
      # 数据库用户名&密码:
          username: root
          password: 669988
    
    #配置日志
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
    #逻辑删除
      global-config:
        db-config:
          logic-delete-value: 1 # 逻辑已删除值(默认为 1)
          logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    
    # 应用服务 WEB 访问端口
    server:
      port: 8180
    

      

    MyBatisPlusApplicationTests
    package com;
    
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.mapper.UserMapper;
    import com.pojo.User;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.util.List;
    
    @SpringBootTest
    class MyBatisPlusApplicationTests {
    
        @Autowired
        private UserMapper  userMapper;
    
    
        @Test
    //    查询所有
        void contextLoads() {
            List user = userMapper.getUserById3();
            user.forEach(System.out::println);
        }
    
        @Test
    //    查询所有
        void contextLoads3() {
            List<User> user = userMapper.selectList(null);
            user.forEach(System.out::println);
        }
    //
    //    @Test
    ////    带id条件查询
    //    void testselectid() {
    //        User user = userMapper.selectById(1);
    //        System.out.println(user);
    //    }
    //
    //    @Test
    ////    in条件查询
    //    void testselectidList() {
    //        List<User> user = userMapper.selectBatchIds(Arrays.asList(1,2,3,4,5,6));
    //        user.forEach(System.out::println);
    //    }
    //
    //    @Test
    ////    按条件查询
    //    public void testselectidBatchids() {
    //        HashMap<String,Object> map=new HashMap<>();
    //        map.put("id",2);
    //        map.put("message","你好");
    //        List<User> user =userMapper.selectByMap(map);
    //        user.forEach(System.out::println);
    //    }
    //
    //    // 插入
    //    @Test
    //    public void testInsert() {
    //       User user=new User();
    //       user.setMessage("kaibin666");
    //       int result=userMapper.insert(user);
    //       System.out.println(result); //受影响的行数
    //       System.out.println(user);
    //    }
    
    //    // 更新
    //    @Test
    //    public void testUpdata() {
    //        User user=new User();
    ////        user.setId(6);
    //        user.setMessage("hahah");
    //        int result=userMapper.updateById(user);
    //        System.out.println(result); //受影响的行数
    //        System.out.println(user);
    //    }
    //
        // 测试分页查询
        @Test
        public void testPage() {
    //        参数一:第几页
    //        参数二:每页条数
            Page<User> page=new Page<>(2,5);
    //        查询所有
            userMapper.selectPage(page,null);
    //        获取第2页的5条信息展示
            page.getRecords().forEach(System.out::println);
    //        获取查询语句的总条数
            System.out.println(page.getTotal());
        }
    //
    //    //测试删除
    //    @Test
    //    public void testDeleteById(){
    //        int result=userMapper.deleteById(4);
    //        System.out.println(result); //受影响的行数
    //    }
    //
    //    //测试id批量删除
    //    @Test
    //    public void testDeleteBatchId(){
    //        int result=userMapper.deleteBatchIds(Arrays.asList(1,2,3));
    //        System.out.println(result); //受影响的行数
    //    }
    //
    //    //测试map条件删除
    //    @Test
    //    public void testDeleteMap(){
    //        HashMap<String,Object> map=new HashMap<>();
    //        map.put("message","你好");
    //        List<User> result=userMapper.selectByMap(map);
    //        System.out.println(result); //受影响的行数
    //    }
    //
    }
    

      

    WrapperTest
    package com;
    
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.mapper.UserMapper;
    import com.pojo.User;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.util.List;
    
    @SpringBootTest
    public class WrapperTest {
        @Autowired
        private UserMapper userMapper;
    
    //    @Test
    //// 查询 message 和 id 不为空的 信息
    //    void contextLoads() {
    //        QueryWrapper<User> wrapper =new QueryWrapper<>();
    //        wrapper
    //                .isNotNull("message")
    //                .isNotNull("id");
    //        userMapper.selectList(wrapper).forEach(System.out::println);
    //    }
    //
        @Test
    // 查询 message =张三的
        void contextLoads2() {
            QueryWrapper<User> wrapper =new QueryWrapper<>();
            wrapper
                    .eq("message","kaibin");
            userMapper.selectList(wrapper).forEach(System.out::println);
            userMapper.selectCount(wrapper); //查询数据统计条数
        }
    //
    //     测试分页查询
    // 测试分页查询
        @Test
        public void testPage() {
        //        参数一:第几页
        //        参数二:每页条数
            Page<User> page=new Page<>(2,5);
        //        查询所有
    //        QueryWrapper<User> weapper=new QueryWrapper<>();
    //    weapper.select("select id from user");
            userMapper.selectPage(page,null);
        //        获取第2页的5条信息展示
            page.getRecords().forEach(System.out::println);
        //        获取查询语句的总条数
            System.out.println(page.getTotal());
        }
    //
        @Test
        public void test02() {
        QueryWrapper<User> weapper=new QueryWrapper<>();
    //    weapper.inSql("id","select id from user");
        weapper.select("id");
        List<Object> objects=userMapper.selectObjs(weapper);
        objects.forEach(System.out::println);
        }
    }
    

      pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>MyBatis_Plus</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>MyBatis_Plus</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.0.5</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>2.3.7.RELEASE</version>
                    <configuration>
                        <mainClass>com.MyBatisPlusApplication</mainClass>
                    </configuration>
                    <executions>
                        <execution>
                            <id>repackage</id>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

      

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     如何连接2个数据库呢,修改上面的文件

    参考: https://mp.baomidou.com/guide/dynamic-datasource.html#%E6%96%87%E6%A1%A3-documentation

    pom.xml   

    (注意 在添加

    dynamic-datasource-spring-boot-starter  的jar包时 他其实是导入了多个jar文件,要保证不要有和自己pom.xml里面有相同的jar引入,我弄的时候就是因为有
    mybatis-plus-boot-starter 重复了 且版本不一样 导致一直报错

    )

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>MyBatis_Plus</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>MyBatis_Plus</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    <!--        <dependency>-->
    <!--            <groupId>com.baomidou</groupId>-->
    <!--            <artifactId>mybatis-plus-boot-starter</artifactId>-->
    <!--            <version>3.0.5</version>-->
    <!--        </dependency>-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>2.3.7.RELEASE</version>
                    <configuration>
                        <mainClass>com.MyBatisPlusApplication</mainClass>
                    </configuration>
                    <executions>
                        <execution>
                            <id>repackage</id>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

      

    application.yml

    ### 应用名称
    ##spring.application.name=Mybatis_7_20
    ##下面这些内容是为了让MyBatis映射
    ##指定Mybatis的Mapper文件
    #mybatis:
    #  mapper-locations: classpath:/mapper/*xml
    ##指定Mybatis的实体目录
    #  type-aliases-package: com.entity
    
    spring:
      #设置开发环境
      profiles:
        active: dev
    
      datasource:
        dynamic:
          primary: master #设置默认的数据源或者数据源组,默认值即为master
          strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
          datasource:
            slave_1:
              # 数据库连接地址
              url: jdbc:mysql://localhost:3306/datademo?serverTimezone=UTC
              # 数据库用户名&密码:
              username: root
              password: 669988
              driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
            master:
              url: jdbc:mysql://rm-bp15t47j196je1u0l906.mysql.rds.aliyuncs.com/edu_mlz_basics
                  # 数据库用户名&密码:
              username: test_all
              password: dNYnDCDfT45qUxzM9KoDrKWX
              driver-class-name: com.mysql.jdbc.Driver
    
    
    #配置日志
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
      #逻辑删除
      global-config:
        db-config:
          logic-delete-value: 1 # 逻辑已删除值(默认为 1)
          logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    
    # 应用服务 WEB 访问端口
    server:
      port: 8180
    
    UserMapper
    package com.mapper;
    
    import com.baomidou.dynamic.datasource.annotation.DS;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.pojo.User;
    import org.apache.ibatis.annotations.Select;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public interface UserMapper extends BaseMapper<User> {
    
        @DS("slave")     #控制要使用那个数据库
        @Select("select id from user")
        List<User> getUserById3();
    
        @Select("DELETE FROM User WHERE id = 3")
        List<User> getUserById2();
    
    }
  • 相关阅读:
    并发编程之线程进阶
    并发编程之线程
    进程间通信(队列和管道)
    在python程序中的进程操作
    操作系统之进程
    网络编程之黏包
    树莓派 websocket 控制LED
    lua 调用 C -- 实例 C函数作为应用程序的一部分
    linux 环境下进程什么时候会被 killed掉
    STM32 + cJSON 死机问题解决
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/15121436.html
Copyright © 2020-2023  润新知