spring boot 使用druid和mybatis
本博文为本人经过实践和阅读spring官方文档和mybatis官方文档后做的笔记,还结合了一些网上的博客,请放心食用。另外本人水平有限,欢迎指出错误。
准备
- 使用的spring boot版本为2.0.5.RELEASE
- java版本为9.0.4
- 使用maven版本为3.5.3
- mysql-connector-java版本为5.1.47
- durid版本为1.1.10
- mybatis-spring-boot-starter版本为1.3.2
配置druid
参考https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#using-boot-maven
- spring boot建议使用java-based的配置,在spring boot包扫描路径下的类只要加上
@Configuration
注解,spring boot即可认为这是一个配置类 - 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.
- 加入durid数据源,根据官方文档,只需要在一个配置类中加入如下代码:
@ConfigurationProperties(prefix = "app.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
-
还需要在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上
- 这种方式十分简单,mapper代码如下
@Mapper
public interface TestMapper {
@Select("SELECT * FROM test")
List<Integer> getAll();
}
- 测试
@Autowired
private TestMapper testMapper;
@Test
public void getAll(){
System.out.println(testMapper.getAll());
}
- 还有一种偷懒方式,不必每一个mapper上都加上
@Mapper
注解,可以在配置druid数据源的配置类或者spring boot启动类的上加上注解@MapperScan
,指定你的mapper存放位置如@MapperScan(com.xxx)
使用xml分开配置
- 配置application.properties或者application.yml(更多配置项详见官方文档),以下配置根据你的实际情况配置
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml
type-aliases-package: com.xxx
mapper-locations:
- classpath:mybatis/mapper/**/*.xml
- 配置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>
- 编写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>