SpringBoot自定义Mybatis数据源,SpringBoot集成Druid数据库连接池,自定义Mybatis拦截器转义特殊字符\%_

SpringBoot自定义Mybatis数据源,SpringBoot集成Druid数据库连接池,自定义Mybatis拦截器转义特殊字符%_

六、Springboot中使用Druid自定义数据库源

  1. 首先引入相关依赖:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.15</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3</version>
    </dependency>
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.4.6</version>
    </dependency>
    
  2. 在配置文件中配置数据库连接信息,以及一些需要的druid配置

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url=jdbc:p6spy:mysql://127.0.0.1:3306/reggie?characterEncoding=utf-8&serverTimezone=UTC
    spring.datasource.username=root
    spring.datasource.password=mysqlroot
    # druid
    spring.datasource.druid.enable=true
    spring.datasource.druid.name=mysql
    spring.datasource.druid.initial-size=10
    spring.datasource.druid.min-idle=10
    spring.datasource.druid.max-active=20
    spring.datasource.druid.max-wait=60000
    spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
    spring.datasource.druid.pool-prepared-statements=false
    
  3. 配置一个数据源,如果项目中有多个可以在此处配置多个,用@primary注解标注主数据源。在这里可以使用@ConfigurationProperties(prefix = "spring.datasource.druid")将配置文件中 的配置项自动加载进来,也可以先@Value注解将数据先读取出来,再设置进去

    @Primary
    @Bean(name = "masterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public DruidDataSource masterDataSource() {
         
        return DruidDataSourceBuilder.create().build();
    }
    
  4. 为Mybatis设置配置数据源、事务、mapper文件路径以及拦截器,这样数据源就设置好了,Springboot项目启动时就会自动加载我们的sqlSessionFactory吗,达到我们自定义数据源的目的了

    @Configuration
    @MapperScan(basePackages = {
         "com.shadowy.mapper"}, sqlSessionFactoryRef = "sqlSessionFactory") // 首先定义mapperscan扫描包,可指定多个包路径
    public class MybatisConfig {
         
        @Primary
        @Bean(name = "transactionManager")
        public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
         
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Primary
        @Bean
        public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
          // 将上一步的DruidDataSource引入
            // 为MybatisSqlSessionFactoryBean设置数据源,以及xml资源路径,一般mapper.xml都放在Resources目录下的
            final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
    
            String mapperLocation = "mapper/*.xml";
            Resource[] resources = new PathMatchingResourcePatternResolver().getResources(
                ResourceLoader.CLASSPATH_URL_PREFIX + mapperLocation
            );
            sessionFactory.setMapperLocations(resources);
          
            // 为Mybatis注册一些需要用到的插件
            Properties prop = new Properties();
            prop.setProperty("offsetAsPageNum", "true");
            prop.setProperty("rowBoundsWithCount", "true");
            prop.setProperty("reasonable", "true");
            prop.setProperty("helperDialect", "mysql");
            PageInterceptor pageInterceptor = new PageInterceptor();
            pageInterceptor.setProperties(prop);
    
            // ES转义插件
            EscapeInterceptor escapeInterceptor = new EscapeInterceptor();
    
            List<Interceptor> interceptors = new ArrayList<>();
            interceptors.add(pageInterceptor);
            interceptors.add(escapeInterceptor);
    
            sessionFactory.setPlugins(interceptors.toArray(new Interceptor[1]));
            return sessionFactory.getObject();
        }
    }
    
  5. 检查数据源是否连接正常,定时任务健康检查,这里的dataSource就是我们前面定义的masterDataSource,注入进来即可

    @
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值