spring boot 使用druid和mybatis

spring boot 使用druid和mybatis

本博文为本人经过实践和阅读spring官方文档和mybatis官方文档后做的笔记,还结合了一些网上的博客,请放心食用。另外本人水平有限,欢迎指出错误。

准备

  1. 使用的spring boot版本为2.0.5.RELEASE
  2. java版本为9.0.4
  3. 使用maven版本为3.5.3
  4. mysql-connector-java版本为5.1.47
  5. durid版本为1.1.10
  6. mybatis-spring-boot-starter版本为1.3.2

配置druid

参考https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#using-boot-maven

  1. spring boot建议使用java-based的配置,在spring boot包扫描路径下的类只要加上@Configuration注解,spring boot即可认为这是一个配置类
  2. spring boot的自动配置十分强大,但它是non-invasive即非侵入式的,只要你加入自己的的DataSource的bean,那么spring boot内嵌的数据库支持就不会再起作用,可以大致看一下源码,在DataSourceConfiguration类中有如下代码,如果我们没有自定义DataSource,那么它就会加入默认的DataSource,换句话说,如果我们自定义了DataSource,那么默认的就不生效了(@ConditionalOnMissingBean(DataSource.class)可以看出)。默认情况下,而这个类DataSourceConfiguration会被DataSourceAutoConfiguration加载。在看源码时可以发现,DataSourceConfiguration这个类并没有加上@Configuration注解,这是因为在DataSourceAutoConfiguration类中,DataSourceConfiguration是被import进来的(使用@Import),这种方式其实官方文档也有说明。
	/**
	 * Generic DataSource configuration.
	 */
	@ConditionalOnMissingBean(DataSource.class)
	@ConditionalOnProperty(name = "spring.datasource.type")
	static class Generic {

		@Bean
		public DataSource dataSource(DataSourceProperties properties) {
			return properties.initializeDataSourceBuilder().build();
		}

	}

You need not put all your @Configuration into a single class. The @Import annotation can be used to import additional configuration classes.

  1. 加入durid数据源,根据官方文档,只需要在一个配置类中加入如下代码:
    @ConfigurationProperties(prefix = "app.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }
  1. 还需要在application.yml或者application.properties中加入数据源的配置,前缀就是使用以上面定义(app.datasource)的,而对于本身druid配置项就不再讲述了,网上很多博客都有:

    app:
      datasource:
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        initialSize: 5
        minIdle: 1
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        poolPreparedStatements : false
        validationQuery: SELECT 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        filters: stat
        maxPoolPreparedStatementPerConnectionSize: 20
    

整合mybatis

参考http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/

将sql语句直接写在Mapper上

  1. 这种方式十分简单,mapper代码如下
@Mapper
public interface TestMapper {

    @Select("SELECT * FROM test")
    List<Integer> getAll();
}

  1. 测试
@Autowired
private TestMapper testMapper;

@Test
public void getAll(){
    System.out.println(testMapper.getAll());
}
  1. 还有一种偷懒方式,不必每一个mapper上都加上@Mapper注解,可以在配置druid数据源的配置类或者spring boot启动类的上加上注解@MapperScan,指定你的mapper存放位置如@MapperScan(com.xxx)

使用xml分开配置

  1. 配置application.properties或者application.yml(更多配置项详见官方文档),以下配置根据你的实际情况配置
mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml
  type-aliases-package: com.xxx
  mapper-locations:
  - classpath:mybatis/mapper/**/*.xml
  1. 配置mybatis.cfg.xml:其实这个文件已经没有东西了,因为都在application.properties或者application.yml中配置了,于是在建立文件resource/mybatis/mybatis.cfg.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">
<!-- 使用xml的方式配置mapper,这个为全局配置文件 -->
<configuration>

</configuration>
  1. 编写mapper.xml,本例子中建立resource/mybatis/mapper/TestMapper.xml(可以删除TestMapper中的sql语句,因为下面就是需要在xml文件中编写sql语句)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 使用xml的形式配置mapper,此处编写sql映射文件 -->
<mapper namespace="com.xxx.TestMapper">

    <select id="getAll" resultType="Integer">
        SELECT * FROM test
    </select>

</mapper>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值