Springboot整合JdbcTemplate和Mybatis
本文介绍 SpringBoot 整合 JdbcTemplate 和 MyBatis 两种方式,均都体现了SpringBoot简化数据访问层开发的特性。
springboot整合JdbcTemplate
首先需要在数据库中创建表
sql
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`username` varchar(10) DEFAULT NULL,
`userId` int(10) NOT NULL,
`password` varchar(10) DEFAULT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Springboot中提供了JdbcTemplateAutoConfiguration 的自动配置 org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,
JdbcTemplateAutoConfiguration 源码如下:

java
@Controller
public class TestController {
@Autowired
JdbcTemplate jdbcTemplate;
@ResponseBody
@RequestMapping("/query")
public List<Map<String, Object>> query(){
List<Map<String, Object>> maps = jdbcTemplate.queryForList("SELECT * FROM user");
return maps;
}
}
由于 Springboot 中提供了 JdbcTemplateAutoConfiguration 的自动配置,直接使用 @Autowired 注解注入即可,启动 springboot,测试访问 http://localhost:8080/query

访问成功
打开监控页面

Springboot整合Mybatis注解方式
导入 mybatis 整合 springboot 模块
xml
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

创建JavaBean
java
import java.util.Date;
public class Person {
private int pid;
private String pname;
private String addr;
private int gender;
private Date birth;
public Person() {
}
public Person(int pid, String pname, String addr, int gender, Date birth) {
this.pid = pid;
this.pname = pname;
this.addr = addr;
this.gender = gender;
this.birth = birth;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "Person{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", addr='" + addr + '\'' +
", gender=" + gender +
", birth=" + birth +
'}';
}
}
创建Mapper
java
import java.util.List;
@Mapper
public interface PersonMapper {
@Select("select * from person")
public List<Person> getPersons();
@Select("select * from person t where t.pid = #{id}")
public Person getPersonById(int id);
@Options(useGeneratedKeys =true, keyProperty = "pid")
@Insert("insert into person(pid, pname, addr,gender, birth)" +
" values(#{pid}, #{pname}, #{addr},#{gender}, #{birth})")
public void insert(Person person);
@Delete("delete from person where pid = #{id}")
public void update(int id);
}
其中 @Options(useGeneratedKeys =true, keyProperty = "pid"),MyBatis 会获取到自增的 pid,自动赋值给传入的 person 对象的 pid 属性。
@Mapper 用于明确标记 MyBatis 对应的 Mapper 接口,核心职责是为 MyBatis 提供接口识别信号,触发 MyBatis 对接口的解析与动态代理实现类生成;在 Spring Boot 整合 MyBatis的场景下,该动态代理类会被自动注册为 Spring 容器中的 Bean,支持业务代码通过 @Autowired 直接注入使用。
单元测试
java
@RunWith(SpringRunner.class)
@SpringBootTest
public class springBootMybatisTest {
@Autowired
PersonMapper personMapper;
@Test
public void testMybatis() throws SQLException {
List<Person> persons = personMapper.getPersons();
for (Person person : persons) {
System.out.println(person);
}
}
@Test
public void testMybatis1() throws SQLException {
Person p = personMapper.getPersonById(1);
System.out.println(p);
}
}

开启 MyBatis 的下划线转驼峰命名自动映射功能
java
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer getCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}
当项目中 Mapper 接口数量较多,若在每个 Mapper 接口上逐一添加 @Mapper 注解,会增加重复工作量且不易维护。此时可采用 @MapperScan 注解的批量扫描方案。在 MyBatis 相关配置类或 Spring Boot 主启动类上添加 @MapperScan 注解,指定 Mapper 接口所在的包路径,MyBatis 会自动扫描该路径下所有接口,将其识别为 Mapper 接口,无需额外标注 @Mapper,即可完成动态代理实现类的生成与 Spring Bean 的注册。
Springboot整合Mybatis配置文件方式
classpath:mybatis 下创建 sqlMapConfig.xml 全局配置文件
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>
其中 mapUnderscoreToCamelCase 值为 true 用于开启下划线转驼峰命名自动映射功能
创建sql映射文件 PersonMapper.xml
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.qcby.springBootMybatis.mapper.PersonMapper">
<select id="getPersons" resultType="com.qcby.springBootMybatis.bean.Person">
select * from person
</select>
</mapper>
在 application.yaml 中配置 mybatis 相关配置信息

其中
config-location 值为全局配置文件路径
mapper-locations 值为sql映射文件
type-aliases-package 值为实体类所在包的全路径
测试验证

需要注意的是使用了 Springboot 整合 Mybatis 配置文件方式,Springboot 整合 Mybatis 注解版也同样会生效