写一篇关于SpringBoot整合MyBatis的笔记,这里我写出三种整合的方式,分别为:注解版,xml版,配置类版。在此之前我对整合的实现做出一定简述:仓库管理使用的是Maven,SpringBoot默认集成了JDBC,当然我们可以使用更强大的Druid做为我们的数据源。无论哪种整合方式都需要添加myBatis的相关依赖:
<!--myBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
并且我使用的是MySql数据库:
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
一、注解版
properties.yml数据库链接配置
server:
port: 8066
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/yjkf_iot?seUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: ******
数据库实体类:
package com.yjkf.zh.admin.model;
public class SysUser {
private long id;
private String userName;
private String password;
private String nickName;
private Long status;
private String mobile;
private Long deptId;
private String salt;
//省略get/set
}
mapper接口
import com.yjkf.zh.test.model.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
@Select("select * from sys_user where id=#{id}")
public SysUser getUserId(long id);
}
collector控制视图:
import com.yjkf.zh.test.mapper.UserMapper;
import com.yjkf.zh.test.model.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/user/{id}")
public SysUser getUser(@PathVariable("id") long id){
return userMapper.getUserId(id);
}
}
访问接口,以JSON的形式返回数据,特别注意,每个实体类都配置了@mapper,也可以在启动类上添加
@MapperScan(value="com.***.mapper") //批量扫描所有mapper接口
,有些情况存在驼峰命名的影响,会获取不到值,在这里可以单独配置一个驼峰命名的配置类:
@Configuration
public class MyBatisConfig{
@Bean
public ConfigurationCustomizer configurationCustion(){
return new ConfigurationCustomizer(){
public void customize(Configuration configuration){
configuration.setMapUnderscoreToCamelCase(true);
}
}
}
}
二、配置文件
resources下新建mybatis文件夹,并添加mybatis-config.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">
<configuration>
<settings>
<!--驼峰命名设置-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
并在mybatis下新建文件夹mapper,创建UserMapper.xml映射文件:
<?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">
<mapper namespace="com.yjkf.zh.test.mapper.UserMapper">
<select id="getUserId" resultType="com.yjkf.zh.test.model.SysUser">
select * from sys_user where id = #{id}
</select>
</mapper>
对应的mapper接口为:
@Mapper
public interface UserMapper {
//@Select("select * from sys_user where id=#{id}")
public SysUser getUserId(long id);
}
properties.yml文件添加:
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
controller控制类没有变动。
三、类配置方式
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan("com.yjkf.zh.**.dao")
public class MybatisConfig {
@Autowired
private DataSource dataSource;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception{
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setTypeAliasesPackage("com.zhkf.zh.**.model"); //扫描model
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:**/sqlmap/*.xml")); //扫描映射文件
return sessionFactoryBean.getObject();
}
}
这里内部执行原理太多,不便于介绍,适用于初学者体验以及大家复习参考。