zoukankan      html  css  js  c++  java
  • springboot + Mybatisplus多数据源 分页

    转:

    springboot简易集成mybatisPlus+多数据源

    【我好用的配置文件

    1、pom:【注意druid吧版本要能获取到jar

    <?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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.2.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <mysql.version>6.0.6</mysql.version>
            <mybatisplus.boot.version>3.1.0</mybatisplus.boot.version>
            <druid.version>1.1.22</druid.version>
            <dynamic.datasource.boot.version>2.5.4</dynamic.datasource.boot.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>3.3</version>
            </dependency>
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.9.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatisplus.boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>${dynamic.datasource.boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    2、application.yml:主要注意加粗的红色两行要配成和自己本地的mapper及xml一致的

    spring:
      autoconfigure:
        exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure  # 为了某些版本的springboot  @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) 无法生效
      datasource:
        dynamic:
          primary: master #设置默认的数据源或者数据源组,默认值即为master,如果读者只是单数据源只需要注释掉slave相关配置即可,这里为了方便演示master与slave保持相同
          datasource:
            master:
              url: jdbc:mysql://localhost:3306/account1?serverTimezone=Hongkong&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false  # serverTimezone=Hongkong 需要填上时区
              username: root
              password: 123
              driverClassName:  com.mysql.cj.jdbc.Driver
            slave:
              url: jdbc:mysql://localhost:3306/account2?serverTimezone=Hongkong&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false  # serverTimezone=Hongkong 需要填上时区
              username: root
              password: 123
              driverClassName:  com.mysql.cj.jdbc.Driver
          initial-size: 10 # 以下是连接池配置
          max-active: 100
          min-idle: 10
          max-wait: 60000
          pool-prepared-statements: true
          max-pool-prepared-statement-per-connection-size: 20
          time-between-eviction-runs-millis: 60000
          min-evictable-idle-time-millis: 300000
          #validation-query: SELECT 1
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          stat-view-servlet:
            enabled: true
            url-pattern: /druid/*
            login-username: druid
            login-password: 123456
          filter:
            stat:
              log-slow-sql: true
              slow-sql-millis: 1000
              merge-sql: false
            wall:
              config:
                multi-statement-allow: true
    
    
    
    #mybatis plus
    mybatis-plus:
    #  mapper-locations: classpath:mapper/**/*.xml
      mapper-locations: classpath:/com/example/demo/verifyaccount/mapper/xml/*Mapper.xml
      #实体扫描,多个package用逗号或者分号分隔
    #  typeAliasesPackage: com.example.mybatisplus.entity
      typeAliasesPackage: com.example.demo.verifyaccount.entity
      check-config-location: true
      configuration:
        #是否开启自动驼峰命名规则(camel case)映射
        map-underscore-to-camel-case: true
        #全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存
        cache-enabled: false
        call-setters-on-nulls: true
        #配置JdbcTypeForNull, oracle数据库必须配置
        jdbc-type-for-null: 'null'
        #MyBatis 自动映射时未知列或未知属性处理策略 NONE:不做任何处理 (默认值), WARNING:以日志的形式打印相关警告信息, FAILING:当作映射失败处理,并抛出异常和详细信息
        auto-mapping-unknown-column-behavior: warning
      #这个配置会将执行的sql打印出来,在开发或测试的时候可以用
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    global-config: banner: false db-config: #主键类型 0:"数据库ID自增", 1:"未设置主键类型",2:"用户输入ID (该类型可以通过自己注册自动填充插件进行填充)", 3:"全局唯一ID (idWorker), 4:全局唯一ID (UUID), 5:字符串全局唯一ID (idWorker 的字符串表示)"; id-type: UUID #字段验证策略 IGNORED:"忽略判断", NOT_NULL:"非NULL判断", NOT_EMPTY:"非空判断", DEFAULT 默认的,一般只用于注解里(1. 在全局里代表 NOT_NULL,2. 在注解里代表 跟随全局) field-strategy: NOT_EMPTY #数据库大写下划线转换 capital-mode: true #逻辑删除值 logic-delete-value: 0 #逻辑未删除值 logic-not-delete-value: 1 server: port: 7000

    3、启动类:

    【要注意这一行:

    @MapperScan("com.example.mybatisplus.mapper") //扫描mapper的包,或者读者可以在对应的mapper上加上@Mapper的注解

    最好在生产的Mpper类上都加上@Mapper注解

    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    
    @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) //去掉springboot 默认的数据源配置
    @MapperScan("com.example.mybatisplus.mapper") //扫描mapper的包,或者读者可以在对应的mapper上加上@Mapper的注解
    public class MybatisplusSpringbootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MybatisplusSpringbootApplication.class, args);
        }
    
    }

    4、分页拦截器【加上这个就可以用分页了】

    package com.example.demo.config;
    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    //@MapperScan("com.example.demo.verifyaccount.*")
    public class MybatisPlusConfig {
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    }

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

    经过上面4个步骤就可以了,不需要其他config配置类

    使用例子:

    默认使用主数据源,要想使用其他数据源,可以在生成的service上加@DS("副数据源名称")

    eg:这里的slave对应application.yml中的配置

    分页查询

    eg:

    需要现在生成的service中加入分页查询代码:

    public interface IDzDetailService extends IService<DzDetail> {
        public IPage selectPage(IPage iPage, QueryWrapper QueryWrapper);
    }

    然后在业务中调用即可

    QueryWrapper<DzDetail> dzDetailQueryWrapper = new QueryWrapper<>();
    dzDetailQueryWrapper.eq("status_cd", "1");//未处理
    dzDetailQueryWrapper.eq("doc_id", dzDocId);
    dzDetailQueryWrapper.orderByAsc("id");
    int count = dzDetailService.count(dzDetailQueryWrapper);
    //根据文档id查询记录表,分页查询,每一万条处理一次
    int size = 10000;
    int batchNum = count / size + 1;
    IPage<DzDetail> userPage = new Page<>(i*size, size);//参数一是当前页,参数二是每页个数
    IPage iPage = dzDetailService.selectPage(userPage, dzDetailQueryWrapper);
    List<DzDetail> detailList = iPage.getRecords();

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

    Mybatisplus多数据源

    2019-04-30 14:37:08 12005 收藏 13
    分类专栏: springboot

    该项目主要实现mybatisplus、多数据源、lombok、druid的集成
    主要参考 https://mp.baomidou.com/guide/quick-start.html
    项目地址:https://github.com/Blankwhiter/mybatisplus-springboot release1.0
    项目结构:
    在这里插入图片描述

    一、创建表以及测试数据

    CREATE TABLE user
    (
    	id VARCHAR(32) NOT NULL COMMENT '主键ID',
    	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    	PRIMARY KEY (id)
    );
    
    
    INSERT INTO user (id, name, age, email) VALUES
    (1, 'Jone', 18, 'test1@baomidou.com'),
    (2, 'Jack', 20, 'test2@baomidou.com'),
    (3, 'Tom', 28, 'test3@baomidou.com'),
    (4, 'Sandy', 21, 'test4@baomidou.com'),
    (5, 'Billie', 24, 'test5@baomidou.com');
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    二、引入项目依赖,加入配置,修改启动类,编写实体类和mapper对象(读者可以根据自动生成工具生成这块代码)

    1.引入依赖

    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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>mybatisplus-springboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>mybatisplus-springboot</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <mysql.version>6.0.6</mysql.version>
            <mybatisplus.boot.version>3.1.0</mybatisplus.boot.version>
            <druid.version>1.1.10</druid.version>
            <dynamic.datasource.boot.version>2.5.4</dynamic.datasource.boot.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatisplus.boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>${dynamic.datasource.boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    2.编写配置

    application.yml

    spring:
      autoconfigure:
        exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure  # 为了某些版本的springboot  @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) 无法生效
      datasource:
        dynamic:
          primary: master #设置默认的数据源或者数据源组,默认值即为master,如果读者只是单数据源只需要注释掉slave相关配置即可,这里为了方便演示master与slave保持相同
          datasource:
            master:
              url: jdbc:mysql://localhost:3306/test?serverTimezone=Hongkong&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false  # serverTimezone=Hongkong 需要填上时区
              username: root
              password: 111111
              driverClassName:  com.mysql.cj.jdbc.Driver
            slave:
              url: jdbc:mysql://localhost:3306/test?serverTimezone=Hongkong&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false  # serverTimezone=Hongkong 需要填上时区
              username: root
              password: 111111
              driverClassName:  com.mysql.cj.jdbc.Driver
          initial-size: 10 # 以下是连接池配置
          max-active: 100
          min-idle: 10
          max-wait: 60000
          pool-prepared-statements: true
          max-pool-prepared-statement-per-connection-size: 20
          time-between-eviction-runs-millis: 60000
          min-evictable-idle-time-millis: 300000
          #validation-query: SELECT 1
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          stat-view-servlet:
            enabled: true
            url-pattern: /druid/*
            login-username: druid
            login-password: 123456
          filter:
            stat:
              log-slow-sql: true
              slow-sql-millis: 1000
              merge-sql: false
            wall:
              config:
                multi-statement-allow: true
    
    
    
    #mybatis plus
    mybatis-plus:
      mapper-locations: classpath:mapper/**/*.xml
      #实体扫描,多个package用逗号或者分号分隔
      typeAliasesPackage: com.example.mybatisplus.entity
      check-config-location: true
      configuration:
        #是否开启自动驼峰命名规则(camel case)映射
        map-underscore-to-camel-case: true
        #全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存
        cache-enabled: false
        call-setters-on-nulls: true
        #配置JdbcTypeForNull, oracle数据库必须配置
        jdbc-type-for-null: 'null'
        #MyBatis 自动映射时未知列或未知属性处理策略 NONE:不做任何处理 (默认值), WARNING:以日志的形式打印相关警告信息, FAILING:当作映射失败处理,并抛出异常和详细信息
        auto-mapping-unknown-column-behavior: warning
      global-config:
        banner: false
        db-config:
          #主键类型  0:"数据库ID自增", 1:"未设置主键类型",2:"用户输入ID (该类型可以通过自己注册自动填充插件进行填充)", 3:"全局唯一ID (idWorker), 4:全局唯一ID (UUID), 5:字符串全局唯一ID (idWorker 的字符串表示)";
          id-type: UUID
          #字段验证策略 IGNORED:"忽略判断", NOT_NULL:"非NULL判断", NOT_EMPTY:"非空判断", DEFAULT 默认的,一般只用于注解里(1. 在全局里代表 NOT_NULL,2. 在注解里代表 跟随全局)
          field-strategy: NOT_EMPTY
          #数据库大写下划线转换
          capital-mode: true
          #逻辑删除值
          logic-delete-value: 0
          #逻辑未删除值
          logic-not-delete-value: 1
    
    server:
      port: 7000
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    3.修改启动类

    MybatisplusSpringbootApplication.java

    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    
    @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) //去掉springboot 默认的数据源配置
    @MapperScan("com.example.mybatisplus.mapper") //扫描mapper的包,或者读者可以在对应的mapper上加上@Mapper的注解
    public class MybatisplusSpringbootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MybatisplusSpringbootApplication.class, args);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    4.编写实体

    4.1 user.java

    import lombok.Data;
    
    /**
     *  user 实体类
     */
    @Data
    public class User {
        private String id;
        private String name;
        private Integer age;
        private String email;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注:读者请自行在开发工具安装lombok插件,或者去掉@data注解换成setter getter方法即可

    4.2 UserMapper.java

    import com.baomidou.dynamic.datasource.annotation.DS;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.example.mybatisplus.entity.User;
    
    /**
     *  用户mapper
     */
    @DS("slave") //这里是配置数据源注解,默认是master
    public interface UserMapper extends BaseMapper<User> {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、编写测试用例

    
    import com.example.mybatisplus.entity.User;
    import com.example.mybatisplus.mapper.UserMapper;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.List;
    
    /**
     * 简单的测试增删改查
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MybatisplusSpringbootApplicationTests {
    
    
        @Autowired
        private UserMapper userMapper;
    
        @Test
        public void addUser() {
            User user = new User();
            user.setAge(200);
            user.setEmail("belonghuang@outlook.com");
            user.setName("belongHuang");
            userMapper.insert(user);
        }
    
        @Test
        public void updateUser() {
            User user = userMapper.selectById(1);
            user.setAge(300);
            int i = userMapper.updateById(user);
            if (i>0) {
                System.out.println("修改成功");
            }else {
                System.out.println("修改失败");
            }
        }
    
        @Test
        public void deleteUser() {
            int i = userMapper.deleteById(1);
            if (i>0) {
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        }
        @Test
        public void selectUser() {
            List<User> users = userMapper.selectList(null);
            users.stream().map(User::getName).forEach(System.out::println);//打印出所用用户名字
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    本文侧重点于集成,更多功能移步至官网。

  • 相关阅读:
    MSSQL Join的使用
    MSSQL2008 常用sql语句
    Process使用
    c# 多线程 调用带参数函数
    C# 多线程参数传递
    C# 单例模式代码
    C#调用存储过程
    页面布局
    构建:vue项目配置后端接口服务信息
    浏览器工作原理(二):浏览器渲染过程概述
  • 原文地址:https://www.cnblogs.com/libin6505/p/13431938.html
Copyright © 2011-2022 走看看