【转】spring boot mybatis 读取配置文件

spring boot mybatis 配置整理

一、加载mybatis的配置

1、手写配置,写死在代码里

import java.io.IOException;
    import java.util.Properties;

    import javax.sql.DataSource;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.ibatis.plugin.Interceptor;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.DefaultResourceLoader;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.transaction.annotation.TransactionManagementConfigurer;

    import com.github.pagehelper.PageHelper;

    @Configuration
    @EnableTransactionManagement
    public class MybatisConfiguration implements TransactionManagementConfigurer{

        private static Log logger = LogFactory.getLog(MybatisConfiguration.class);

        @Autowired
        private DataSource dataSource;

        // 提供SqlSeesion
        @Bean(name = "sqlSessionFactory")
        public SqlSessionFactory sqlSessionFactoryBean() {
            try {
                SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
                sessionFactoryBean.setDataSource(dataSource);
                // 手写配置
                // 配置类型别名
                sessionFactoryBean.setTypeAliasesPackage("com.zsx.entity");

                // 配置mapper的扫描,找到所有的mapper.xml映射文件
                Resource[] resources = new PathMatchingResourcePatternResolver()
                        .getResources("classpath:mybatis/mapper/*.xml");
                sessionFactoryBean.setMapperLocations(resources);

                // 加载全局的配置文件
                sessionFactoryBean.setConfigLocation(
                        new DefaultResourceLoader().getResource("classpath:mybatis/mybatis-config.xml"));

                //添加插件
                sessionFactoryBean.setPlugins(new Interceptor[]{pageHelper()});

                return sessionFactoryBean.getObject();
            } catch (IOException e) {
                logger.warn("mybatis resolver mapper*xml is error");
                return null;
            } catch (Exception e) {
                logger.warn("mybatis sqlSessionFactoryBean create error");
                return null;
            }
        }

        @Bean
        public PlatformTransactionManager annotationDrivenTransactionManager() {
            return new DataSourceTransactionManager(dataSource);
        }

        @Bean
        public PageHelper pageHelper(){
            logger.info("MyBatis分页插件PageHelper");
            //分页插件
            PageHelper pageHelper = new PageHelper();
            Properties properties = new Properties();
            properties.setProperty("offsetAsPageNum", "true");
            properties.setProperty("rowBoundsWithCount", "true");
            properties.setProperty("reasonable", "true");
            properties.setProperty("supportMethodsArguments", "true");
            properties.setProperty("returnPageInfo", "check");
            properties.setProperty("params", "count=countSql");
            pageHelper.setProperties(properties);
            return pageHelper;
        }

    }

2、读取配置文件方式

先在配置文件application.yml中添加

# MyBatis
mybatis:
    # 配置类型别名
    typeAliasesPackage: com.zsx.entity
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    mapperLocations: classpath:mybatis/mapper/*.xml
    # 加载全局的配置文件
    configLocation: classpath:mybatis/mybatis-config.xml

然后配置文件为:

   import java.io.IOException;

    import javax.sql.DataSource;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.DefaultResourceLoader;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.transaction.annotation.TransactionManagementConfigurer;

    @Configuration
    @EnableTransactionManagement
    public class MybatisConfiguration implements TransactionManagementConfigurer{

        private static Log logger = LogFactory.getLog(MybatisConfiguration.class);

    //  配置类型别名
        @Value("${mybatis.typeAliasesPackage}")
        private String typeAliasesPackage;

    //  配置mapper的扫描,找到所有的mapper.xml映射文件
        @Value("${mybatis.mapperLocations}")
        private String mapperLocations;

    //  加载全局的配置文件
        @Value("${mybatis.configLocation}")
        private String configLocation;

        @Autowired
        private DataSource dataSource;
        // DataSource配置
    //  @Bean
    //  @ConfigurationProperties(prefix = "spring.datasource")
    //  public DruidDataSource dataSource() {
    //      return new com.alibaba.druid.pool.DruidDataSource();
    //  }

        // 提供SqlSeesion
        @Bean(name = "sqlSessionFactory")
        public SqlSessionFactory sqlSessionFactoryBean() {
            try {
                SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
                sessionFactoryBean.setDataSource(dataSource);

                // 读取配置
                sessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);

                //
                Resource[] resources = new PathMatchingResourcePatternResolver()
                        .getResources(mapperLocations);
                sessionFactoryBean.setMapperLocations(resources);
    //      //
                sessionFactoryBean.setConfigLocation(
                        new DefaultResourceLoader().getResource(configLocation));

                //添加插件  (改为使用配置文件加载了)
    //          sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper()});

                return sessionFactoryBean.getObject();
            } catch (IOException e) {
                logger.warn("mybatis resolver mapper*xml is error");
                return null;
            } catch (Exception e) {
                logger.warn("mybatis sqlSessionFactoryBean create error");
                return null;
            }
        }

    //  @Bean
    //    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    //        return new SqlSessionTemplate(sqlSessionFactory);
    //    }

    //  @Bean
    //  public PlatformTransactionManager transactionManager(){
    //      return new DataSourceTransactionManager(dataSource);
    //  }

        @Bean
        public PlatformTransactionManager annotationDrivenTransactionManager() {
            return new DataSourceTransactionManager(dataSource);
        }

    }

最后还有配置一个扫描mapper的类:

import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
//TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解
@AutoConfigureAfter({MybatisConfiguration.class})
public class MyBatisMapperScannerConfig {

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();

        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.zsx.dao");

        return mapperScannerConfigurer;
    }

}

还有一个 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <properties>
        <property name="dialect" value="mysql" />
    </properties>
    <settings>
        <!-- 开启驼峰匹配 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 这个配置使全局的映射器启用或禁用缓存。系统默认值是true,设置只是为了展示出来 -->
        <setting name="cacheEnabled" value="true" />
        <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 系统默认值是true,设置只是为了展示出来 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 系统默认值是true,设置只是为了展示出来 -->
        <setting name="multipleResultSetsEnabled" value="true" />
        <!--使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 系统默认值是true,设置只是为了展示出来 -->
        <setting name="useColumnLabel" value="true" />
        <!--允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如
            Derby)。 系统默认值是false,设置只是为了展示出来 -->
        <setting name="useGeneratedKeys" value="false" />
        <!--配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 系统默认值是SIMPLE,设置只是为了展示出来 -->
        <setting name="defaultExecutorType" value="SIMPLE" />
        <!--设置超时时间,它决定驱动等待一个数据库响应的时间。 系统默认值是null,设置只是为了展示出来 -->
        <setting name="defaultStatementTimeout" value="25000" />
    </settings>

    <!-- 分页助手 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 数据库方言 -->
            <property name="dialect" value="mysql" />
            <property name="offsetAsPageNum" value="true" />
            <!-- 设置为true时,使用RowBounds分页会进行count查询 会去查询出总数 -->
            <property name="rowBoundsWithCount" value="true" />
            <property name="pageSizeZero" value="true" />
            <property name="reasonable" value="true" />
        </plugin>
    </plugins>
</configuration>

参考:https://blog.csdn.net/javahighness/article/details/53044655

原文地址:https://www.cnblogs.com/liaoguanwang/p/9769976.html

时间: 2024-12-30 13:37:02

【转】spring boot mybatis 读取配置文件的相关文章

(005)Spring Boot之读取配置文件

springboot的默认配置文件是application.properties或者application.yml.读取配置文件有以下两种方式 1.注入Environment对象,用Environment对象获取 2.使用Value注解 获取的值默认都是字符串类型,使用Value注解时,自动转化类型,使用Environment对象时,指定类,如下: pom.xml <?xml version="1.0" encoding="UTF-8"?> <pr

spring boot中读取配置文件的两种方式

application.properties test.name=测试 test.url=www.test.com [email protected]注解 在controller里可以这样直接调用 @Value("${test.name}") private String name; @Value("${test.url}") private String url; [email protected](prefix="test") 新建一个Con

Spring Cloud Spring Boot mybatis分布式微服务云架构(三)属性配置文件详解(1)

相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁多的XML配置内容,替代它的是在pom.xml中引入模块化的Starter POMs,其中各个模块都有自己的默认配置,所以如果不是特殊应用场景,就只需要在application.properties中完成一些属性配置就能开启各模块的应用. 在之前的各篇文章中都有提及关于application.pro

spring boot + mybatis + druid

因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算引入数据池,引入数据池的时候找来找去,比较了当前两个最火的数据池,阿里的druid和HikariCP,比来比去选了阿里的druid,虽然spring boot默认不支持druid,而是支持HikariCP,而且HikariCP的性能更好,但是阿里功能多,就是想支持国产 实际配置: 1.首先现在下载一

【spring boot+mybatis】注解使用方式(无xml配置)设置自动驼峰明明转换(),IDEA中xxDao报错could not autowire的解决方法

最近使用spring boot+mybatis,使用IntelliJ IDEA开发,记录一些问题的解决方法. 1.在使用@Mapper注解方式代替XXmapper.xml配置文件,使用@Select等注解配置sql语句的情况下,如何配置数据库字段名到JavaBean实体类属性命的自动驼峰命名转换? 使用spring boot后,越来越喜欢用注解方式进行配置,代替xml配置文件方式.mybatis中也可以完全使用注解,避免使用xml方式配置mapper.(参考  springboot(六):如何优

spring boot+mybatis整合

LZ今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多.其实只用Spring boot也可以开发,但是对于多表多条件分页查询,Spring boot就有点力不从心了,所以LZ把Mybatis整合进去,不得不说,现在的框架搭建真的是方便.话不多说,进入正题. 一.java web开发环境搭建 网上有很多教程,参考教程:http://www.cnblogs.com/Leo_wl/p/4752875.html 二.Spring bo

使用IDEA搭建Spring boot+Mybatis工程

简介:Spring boot只使用一个核心配置文件,取消了一系列xml配置,甚至连web.xml都没有,全部使用注解的方式完成WEB层的功能.框架内置Tomcat服务器,运行启动类中的Main函数即可启动. 下面就来搭建Spring boot+Mybatis工程 新建工程 勾上web,其他的不用 Finish 完善一下目录结构: 在pom.xml配置所有相关的依赖: 1 <?xml version="1.0" encoding="UTF-8"?> 2 &

Spring Boot + MyBatis + Thymeleaf实现简单留言板应用

Spring Boot + MyBatis + Thymeleaf实现简单留言板应用 本项目主要介绍使用Spring Boot + MyBatis + Thymeleaf + Bootstrap来实现一个简单的增删改查(CRUD)留言板应用.高阶人士可以直接跳过. 源代码:https://github.com/qingwenwei/spring-boot-crud-example 功能介绍 发表帖子.帖子列表 编辑帖子 使用Spring Initializr构建项目 Spring Initial

Spring Boot加载配置文件的完整步骤

这篇文章主要给大家介绍了关于Spring Boot加载配置文件的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 前言 本文针对版本2.2.0.RELEASE来分析SpringBoot的配置处理源码,通过查看SpringBoot的源码来弄清楚一些常见的问题比如: SpringBoot从哪里开始加载配置文件? SpringBoot从哪些地方加载配置文件? SpringBoot是如何支持yaml和proper