通过Spring整合MyBatis实现持久层操作

文章目录

    • 为什么要整合Spring和MyBatis?
    • 步骤一:添加依赖
    • 步骤二:配置数据源
    • 步骤三:配置MyBatis
    • 步骤四:创建Mapper接口和XML文件
    • 步骤五:使用Mapper接口
    • 拓展:事务管理

在这里插入图片描述

🎉通过Spring整合MyBatis实现持久层操作


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:架构设计
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

Spring和MyBatis是Java开发中两个非常重要的框架,它们分别负责实现轻量级的控制反转(IoC)和面向切面(AOP)的Spring,以及数据持久化的MyBatis。通过整合Spring和MyBatis,我们可以充分发挥它们的优势,实现更加灵活和高效的应用程序。本文将介绍如何通过Spring整合MyBatis,以及在整合过程中常见的配置和使用方法。

在这里插入图片描述

为什么要整合Spring和MyBatis?

在传统的Java EE开发中,数据访问层和业务逻辑层往往需要通过独立的框架进行处理。Spring框架提供了IoC容器和AOP机制,使得应用程序更加模块化和可维护。而MyBatis是一个优秀的持久化框架,通过SQL映射文件将Java对象映射到数据库表,提供了便捷的数据库访问方式。整合Spring和MyBatis可以充分利用两者的优势,提高开发效率,降低维护成本。

步骤一:添加依赖

首先,我们需要在项目中添加Spring和MyBatis的相关依赖。如果使用Maven进行项目管理,可以在pom.xml文件中添加如下依赖:

<!-- Spring -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.10.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.10.RELEASE</version>
</dependency><!-- MyBatis -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version>
</dependency>

这里使用了Spring 5.3.10版本和MyBatis Spring Boot Starter 2.2.0版本,你可以根据需要选择合适的版本。

步骤二:配置数据源

在Spring整合MyBatis时,我们需要配置数据源。可以使用Spring提供的DataSource接口,也可以使用第三方库(如Druid)提供的数据源。以下是一个使用Spring Boot配置数据源的例子:

@Configuration
public class DataSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource() {return DataSourceBuilder.create().build();}
}

这里使用了@ConfigurationProperties注解,将spring.datasource前缀的配置属性注入到DataSource中,实现了数据源的配置。

在这里插入图片描述

步骤三:配置MyBatis

在整合过程中,我们还需要配置MyBatis的SqlSessionFactorySqlSessionTemplateSqlSessionFactory是MyBatis的核心接口,负责创建SqlSession对象;SqlSessionTemplate是MyBatis-Spring的核心类,提供了SqlSession的模板化方法。

@Configuration
@MapperScan(basePackages = "com.example.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
public class MyBatisConfig {@Autowiredprivate DataSource dataSource;@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);return factoryBean.getObject();}@Beanpublic SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}

在这里,使用@MapperScan注解指定了MyBatis的Mapper接口扫描路径,并注入了DataSource,配置了SqlSessionFactorySqlSessionTemplate

步骤四:创建Mapper接口和XML文件

在整合Spring和MyBatis后,我们可以创建Mapper接口和对应的XML文件,定义SQL语句和数据库操作。以下是一个简单的例子:

// Mapper接口
public interface UserMapper {User getUserById(int userId);
}
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.example.entity.User"><id column="id" property="id" jdbcType="INTEGER"/><result column="username" property="username" jdbcType="VARCHAR"/><result column="password" property="password" jdbcType="VARCHAR"/></resultMap><select id="getUserById" resultMap="BaseResultMap">SELECT * FROM user WHERE id = #{userId}</select>
</mapper>

步骤五:使用Mapper接口

最后,在Service或Controller中注入Mapper接口,并调用其中的方法:

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(int userId) {return userMapper.getUserById(userId);}
}

通过以上步骤,我们完成了Spring和MyBatis的整合。在实际开发中,可以根据项目的需求进行更灵活的配置和扩展。

拓展:事务管理

在实际项目中,为了保证数据的一致性和完整性,通常会涉及到事务管理。Spring提供了声明式事务管理的方式,通过@Transactional注解可以实现方法级别的事务控制。在整合Spring和MyBatis时,我们可以借助Spring的事务管理,确保数据库操作的原子性。

@Service
@Transactional
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(int userId) {return userMapper.getUserById(userId);}@Transactional(rollbackFor = Exception.class)public void updateUser(User user) {// 更新用户信息userMapper.updateUser(user);// 模拟异常,触发事务回滚if (user.getUsername().equals("rollback")) {throw new RuntimeException("Rollback!");}}
}

在上面的例子中,通过@Transactional注解修饰Service类,表示该类的所有方法都将启用事务管理。在updateUser方法中,通过@Transactional(rollbackFor = Exception.class)注解指定了异常回滚的条件,当用户名为"rollback"时,会触发事务回滚。

在这里插入图片描述

通过整合Spring和MyBatis,我们不仅可以充分发挥两者的优势,提高开发效率,还能通过Spring的事务管理确保数据的一致性。希望本文能够对你理解和应用Spring整合MyBatis有所帮助。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/213035.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python的turtle模块绘制钢铁侠图案

1.1引言&#xff1a; 在Python中&#xff0c;turtle模块是一个非常有趣且强大的工具&#xff0c;它允许我们以一个可视化和互动的方式学习编程。在本博客中&#xff0c;我们将使用turtle模块来绘制钢铁侠的图案。通过调用各种命令&#xff0c;我们可以引导turtle绘制出指定的图…

Springmvc原理解析

1. DispatcherServlet springmvc的核心控制器&#xff0c;负责截获所有的请求&#xff0c;当截获请求后委托给HandlerMapping进行请求映射的解析工作&#xff0c;目的是找到哪一个Controller的方法可以处理该请求&#xff0c;找到后再交由给HandlerAdaptor去负责调用并返回Mod…

编程参考 - C++ Code Review: 一个计算器的项目

GitHub - jroelofs/calc: Toy Calculator Toy Calculator 1&#xff0c;拿到一个project&#xff0c;第一眼看&#xff0c;没有配置文件&#xff0c;说明没有引入持续集成系统&#xff0c;continuous integration system。 2&#xff0c;然后看cmake文件&#xff0c;使用的子…

佳易王早点点餐快餐店点单软件会员管理系统教程

佳易王早点点餐快餐店点单软件会员管理系统教程 软件特色&#xff1a; 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff0c;已内置数据库。软件在关闭的时候&#xff0c;可以设置会员数据备份到U盘&#xff0c;数据本机备份一份&…

Navicat 技术指引 | 适用于 GaussDB 的查询编辑器

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

Windows如何截取屏幕图片以及动态图

在制作PPT或是其他演示文稿或是说明文档的时候&#xff0c; 常常需要截取网页或是屏幕的截图&#xff0c;在Windows中有多种方式可以实现截取屏幕。 Windows 截取屏幕图片的方式 在Windows 中截取屏幕中某个区块的方式有&#xff1a; 方式1. 最原始的方式&#xff1a; 点击 …

motionlayout的简单使用

MotionLayout 什么是motionLayout&#xff1f; MotionLayout 是 Android 中的一个强大工具&#xff0c;用于创建复杂的布局动画和过渡效果。它是 ConstraintLayout 的一个子类&#xff0c;继承了 ConstraintLayout 的布局功能&#xff0c;同时添加了动画和过渡的支持。Motion…

【计算机网络笔记】数据链路层概述

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

SQL Server 百万数据查询优化技巧三十则

点击上方蓝字关注我 互联网时代的进程越走越深&#xff0c;使用MySQL的人也越来越多&#xff0c;关于MySQL的数据库优化指南很多&#xff0c;而关于SQL SERVER的T-SQL优化指南看上去比较少&#xff0c;近期有学习SQLSERVER的同学问到SQL SERVER数据库有哪些优化建议&#xff1f…

【SpringMVC】 对请求的不同响应

前言 本文学习如何运用不同的注解来返回不同的响应. 1.返回静态页面Controller 返回index.html页面 Controller 和 RestController的区别 controller 只有加上这个注解,Spring才会帮我们管理这个代码.后续我们访问时才能访问到. RestController 等同于 Controller ResponseBo…

Linux文件查看命令

1.cat加上文件名 &#xff08;因为所有文件内容都会打印到屏幕上&#xff0c;所以内容少时使用这个&#xff0c;总不能用cat来定义一本小说&#xff09; 3.往文件中写入数据——cat加上>(重定向符&#xff09;加上文件名&#xff0c;写完之后&#xff0c;按键 cat原本是把…

Atlassian Confluence 路径遍历和命令执行漏洞 (CVE-2019-3396)

漏洞描述 Confluence 是由澳大利亚软件公司 Atlassian 开发的基于 Web 的企业 wiki。 Atlassian Confluence 6.14.2 版本之前存在一个未经授权的目录遍历漏洞&#xff0c;攻击者可以使用 Velocity 模板注入读取任意文件或执行任意命令。 漏洞环境及漏洞利用 启动docker环境…