【MyBatis系列2】MyBatis与Spring整合

发布时间:2026/9/25 18:28:23

【MyBatis系列2】MyBatis与Spring整合 通过示例讲解MyBatis和Spring整合的流程。前言这个MyBatis和Spring整合示例是我今年3月份刚转岗时需要熟悉MyBatis时写的主要是想知道项目是如何从0到1在Spring中用到MyBatis。这个示例是参考“C语言中文网”但是里面的示例不能直接运行可能是因为版本等原因当时为了集成MyBatis和Spring倒腾了好几天现在回过来看如果你完全不了解MyBatis的基础知识直接照葫芦画瓢虽然也能解决问题但是排查问题的过程其实是非常痛苦的下面我将给一个两者集成的完整示例让大家少走弯路。项目准备DB使用的是Mysqlpom.xml需要添加的依赖包dependency groupIdorg.mybatis/groupId artifactIdmybatis/artifactId version3.4.6/version /dependency dependency groupIdorg.mybatis/groupId artifactIdmybatis-spring/artifactId version2.0.0/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version6.0.6/version /dependencyDB结构CREATE TABLE user_test ( uid tinyint(2) NOT NULL, uname varchar(20) DEFAULT NULL, usex varchar(10) DEFAULT NULL, PRIMARY KEY (uid) ) ENGINEInnoDB DEFAULT CHARSETutf8DB初始数据uidunameusex1张三女2陈恒男3楼仔男集成示例第1步创建持久化类Data public class MyUser { private Integer uid; // 主键 private String uname; private String usex; }第2步创建映射文件?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.mybatis.dao.UserDao !-- 根据uid查询一个用户信息 -- select idselectUserById parameterTypeInteger resultTypecom.mybatis.entity.MyUser select * from user_test where uid #{uid} /select !-- 查询所有用户信息 -- select idselectAllUser resultTypecom.mybatis.entity.MyUser select * from user_test /select !-- 添加一个用户#{uname}为 com.mybatis.po.MyUser 的属性值 -- insert idaddUser parameterTypecom.mybatis.entity.MyUser insert into user_test (uid,uname,usex) values(#{uid},#{uname},#{usex}) /insert !--修改一个用户 -- update idupdateUser parameterTypecom.mybatis.entity.MyUser update user_test set uname #{uname},usex #{usex} where uid #{uid} /update !-- 删除一个用户 -- delete iddeleteUser parameterTypeInteger delete from user_test where uid #{uid} /delete /mapper第3步创建映射文件对应的接口Repository(userDao) Mapper /* * 使用Spring自动扫描MyBatis的接口并装配 Spring将指定包中所有被Mapper注解标注的接口自动装配为MyBatis的映射接口 */ public interface UserDao { /** * 接口方法对应的SQL映射文件中的id */ public MyUser selectUserById(Integer uid); public ListMyUser selectAllUser(); public int addUser(MyUser user); public int updateUser(MyUser user); public int deleteUser(Integer uid); }之前直接使用MyBatis时是没有这个接口文件的添加这个文件是为了能让Spring和Mybatis的操作通过该文件关联起来即通过上述提供的接口实现对DB的操作。第4步新建mybatis配置?xml version1.0 encodingutf-8? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration settings setting namelogImpl valueLOG4J / setting namecacheEnabled valuefalse/ setting namedefaultExecutorType valueREUSE/ setting nameuseGeneratedKeys valuetrue/ /settings /configuration由于后面会将两者整合所以关于MyBatis中environments和mappers的配置将会全部移到applicationContext.xml中这个是直接用MyBatis中一个很大的区别。第5步新增DB配置文件新增DB配置文件jdbc.properties用于保存DB配置信息jdbc.shop.urljdbc:mysql://xxx:3104/xm_jointly?characterEncodingutf8 jdbc.shop.usernamejointly_xx jdbc.shop.passwordG-uTlU-xxx第6步增加配置信息需要在applicationContext.xml中新增配置信息这里就是整个集成的关键所在!-- 用于加载配置文件 -- bean classorg.springframework.beans.factory.config.PropertyPlaceholderConfigurer property namelocation valueclasspath:com/mybatis/config/datasources/jdbc.properties/value /property /bean !-- 定义数据源 -- bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSource property nameurl value${jdbc.shop.url}/property property nameusername value${jdbc.shop.username}/property property namepassword value${jdbc.shop.password}/property /bean !-- 添加事务支持 -- bean idtxManager classorg.springframework.jdbc.datasource.DataSourceTransactionManager property namedataSource refdataSource / /bean !-- 注册事务管理驱动 -- tx:annotation-driven transaction-managertxManager / !-- 配置SqlSessionFactoryBean -- bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean !-- 引用数据源组件 -- property namedataSource refdataSource / !-- 引用DB XML配置文件 -- property namemapperLocations valueclasspath*:com/mybatis/mapper/UserMapper.xml / !-- 引用MyBatis配置文件中的配置 -- property nameconfigLocation valueclasspath:com/mybatis/config/datasources/mybatis-config.xml / /bean !-- Mapper代理开发使用Spring自动扫描MyBatis的接口并装配 Spring将指定包中的所有被Mapper注解标注的接口自动装配为MyBatis的映射接口 -- bean classorg.mybatis.spring.mapper.MapperScannerConfigurer !-- mybatis-spring组件的扫描器com.dao只需要接口接口方法与SQL映射文件中的相同 -- property namebasePackage valuecom.mybatis.dao / property namesqlSessionFactoryBeanName valuesqlSessionFactory / /bean这个配置需要解读一下用于加载配置文件用于存放DB的配置信息就是上文中提到的jdbc.properties配置文件这样的好处就是不需要将DB配置信息在XML中写死。定义数据源这个就是DB的账户和密码了jdbc.shop.url和jdbc.shop.username等就是DB的配置信息保存在jdbc.properties配置文件中。添加事务支持之前这个事务支持的配置是在MyBatis中的environments中现在给挪到了这里还是采用JDBC的方式。注意一下添加事务一定需要注册事务管理驱动。配置SqlSessionFactoryBean这个其实还是MyBatis中之前的配置dataSource是数据源、mapperLocations是XML映射文件、configLocation是MyBatis的原始配置相当于把之前未集成的MyBatis配置拆分了一下把里面的environments和mappers给挪到这里来了。这个其实就是用来构建sqlSessionFactory会话工厂我们可以再回顾一下MyBatis的调用流程这个建议大家看看文章《【MyBatis系列1】基础知识下》应该就能很明显看出他们的区别所以为什么需要大家掌握MyBatis未集成的实现方式这样可以知道它的原貌包括后面继承Spring Boost原理都一样只是换了一种展示方式。Spring自动扫描MyBatis的接口并装配这里就是两者结合的核心怎么结合呢通过com.mybatis.dao.UserDao接口就是我们“第3步创建映射文件对应的接口”所以这个才是两者集成的核心里面的basePackage指定接口路径sqlSessionFactoryBeanName是用到的sqlSessionFactory会话工厂。到这里是不是就很清晰了呢我可是结合MyBatis未集成的方式进行对比讲解这样就知道Spring对于两者的集成都做了哪些事情。第7步测试示例我们先常见一个测试类Controller(userController) public class UserController { Autowired private UserDao userDao; public void test() { // 查询一个用户 MyUser auser userDao.selectUserById(1); System.out.println(auser); System.out.println(); // 查询所有用户 ListMyUser list userDao.selectAllUser(); for (MyUser myUser : list) { System.out.println(myUser); } } }测试示例// 用于测试MyBatis和Spring的集成 public class SpringMyBatisTest { public static void main(String[] args) { String xmlPath applicationContext.xml; ApplicationContext applicationContext new ClassPathXmlApplicationContext(xmlPath); UserController uc (UserController) applicationContext.getBean(userController); uc.test(); } }输出结果MyUser(uid1, uname张三, usex女) MyUser(uid2, uname陈恒, usex男) MyUser(uid3, uname楼仔, usex男)项目框架如果只根据上面的示例想让项目跑起来对于小白来说还是有点困难的因为你不知道哪个文件放哪里这里我直接给出项目视图是不是感觉楼哥超级暖呢。
延伸阅读

更多相关文章

2026/9/25 18:28:23

生猪运输流向智能分析系统:让每一车猪都“来路可查、去向可追”

生猪调运是养猪产业链的“大动脉”——全国每年跨省调运生猪数亿头次,一辆9.6米高栏车就能装150头猪,一趟行程连接的是养殖场、贩运商、屠宰场三个环节。可这条动脉的“血流方向”,长期处于“看不清、管不住”的状态:猪从哪里来、…

2026/9/25 18:23:22

解读 2026AI智能体应用法律治理研究报告

本报告适配 AI 大模型、智能体项目咨询方案编制、合规体系建设与企业法务内训。厘清 AI 智能体概念特征、技术架构与全产业链格局,覆盖多行业落地场景,梳理中欧美智能体相关法律法规与监管政策。 深度剖析智能体现存法律风险,围绕侵权责任划分、个人信息保护困境展开研究,提…

2026/9/25 21:58:33

机器人驱动控制 FOC 算法使用经验总结:从电流采样到调参踩坑

第一次把 FOC 跑起来是在一块 STM32F4 的板子上,照着 SimpleFOC 的例程改的。上电,电机轻轻一抖,然后开始疯狂加速,吓得我直接拔线。后来知道那叫"飞车",是电角度错拍的典型症状。 那之后断断续续折腾了两三年,从关节模组到平衡车轮毂电机都碰过。这篇不打算讲…

2026/9/25 21:58:33

学校用知网查AI率,平时自查可以用哪些免费工具?

学校用知网查AI率,平时自查可以用哪些免费工具? 学校已经说要用知网,可论文还在修改,不想每改一段就正式送检。平时可以先用PaperPass、率零免费检测找问题;知网AI率已经偏高、需要试改时,再考虑比话。免费…

2026/9/25 21:58:33

网络工程师别只会配设备了,SDN、SD-WAN、云网络才是新赛道

许多人一旦提到网络工程师这个职业, 脑海中浮现出的图像往往还固化在过去的那几件事物上, 比如交换机、路由器、防火墙, 还有VLAN、OSPF以及ACL这些技术概念。当然, 这些东西确实具备相当重要的地位, 并且直至当下, 它们仍然是行业内最为基础的核心内容。然而, 假如一个人仅仅将…

2026/9/25 21:58:33

昇腾Atlas 300V 24G推理卡部署YOLO实战指南

最近后台收到不少类似的问题:Atlas 300V 24G是不是运算加速卡?还有一堆人在搜“Atlas部署YOLO”。作为一个在昇腾这套生态环境里折腾过一阵子的人,我想先把结论放在前面:Atlas 300V 24G确实是运算加速卡,但它不是给你当…

2026/9/25 21:58:33

ICO/PNG转SVG工具 –谦汐盒子- 在线位图一键转高清矢量图

一、工具简介ICO/PNG转SVG在线工具是一款轻量化、本地运行的图片矢量转换工具,支持将 ICO、PNG、JPG、GIF、WebP、BMP 等常见位图格式,快速转换为标准 SVG 矢量图形。工具内置专业 Potrace 矢量追踪算法,支持原图嵌入模式和智能矢量追踪模式双…

2026/9/25 21:53:32

Atlas 300V 24G 部署 YOLOv5 完整实战:从环境搭建到推理调优

去年底接了一个工业视觉项目,客户指定的就是 Atlas 300V 24G 这张卡,要求在上面跑 YOLOv5 做缺陷检测。当时团队里不少人第一反应是问“Atlas 300V 24G 是运算加速卡吗、能直接当 GPU 用吗”,等我把整套流程跑通之后,才发现市面上…

2026/9/25 21:00:17

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/25 20:59:52

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑