SpringBoot笔记(4)-整合MyBatis访问数据库
数据库场景
在Web开发过程中,经常会使用到数据库,因此需要引入相关依赖。SpringBoot官方提供了一个启动器,对应数据库场景。我们引入下面的启动器,就可以引入数据库相关依赖:
1 |
|
不过在导入的依赖中,没有导入数据库的驱动。这也能够理解,SpringBoot并不能预见到我们会使用哪种数据库驱动,因此将导入的主动权交给用户。所以接下来我们需要引入数据库驱动,例如MySQL驱动:
1 |
|
在引入驱动的时候我们可以查看一下SpringBoot中配置的默认版本是多少,如果需要修改,可以直接指定version,或者重新设置对应的properties。
SpringBoot完成数据库场景的自动配置,会涉及到下面一些类:
DataSourceAutoConfiguration
:完成数据源的自动配置。对应配置项为spring.datasource
,底层默认配置的数据库连接池为HikariDataSource
DataSourceTransactionManagerAutoConfiguration
:完成事务管理器的自动配置JdbcTemplateAutoConfiguration
:完成JdbcTemplate的自动配置。对应配置项为spring.jdbc
。完成自动配置后IOC容器中会管理JdbcTemplate组件,可以使用自动注入@Autowired
获取JndiDataSourceAutoConfiguration
:完成JDNI的自动配置XADataSourceAutoConfiguration
:完成分布式事务相关配置
完成启动器引入之后,我们可以在配置项中指定数据库的连接配置,主要完成连接url、用户名、密码和驱动的配置:
1 |
|
之后可以使用JdbcTemplate来测试是否能够正常工作:
1 |
|
SpringBoot默认配置的数据库连接池是HikariDataSource,之前我们使用的一直是Druid,这里也可以进行整合。
SpringBoot中整合第三方技术的有两种常见的方式,一种是自定义方式,手动将对应的类配置到IOC容器中,这样就底层就会使用我们配置的Bean对象;另一种方式是找到对应的场景启动器starter,这种一般是官方或者第三方提供的解决方案。
第一种方式,利用自定义方式整合Druid。我们需要先添加依赖:
1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>之后在配置类中提供需要被IOC容器管理的类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Configuration
public class MyConfig {
@Bean
@ConfigurationProperties("spring.datasource")//复用配置文件的数据源配置
public DataSource dataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
// druidDataSource.setUrl();
// druidDataSource.setUsername();
// druidDataSource.setPassword();
return druidDataSource;
}
}第二种方式,使用场景启动器。只需要直接引入相关starter即可:
1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
MyBatis整合
配置使用
在SSM中,DAO层我们使用的是MyBatis框架。我们同样可以在SpringBoot中整合MyBatis。由于MyBaits为我们提供了SpringBoot的场景启动器(GitHub - mybatis/spring-boot-starter: MyBatis integration with Spring Boot),因此我们直接在项目中引入即可:
1 |
|
引入启动器之后,SpringBoot会帮助我们完成自动配置。包括全局配置文件、SqlSessionFactory、SqlSession等。
之后,我们需要在application.yaml
配置文件中指定相关配置,除了上面的数据库连接配置之外,还需要配置mybatis规则,包括全局配置文件的位置,mapper配置文件的位置:
1 |
|
这里的全局配置文件mybatis-config.xml
我们只需要准备一个基本结构即可,其中的内容都会由SpringBoot自动进行配置,这里也就不需要我们配置了。
1 |
|
之后我们就可以按照MyBatis中的开发方式进行开发,完成Mapper接口以及对应的Mapper配置文件,这里的Mapper接口需要使用@Mapper
注解标识,才能被SpringBoot管理。据此,我们可以实现如下的Mapper接口和Mapper配置文件。
Mapper接口UserMapper
如下:
1 |
|
Mapper配置文件UserMapper.xml
如下:
1 |
|
之后可以进行测试,按照三层架构应该分成Contorller和Service层,不过这里我们可以全部写在一起。这里IOC容器中管理了对应接口的代理类,我们可以通过自动注入的方式来获取:
1 |
|
我们可以按照以前的方式,在全局配置文件中进行相关配置,也可以直接在配置文件application.yaml
中,利用mybatis
属性进行配置。我们也可以直接将配置全部写在其中的configuration
中,这里面的值就对应全局配置文件中的值。也就是说,我们配置了mybatis.configuration
,就不需要再配置MyBatis全局配置文件了:
1 |
|
默认没有开启驼峰转换,这里我们使用配置的方式进行开启。
总结来说,在SpringBoot中使用MyBatis,我们需要经过下面的步骤:
- 导入MyBatis官方提供的启动器starter
- 编写Mapper接口,使用
@Mapper
注解 - 编写Mapper配置文件并绑定对应的Mapper接口
- 在
application.yaml
中指定Mapper配置文件所在的位置,在mybatis.configuration
配置相关全局信息
注解使用
在MyBatis中我们还可以使用注解来完成SQL与方法映射:
1 |
|
这是提供的一种简化方式,当然也可以利用注解和配置文件结合。简单的操作方法就直接写在注解上,如果复杂的就写在配置文件中。
我们的Mapper接口都需要使用
@Mapper
注解进行标识,不过我们也可以在启动类上使用@MapperScan("com.syh.springboot.mapper")
注解,指明对应Mapper所在的包路径,之后对应包下的Mapper接口就可以不标注@Mapper
注解了。