栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot集成MyBatis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot集成MyBatis

目录

1.整合Durid数据源

2.整合MyBatis

2.1生成MyBatis代码:

2.2 整合Mybatis

3.MyBatis自动配置原理


1.整合Durid数据源

1、引入Jar包

        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        

        
            mysql
            mysql-connector-java
            runtime
        

        
        
            com.alibaba
            druid
            1.2.3
        

2.application.yml配置

# 数据源
spring:
  datasource:
    username: root
    password: aaaa
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    #   数据源其他配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECt 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    #初始化时运行sql脚本
    schema: classpath:sql/schema.sql
    #initialization-mode: always

3.读取配置类DruidConfig

@Configuration
@ConditionalOnProperty("spring.datasource.type")
public class DruidConfig {

    

    @Bean
    DataSource dataSource(DataSourceProperties dataSourceProperties){
        //两种方式创建datasource都可以
        // 根据配置动态构建一个DataSource
        return dataSourceProperties.initializeDataSourceBuilder().build();
    }


    
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid
        // 添加IP白名单
        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
        // 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
        // servletRegistrationBean.addInitParameter("deny", "127.0.0.1");
        // 添加控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "123456");
        // 是否能够重置数据
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    
    @Bean
    public FilterRegistrationBean statFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());

        // 添加过滤规则
        filterRegistrationBean.addUrlPatterns("

    if (this.properties.getConfigurationProperties() != null) {
      factory.setConfigurationProperties(this.properties.getConfigurationProperties());
    }
    // 就是配置插件-拦截器  只需要配置一个实现了Interceptor的接口为Bean
    if (!ObjectUtils.isEmpty(this.interceptors)) {
      factory.setPlugins(this.interceptors);
    }
    // 设置数据库厂商id
    if (this.databaseIdProvider != null) {
      factory.setDatabaseIdProvider(this.databaseIdProvider);
    }
    // 设置别名:去application.yml中獲取mybatis.typeAliasesPackage
    if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) {
      factory.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());
    }

    // 可以通过父类过滤哪些类需要使用别名
      比如:pojo.user extends basePojo 
       pojo.user2 
       去application.yml中设置mybatis.typeAliasesSuperType:             
         com.springboot.pojo.basePojo则只有user可以使用别名

    if (this.properties.getTypeAliasesSuperType() != null) {
      factory.setTypeAliasesSuperType(this.properties.getTypeAliasesSuperType());
    }

// 设置类型处理器
 
    


    if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) {
      factory.setTypeHandlersPackage(this.properties.getTypeHandlersPackage());
    }

// 设置类型处理器

    

    if (!ObjectUtils.isEmpty(this.typeHandlers)) {
      factory.setTypeHandlers(this.typeHandlers);
    }
// 设置mapper.xml映射文件:mapper-locations: classpath:com/tulingxueyuan/mapper/*Mapper.xml
    if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) {
      factory.setMapperLocations(this.properties.resolveMapperLocations());
    }

    Set factoryPropertyNames = Stream
        .of(new BeanWrapperImpl(SqlSessionFactoryBean.class).getPropertyDescriptors()).map(PropertyDescriptor::getName)
        .collect(Collectors.toSet());
    Class defaultLanguageDriver = this.properties.getDefaultscriptingLanguageDriver();
    if (factoryPropertyNames.contains("scriptingLanguageDrivers") && !ObjectUtils.isEmpty(this.languageDrivers)) {
      // Need to mybatis-spring 2.0.2+
      factory.setscriptingLanguageDrivers(this.languageDrivers);
      if (defaultLanguageDriver == null && this.languageDrivers.length == 1) {
        defaultLanguageDriver = this.languageDrivers[0].getClass();
      }
    }
    if (factoryPropertyNames.contains("defaultscriptingLanguageDriver")) {
      // Need to mybatis-spring 2.0.2+
      factory.setDefaultscriptingLanguageDriver(defaultLanguageDriver);
    }

    return factory.getObject();
  }

  • 如果依然想使用mybatis全局配置文件, springboot 还是支持的:
    • 配置application.yml
mybatis: 
  config-location: classpath:mybatis-config.xml
  • mybatis-config.xml





    
    
        
    

    
    
        
    

  • 如果要设置mybatis的settings怎么设置呢?
    • 1.可以通过mybatis全局配置文件设置(config-location: classpath:mybatis-config.xml取设置)
    • 2. 也可以通过在application.yml中配置configuration
      • configuration 它封装mybatis所有信息
configuration:
  mapUnderscoreToCamelCase: true

 sqlSessionFactory()声明SqlSessionFactory 时调用了applyConfiguration方法,这个方法中回去配置文件中读取mybatis.configuration.xxx并且设置的factory中

  private void applyConfiguration(SqlSessionFactoryBean factory) {
    Configuration configuration = this.properties.getConfiguration();
    if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
      configuration = new Configuration();
    }
    if (configuration != null && !CollectionUtils.isEmpty(this.configurationCustomizers)) {
      for (ConfigurationCustomizer customizer : this.configurationCustomizers) {
        customizer.customize(configuration);
      }
    }
    factory.setConfiguration(configuration);
  }

 

 

  • configuration 什么情况=null呢?
    • 没有在application.yml中配置configuration 就会为null
  • 如果没有在application.yml中配置config-location 就会new new Configuration();
  • 所以说要定制mybatis
    • 1. 使用mybatis全局配置文件(config-location:mybatis-config.xml)
    • 2. 可以使用application.yml中配置configuration (优先级高)+ ConfigurationCustomizer
    • 要么使用mybatis的东西,要么使用springboot的, 以上只能用1种

 

@Component
public class MyConfigurationCustomizer implements ConfigurationCustomizer {
    @Override
    public void customize(Configuration configuration) {
        configuration.setMapUnderscoreToCamelCase(true);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327613.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号