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
解决如下: