news 2026/10/28 10:20:47

【Springboot】数据层开发-JdbcTemplate和Mybatis整合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Springboot】数据层开发-JdbcTemplate和Mybatis整合

Springboot整合JdbcTemplate

首先需要在数据库中创建表

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 源码如下:

@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 模块

<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

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

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 直接注入使用。

单元测试

@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 的下划线转驼峰命名自动映射功能

@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 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 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 注解版也同样会生效

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 3:11:09

GLM-4.7正式开源:国产模型在编程与推理领域实现关键突破

就在深夜&#xff0c;智谱AI正式发布并开源了GLM-4.7。该版本针对开发者最关心的编码能力、逻辑推理以及自动化任务规划进行了深度优化&#xff0c;并在多项全球主流评测中取得了开源模型的领先成绩。 image.png 总结了本次GLM-4.7的一些进步的地方。 01 编程能力进入全球第一…

作者头像 李华
网站建设 2026/10/27 9:31:48

投诉处理话术:化解矛盾重建信任

投诉处理话术&#xff1a;化解矛盾重建信任 在客户服务一线&#xff0c;每一个投诉电话背后都是一次信任的裂痕。客户愤怒地打进热线&#xff1a;“我三天前下的单到现在还没发货&#xff0c;你们是不是打算骗钱&#xff1f;”坐席人员手忙脚乱翻找政策文档&#xff0c;一边压着…

作者头像 李华
网站建设 2026/10/27 22:15:00

无源蜂鸣器外围电路设计核心要点解析

无源蜂鸣器怎么响得又亮又稳&#xff1f;一文讲透驱动设计的那些“坑”你有没有遇到过这种情况&#xff1a;代码写好了&#xff0c;PWM也配了&#xff0c;蜂鸣器是“嘀”了一声——但声音小得像蚊子叫&#xff1b;更糟的是&#xff0c;一响起来ADC读数就开始乱跳&#xff0c;串…

作者头像 李华
网站建设 2026/10/28 0:17:00

什么是代理IP?代理IP的应用场景有哪些?

代理IP&#xff0c;顾名思义&#xff0c;是一种通过中间服务器转发访问请求&#xff0c;从而实现IP地址替换的网络技术。它可以让用户在访问目标网站或系统时&#xff0c;不直接暴露本地IP&#xff0c;而是通过一个代理服务器的IP进行连接。举个例子&#xff0c;如果将真实IP比…

作者头像 李华
网站建设 2026/10/21 13:33:14

20、媒体管理:Flickr 照片上传与视频帧捕获

媒体管理:Flickr 照片上传与视频帧捕获 在当今数字化时代,媒体管理变得越来越重要。无论是上传照片到社交媒体平台,还是捕获和传输视频帧,都需要高效且可靠的方法。本文将详细介绍如何使用 Windows Phone 应用程序实现照片上传到 Flickr 以及捕获和传输手机摄像头的视频帧。…

作者头像 李华
网站建设 2026/10/27 13:36:23

WeMod-Patcher:3步解锁游戏辅助工具的完整指南 [特殊字符]

WeMod-Patcher&#xff1a;3步解锁游戏辅助工具的完整指南 &#x1f3ae; 【免费下载链接】Wemod-Patcher WeMod patcher allows you to get some WeMod Pro features absolutely free 项目地址: https://gitcode.com/gh_mirrors/we/Wemod-Patcher 还在为游戏辅助工具的…

作者头像 李华