资讯详情

【MyBatis系列2】MyBatis与Spring整合

📅 2026/9/25 18:28:31 | 华诺云谱 👁 阅读
【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男)项目框架如果只根据上面的示例想让项目跑起来对于小白来说还是有点困难的因为你不知道哪个文件放哪里这里我直接给出项目视图是不是感觉楼哥超级暖呢。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑