springboot+mybatis-plus+mysql 使用记录(逆向生成工具,多数据源配置)

mybatis-plus 使用记录

第一次使用myBatis-plus,整整花费了我一个早上的时间才弄完。其中遇到很多问题,比如:版本兼容,多数据源配置 等等。问题的处理这里就不过多介绍了。直接贴代码以供大家参考。

1 引入依赖

1.1 Springboot版本号为: 2.2.2.RELEASE

1.2,在pom文件中添加以下依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.25</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

2 配置yml文件

#################Mybatis-plus设置####################
mybatis-plus:
#  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.***.***.***.pojo

3 创建逆向生成代码工具类

package com.***.***.utils;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import lombok.extern.slf4j.Slf4j;

/**
 * @author gaoyuntao
 * @date 2020/12/22 13:50
 **/
public class MpHelper {
    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 1.全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setActiveRecord(true);//支持AR模式
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setFileOverride(false);//文件覆盖
        gc.setIdType(IdType.AUTO);//主键自增
        gc.setServiceName("%sService");//设置接口名称是否有I
        gc.setAuthor("gaoYunTao");
        gc.setBaseResultMap(true);//xml映射
        gc.setBaseColumnList(true);//sql片段
        mpg.setGlobalConfig(gc);

        // 2.数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/***?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC");   // 手动设置
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("dbName");   // 手动设置
        dsc.setPassword("dbPassword");   // 手动设置
        mpg.setDataSource(dsc);

        // 3.策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true);//全局大小写命名
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setTablePrefix("tb_"); // 该设置可以截取表名中的前缀字段
        strategyConfig.setEntityLombokModel(true);//使用lombok
        strategyConfig.setInclude("tb_users");//生成使用的表
        mpg.setStrategy(strategyConfig);

        // 4.包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.***.***");  // 手动设置
        pc.setMapper("mapper");
        pc.setService("service");
//        pc.setController("controller");
        pc.setEntity("pojo");
        pc.setXml("mapper");
        mpg.setPackageInfo(pc);

        // 5.执行
        mpg.execute();
    }
}

4 多数据源配置

根据业务需要,如果需要配置多数据源。可以参考以下配置:

4.1 yml文件中增加数据源设置

这里,我使用的数据库连接池是 hikari。
为什么选择HikariCP?参考:https://blog.csdn.net/zxl315/article/details/80420688

spring:
  datasource:
    db1:
      type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCP
      driver-class-name: com.mysql.jdbc.Driver          # mysql 驱动
      jdbc-url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
      username: dbName
      password: dbPassword
    db2:
      type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCP
      driver-class-name: com.mysql.jdbc.Driver          # mysql 驱动
      jdbc-url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
      username: root
      password: ****
    hikari:
      connection-timeout: 30000       # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生 SQLException, 默认:30秒
      minimum-idle: 6                 # 最小连接数
      maximum-pool-size: 20           # 最大连接数
      auto-commit: true               # 自动提交
      idle-timeout: 600000            # 连接超时的最大时长(毫秒),超时则被释放(retired),默认: 10分钟
      pool-name: DateSourceHikariCP   # 连接池名字
      max-lifetime: 1800000           # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms
      connection-test-query: SELECT 1

4.2 多数据源配置类

4.2.1 数据源 db1 配置如下:

package com.***.***.common.config;

import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * @author gaoyuntao
 * @date 2020/10/10 14:10
 **/
@Configuration
@MapperScan(basePackages = "com.***.***.***.mapper.db1"
        ,sqlSessionTemplateRef = "db1SqlSessionTemplate"
        ,sqlSessionFactoryRef = "db1SqlSessionFactory")
public class db1DataSourceConf {

    @Bean(name = "db1DataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource db1DataSource(){
        return DataSourceBuilder.create().build();
    }
    @Bean("db1SqlSessionFactory")
    @Primary
    public SqlSessionFactory db1SqlSessionFactory() throws Exception {
        // 一般情况下使用SqlSessionFactotyBean 即可(包括使用mybatis-generator)
//        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 当使用myBatis-plus的时候需要使用 MybatisSqlSessionFactoryBean
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(db1DataSource());
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml"));
        return sqlSessionFactoryBean.getObject();
    }
    @Bean(name ="db1TxMananger")
    @Primary
    public DataSourceTransactionManager db1TxMananger() {
        return new DataSourceTransactionManager(db1DataSource());
    }

    @Bean(name ="db1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate db1SqlSessionTemplate() throws Exception {
        return new SqlSessionTemplate(db1SqlSessionFactory());
    }
}

4.2.2 数据源 db2 配置如下:

package com.***.***.***.common.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * @author gaoyuntao
 * @date 2020/10/10 14:10
 **/
@Configuration
@MapperScan(basePackages = "com.***.***.***.mapper.db2"
        ,sqlSessionTemplateRef = "db2SqlSessionTemplate"
        ,sqlSessionFactoryRef = "db2SqlSessionFactory")
public class db2DataSourceConf {

    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource db2DataSource(){
        return DataSourceBuilder.create().build();
    }
    @Bean("db2SqlSessionFactory")
    public SqlSessionFactory db2SqlSessionFactory() throws Exception {
        // 一般情况下使用SqlSessionFactotyBean 即可(包括使用mybatis-generator)
//        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 当使用myBatis-plus的时候需要使用 MybatisSqlSessionFactoryBean
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(db2DataSource());
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db2/*.xml"));
        return sqlSessionFactoryBean.getObject();
    }
    @Bean(name ="db2TxMananger")
    public DataSourceTransactionManager db2TxMananger() {
        return new DataSourceTransactionManager(db2DataSource());
    }

    @Bean(name ="db2SqlSessionTemplate")
    public SqlSessionTemplate db2SqlSessionTemplate() throws Exception {
        return new SqlSessionTemplate(db2SqlSessionFactory());
    }
}

4.2.3 文件目录

根据以上配置,我们需要在src/main/java 目录下的mapper包中添加两个文件夹,具体名称对应多数据源配置类中的路径。同时在resource文件目录下的mapper文件中添加相应的两个文件下。具体如下:

图一: 多数据源配置类中的路径。
在这里插入图片描述
图二:文件目录。
在这里插入图片描述

4.2.3 异常错误 invalid bound statement (not found)踩坑记录

项目搭建好以后,可以正常启动,但是,一但调用myBatis-plus中BaseMapper的默认方法时就报错。困扰了我好长一段时间,一度怀疑人生。。。。。多方查找下,最终得以解决。
详细解决思路请移步:https://www.liangzl.com/get-article-detail-151361.html
解决如下:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值