首页 归档 关于 文件 Github
×

SpringBoot之自定义MyBatis-Plus配置

2022-03-24 16:26:25
MyBatis
  • SpringBoot
本文总阅读量(次):
本文字数统计(字):1.4k
本文阅读时长(分):7

修改原生的YML配置,采取自定义模式,

依赖

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
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
<spring-boot.version>2.4.2</spring-boot.version>
</properties>

<dependencies>
<!-- 数据库 连接 、事务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- 数据库 mybatis-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!-- 数据库 mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
<!-- 数据库 sqlite -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.27.2.1</version>
</dependency>
<!-- 数据库 oracle -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.1-atlassian-hosted</version>
</dependency>
</dependencies>

配置

创建Bean的注入方式,使用 @ConditionalOnMissingClass 注解 进行判断bean是否存在,
如不存在则加载当前默认bean,如存在则使用配置bean.

  • MybatisDataConfig

    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
    import lombok.Data;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
    import org.springframework.stereotype.Component;

    /**
    * author :demon
    * date :2022 2022/3/18 15:41
    * desc :自定义bean
    */
    @Data
    @Component(value = "mybatisDataConfig")
    @ConditionalOnMissingClass(value = "mybatisDataConfig")
    public class MybatisDataConfig {

    private String driverClassName;
    private String jdbcUrl;
    private String username;
    private String password;

    private String poolName = "DataSource_HikariCP";
    private long connectionTimeoutMs = 30000;
    private long idleTimeoutMs = 300000;
    private long validationTimeoutMs = 5000;
    private long maxLifetimeMs = 1800000;
    private int maxPoolSize = 20;
    private int minIdle = 5;

    private String typeAliasesPackage = "**.database.entity";
    private String locationPattern = "classpath*:/mapper/*Mapper.xml";

    }
  • DataSourceConfig

    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

    import com.zaxxer.hikari.HikariConfig;
    import com.zaxxer.hikari.HikariDataSource;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Primary;
    import org.springframework.stereotype.Component;

    import javax.annotation.Resource;
    import javax.sql.DataSource;

    /**
    * author :demon
    * date :2021 2021/8/27 13:54
    * desc :数据库
    */
    @Slf4j
    @Component
    public class DataSourceConfig {

    @Resource(name = "mybatisDataConfig")
    private MybatisDataConfig mybatisDataConfig;

    @Bean(name = "dataSource")
    @Primary
    public DataSource getDataSource() {
    System.out.println("★★★★★配置 dataSource ★★★★★");
    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setDriverClassName(mybatisDataConfig.getDriverClassName());
    hikariConfig.setJdbcUrl(mybatisDataConfig.getJdbcUrl());
    hikariConfig.setUsername(mybatisDataConfig.getUsername());
    hikariConfig.setPassword(mybatisDataConfig.getPassword());
    // 自定义连接池名称
    hikariConfig.setPoolName(mybatisDataConfig.getPoolName());
    hikariConfig.setReadOnly(false);
    // 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
    hikariConfig.setConnectionTimeout(mybatisDataConfig.getConnectionTimeoutMs());
    // 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
    hikariConfig.setIdleTimeout(mybatisDataConfig.getIdleTimeoutMs());
    // 验证与数据库连接的有效时间
    hikariConfig.setValidationTimeout(mybatisDataConfig.getValidationTimeoutMs());
    // 建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';)
    hikariConfig.setMaxLifetime(mybatisDataConfig.getMaxLifetimeMs());
    // 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
    hikariConfig.setMaximumPoolSize(mybatisDataConfig.getMaxPoolSize());
    // 连接池中维护的最小空闲连接数
    hikariConfig.setMinimumIdle(mybatisDataConfig.getMinIdle());
    // 从池返回的连接的默认自动提交行为。默认值为true
    hikariConfig.setAutoCommit(true);
    // 如果您的驱动程序支持JDBC4,我们强烈建议您不要设置此属性
    hikariConfig.setConnectionTestQuery("SELECT 1");
    return new HikariDataSource(hikariConfig);
    }

    }
  • MybatisPlusConfig

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108

    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.autoconfigure.SpringBootVFS;
    import com.baomidou.mybatisplus.core.MybatisConfiguration;
    import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
    import com.baomidou.mybatisplus.core.config.GlobalConfig;
    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
    import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.ibatis.session.AutoMappingBehavior;
    import org.apache.ibatis.session.ExecutorType;
    import org.apache.ibatis.type.JdbcType;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.stereotype.Component;
    import org.springframework.transaction.annotation.EnableTransactionManagement;

    import javax.annotation.Resource;
    import javax.sql.DataSource;

    /**
    * className MybatisPlusConfig
    * author demon
    * createTime 2021/5/21 18:15
    * description mybatis-plus 配置
    */
    @Slf4j
    @Component
    @EnableTransactionManagement
    public class MybatisPlusConfig {

    @Resource(name = "mybatisDataConfig")
    private MybatisDataConfig mybatisDataConfig;

    @Resource
    private DataSource dataSource;

    /**
    * 分页插件
    * paginationInterceptor.setLimit(你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制);
    */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
    PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
    // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
    paginationInterceptor.setOverflow(true);
    // 设置最大单页限制数量,默认 500 条,-1 不受限制
    paginationInterceptor.setLimit(-1);
    // 开启 count 的 join 优化,只针对部分 left join
    paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
    return paginationInterceptor;
    }

    /**
    * 将yml配置代码化
    */
    @Bean
    @Primary
    public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() throws Exception {
    //一定要使用 MybatisSqlSessionFactoryBean否则Statement not bound错误
    System.out.println("★★★★★配置 MybatisSqlSessionFactoryBean ★★★★★");
    MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
    //加载数据源 此处配置为关键配置,如果没有将 dataSource 作为数据源则不能实现切换
    mybatisPlus.setDataSource(dataSource);
    mybatisPlus.setVfs(SpringBootVFS.class);
    // 配置 configuration
    MybatisConfiguration configuration = new MybatisConfiguration();
    configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
    configuration.setJdbcTypeForNull(JdbcType.NULL);
    // 映射器缓存
    configuration.setCacheEnabled(false);
    // 查询时,关闭关联对象即时加载以提高性能
    configuration.setLazyLoadingEnabled(false);
    // 不允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值), 数据表的PK生成策略将被覆盖
    configuration.setUseGeneratedKeys(false);
    // 对于批量更新操作缓存SQL以提高性能 SIMPLE, REUSE, BATCH
    configuration.setDefaultExecutorType(ExecutorType.REUSE);
    // 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果
    configuration.setMultipleResultSetsEnabled(true);
    // 允许使用列标签代替列名
    configuration.setUseColumnLabel(true);
    // 解决mybatis空字段null字段不返回
    configuration.setCallSettersOnNulls(true);
    // 给予被嵌套的resultMap以字段-属性的映射支持 NONE, FULL,PARTIAL
    configuration.setAutoMappingBehavior(AutoMappingBehavior.PARTIAL);
    // 日志
    configuration.setLogImpl(org.apache.ibatis.logging.stdout.StdOutImpl.class);
    mybatisPlus.setConfiguration(configuration);
    // 添加分页功能
    mybatisPlus.setPlugins(paginationInterceptor());
    //加载 mybatis-plus 全局配置
    GlobalConfig globalConfig = new GlobalConfig();
    GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
    // 默认为自增
    dbConfig.setIdType(IdType.AUTO);
    // 全局的表前缀策略配置
    globalConfig.setDbConfig(dbConfig);
    mybatisPlus.setGlobalConfig(globalConfig);
    //指定 pojo 目录 ,扫描Model
    mybatisPlus.setTypeAliasesPackage(mybatisDataConfig.getTypeAliasesPackage());
    // Mapper包路径, 扫描映射文件
    mybatisPlus.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mybatisDataConfig.getLocationPattern()));
    return mybatisPlus;
    }

    }
完
Map的链式操作
ElasticSearch-v6.8.1的集群配置

本文标题:SpringBoot之自定义MyBatis-Plus配置

文章作者:十二

发布时间:2022-03-24 16:26:25

最后更新:2022-08-24 17:04:10

原始链接:https://www.zhuqiaolun.com/2022/03/1648110385163/1648110385163/

许可协议:署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

头像

十二

我想起那天夕阳下的奔跑,那是我逝去的青春。

分类

  • Blog4
  • ElasticSearch13
  • Git2
  • Go-FastDfs2
  • IDEA2
  • J-Package6
  • J-Tools21
  • Java2
  • JavaFx3
  • Kafka4
  • Linux2
  • Logger5
  • Maven5
  • MyBatis6
  • MyCat3
  • MySql2
  • Nginx5
  • OceanBase1
  • RabbitMq4
  • Redis6
  • SVN1
  • SpringBoot14
  • Tomcat6
  • WebService2
  • Windows2
  • kubernetes10

归档

  • 六月 20251
  • 二月 20251
  • 十二月 20244
  • 八月 202416
  • 六月 20241
  • 九月 20231
  • 八月 20231
  • 七月 20232
  • 八月 20222
  • 三月 202214
  • 二月 20224
  • 十一月 20211
  • 七月 20215
  • 六月 20213
  • 五月 20213
  • 四月 20211
  • 三月 202116
  • 二月 20212
  • 一月 20211
  • 十一月 202014
  • 十月 20201
  • 九月 202014
  • 八月 20205
  • 七月 20204
  • 六月 20208
  • 五月 20208

作品

我的微信 我的文件

网站信息

本站运行时间统计: 载入中...
本站文章字数统计:97.8k
本站文章数量统计:133
© 2025 十二  |  鄂ICP备18019781号-1  |  鄂公网安备42118202000044号
驱动于 Hexo  | 主题 antiquity  |  不蒜子告之 阁下是第个访客
首页 归档 关于 文件 Github