spring boot mybatis datasource配置

本文主要介绍了如何在Spring Boot中配置MyBatis的数据源,通过手动配置的方式将数据源信息写死在代码中,适用于简单场景下的快速集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、加载mybatis的配置

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

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

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中添加

1

2

3

4

5

6

7

8

# MyBatis

mybatis:

    # 配置类型别名

    typeAliasesPackage: com.zsx.entity

    # 配置mapper的扫描,找到所有的mapper.xml映射文件

    mapperLocations: classpath:mybatis/mapper/*.xml

    # 加载全局的配置文件

    configLocation: classpath:mybatis/mybatis-config.xml

然后配置文件为:

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

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的类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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

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

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration

        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

        "https://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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值