spring boot mybatis datasource配置

一、加載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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章