新闻详情

新闻详情

首页 / 资讯中心 / 详情

【MyBatis系列2】MyBatis与Spring整合

发布时间:2026/9/25 18:28:07来源:尧图网络
【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男)项目框架如果只根据上面的示例想让项目跑起来对于小白来说还是有点困难的因为你不知道哪个文件放哪里这里我直接给出项目视图是不是感觉楼哥超级暖呢。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

隔夜日内收益分解的代码示例 2026/9/25 18:54:31

隔夜日内收益分解的代码示例

A 股中隔夜端可能强烈反转,日内端可能偏动量,且收益/波动很大部分来自隔夜跳空。 T1、涨跌停、集合竞价、散户占比高等制度与行为特征,使得总收益有必要拆成隔夜和日内。 这时尝试梳理如何拆分,以及如何构造隔夜/日内累计动量因…

阅读更多 →
计算机二级 Python 备考路线:考点分值分布、高频易错点与冲刺计划 2026/9/25 18:54:24

计算机二级 Python 备考路线:考点分值分布、高频易错点与冲刺计划

计算机二级 Python 备考路线:考点分值分布、高频易错点与冲刺计划 全国计算机等级考试二级 Python(科目 66)通过率并不高,多数人输在公共基础与细节语法上。本文给出一条清晰的备考路线,所有分值数据来自官方考纲。 一…

阅读更多 →
高分子材料燃烧的化学机理是什么?从热分解到自由基链式反应 2026/9/25 18:54:24

高分子材料燃烧的化学机理是什么?从热分解到自由基链式反应

电线短路引发火灾,沙发被烟头点燃,这些场景中的主角往往是高分子材料——塑料、橡胶、纤维、泡沫。它们为什么会燃烧?答案不是“因为含有碳”这么简单。燃烧需要三样东西同时在场高分子材料燃烧需要三个条件:燃料(材料…

阅读更多 →
MoE就是复制的mlp;gate 训练就是谁答的好久分给谁奖励 2026/9/25 18:54:18

MoE就是复制的mlp;gate 训练就是谁答的好久分给谁奖励

MoE-MLP 完整流转(输入→门控选专家→专家计算→输出) 目录 MoE-MLP 完整流转(输入→门控选专家→专家计算→输出) 一、先固定:几个专家、选几个(人工超参,不是模型决定) 二、内部逐层流转(一个token,从输入到输出) 步骤1:Gate门控打分(核心,一个线性层) 步骤2…

阅读更多 →
3DGS高斯泼溅项目环境搭建(传统Windows版)和ooosplat直接安装使用 2026/9/25 18:54:18

3DGS高斯泼溅项目环境搭建(传统Windows版)和ooosplat直接安装使用

ooosplat直接安装使用 OOOSplat 是一款将普通环绕拍摄视频或图片序列一键转换为 3D Gaussian Splatting 的本地桌面应用。选择素材、项目目录和质量档位后,应用会自动完成画面准备、相机重建、训练与 PLY 发布,并可直接预览、调整和导出结果 github下载…

阅读更多 →
为什么现在聚焦 kv cache;分清楚:kv权重 和 kv向量 2026/9/25 18:54:11

为什么现在聚焦 kv cache;分清楚:kv权重 和 kv向量

权重只存一份,KV 是每个 token 存一份,token 够多 kv 向量越大 目录 权重只存一份,KV 是每个 token 存一份,token 够多 kv 向量越大 一、先看两者怎么随长度变化 二、算出来的结果 三、为什么必然如此(本质) 四、现代大模型呢 一、先看两者怎么随长度变化 模型权重:固定…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉