当前位置: 首页 > news >正文

课堂复刻|个人经验分享:Spring Boot整合MyBatis

数据库操作是 Java 后端开发的核心刚需。原生 JDBC 代码冗余、耦合度高,维护繁琐;而 JPA、Hibernate 等全自动 ORM 框架,过度封装 SQL,在复杂业务与性能优化场景中灵活性严重不足。

在此背景下,MyBatis 成为了最优解之一。作为一款轻量级持久层框架,它摒弃了全自动 ORM 的强制映射机制,支持 XML 或注解自定义 SQL,兼顾开发效率与 SQL 可控性,完美适配各类业务场景。

凭借轻量化、高灵活、易扩展、适配 Spring Boot 的优势,MyBatis 早已是企业级 Java 项目的主流持久层框架。本文将傻瓜式教学带你系统掌握 MyBatis 核心用法。

一、项目创建

(1)新建项目

如上图,在新建项目处选择 Spring Boot (其实这里应该是 spring initializr,但是或许是版本差异?这边显示的是 Spring Boot),然后服务器 url 改为‘https://start.aliyun.com/’,语言选 java,类型选 Maven,jdk 按照自己电脑上配置的选择,然后 java 版本选择 java8。这里的 jdk 版本建议是选择比较老的版本,因为老版本还是相对来说比较成熟一点,更稳定,我们在老版本的问题基本上在网上都有大神遇到过,我们也有借鉴方案。如果选择新版本就不是很稳定,可能会出现一下新的情况,这个时候我们可能就会前功尽弃。java 版本同理。

(2)导入依赖

如上图,在我们第一步选择完毕后点击下一步来到此界面,首先我们在 Devoloper Tools、 Web、SQL这三项上分别选择 Lombok 依赖、Spring Web 场景依赖以及 Mybatis Framework 和 MySQL Driver 依赖,然后点击创建,就这样,一个新的项目就创建好啦!

补充:如果在实际项目发展过程中发现有依赖忘记导入也可以在当前项目下的pom.xml里面找到Edit Starters(编辑启动器)然后即可导入新的依赖,如下图。

二、创建数据库(表)和实体类

(1)创建数据库(表)

首先自行安装 MySQL 与 Navicat Premium 并完成相关配置后打开 Navicat Premium,点击“连接”

,选择 “MySQl”,然后点击“下一步”,来到“新建连接”界面,如下图。

然后输入“连接名称”、“端口号”(这里通常为3306)、“用户名”、“密码”后即可点击“确定”,然后就创建了一个新连接啦!(如下图)

tips: 这里的“连接名称”、“端口号”、“用户名”、“密码”要记住,后面会用到

创建好新连接后,鼠标左键点击连接启动连接,后右键点击数据库,选择“新建数据库”,如下图。

然后来到新建数据库界面,将数据库名称命名为“t_user”,同时字符集、排序规则分别为“utf8mb3”、“utf8mb3_general_ci”(如下图),然后点击确定,就创建好了我们需要的数据库啦!

接下来我们创建数据表,首先找到我们刚刚创建的t_user数据库,然后鼠标左键点击t_user数据库,找到表,鼠标右键点击表,然后选择新建表,如下图所示。

然后如下图所示添加“id”、“username”、“password”三个字段,并将表名也命名为“t_user”,点击保存,然后我们需要的数据表也就大功告成啦!

当然我们也可以找到我们的 t_user 表然后提前给表内手动添加几个数据,方便后面我们测试的时候能用。这里我们就先写下几个数据方便我们后面测试的时候能用,如下图。

(2)配置YAML

YAML 相较于 Spring Boot 原生的 properties 文件,层级结构一目了然,大幅提升配置可读性。它原生支持数组、嵌套对象等复杂数据类型,配置能力更强。语法更加精简,减少冗余书写,维护起来也更便捷,也是 Spring Boot 官方主推的配置格式。所以我们这里使用YAML来创建DataSource数据源配置和MyBatis配置。

首先我们删除掉项目自带的properties 文件,重新在原目录下创建“application.yaml”文件,如下图。(必须一字不多,一字不少!!!而且要在原properties 文件所在目录下创建!!!否则会导致项目无法识别YAML文件而报错!)

重要的事情再说一遍!!!如上图所示,必须要在“src/main/resources”下创建“application.yaml”,否则会报错!!!

然后打开YAML,然后输入下面的代码即完成配置!(值得一提的是,前文我们创建连接的时候记住的“连接名称”、“端口号”、“用户名”、“密码”即这里的url、username、password)

然后下面的mybatis配置的作用是为我们的mapper接口定位.xml文件的位置,因此下面的路径必须精准填写,否则就会因为找不到映射文件而报错,导致数据库操作无法执行。mapper-locations 配置指定了 MyBatis 会去哪里找对应的 XML 映射文件,这里 classpath:mappers/*.xml 表示在 resources/mappers/ 目录下加载所有 .xml 文件。而 type-aliases-package 则是给实体类起别名,让 XML 中可以直接写类名而不用写全限定类名,简化了配置。(这里的命名并不能一味与下面的代码一样,因为他的命名其实是“com.example.你的项目名.entity”,不要写成我的项目名咯!)mapUnderscoreToCamelCase: true 的意思是开启Mybatis开启驼峰映射。

spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/t_user username: root password: 123456 mybatis: mapper-locations: classpath:mappers/*.xml type-aliases-package: com.example.springboot_mypj.entity configuration: mapUnderscoreToCamelCase: true
(3)配置entity

在我们的“src/main/java/com/example/springboot_mypj”下创建“entity”,然后再在entity下创建实体类“Tuser”,并输入下面的代码。

@Data public class Tuser { private int id; private String username; private String password; }

三、使用mybatis连接数据库

首先在我们的“src/main/java/com/example/springboot_mypj”下创建一个mapper文件夹(即Dao文件夹),如下图。

然后再此文件夹下创建TuserXmlDao接口(注意是接口,不是类!),如下图所示。

接下来我们需要在接口里添加 getAllTuser 方法,具体代码如下:

@Mapper @Repository public interface TuserXmlDao { public List<Tuser> getAllTuser(); public Tuser getOneTuser(Integer id); public int addTuser(Tuser tuser); public int UpdateTuser(@Param("id") Integer id, @Param("username") String username, @Param("password") String password); public int deleteTuser(Integer id); }

然后在resource目录下,创建一个统一管理映射文件的包mappers,在包内创建一个与我们前面写的接口相对应的映射文件。

然后在“TuserXmlDao.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.example.springboot_mypj.mappers.TuserXmlDao"> <select id="getAllTuser" resultType="Tuser"> select * from t_user </select> <select id="getOneTuser" resultType="Tuser"> select * from t_user where id=#{id} </select> <insert id="addTuser" parameterType="Tuser"> insert into t_user values (#{id},#{username},#{password}) </insert> <update id="UpdateTuser" > update t_user set username=#{username},password=#{password} where id=#{id} </update> <delete id="deleteTuser" > delete from t_user where id=#{id} </delete> </mapper>

这里写的主要都是数据库操作的 SQL 语句,通过 MyBatis 的 XML 映射文件,和之前定义的 Mapper 接口进行绑定,实现增删改查的功能。这里只有几个要注意的小细节:

  1. namespace的在我们写的时候还是要注意不要写错了,它的命名其实就是“com.example.你的项目名.包名(本文即mappers,不要成mapper喽).xml文件名(本文即TuserXmlDao)”
  2. 下面的 id 要和我们的接口文件定义的方法分毫不差,包括大小写问题,否则就会报错。

写到这,我们就连接完成啦!下面是我们整个下面的一个项目结构。

四、增删改查测试

接下来我们在test文件夹下找到测试类“SpringBootMyPjApplicationTests.java”,进行测试。如下图可以看见我们提前在数据库里手动添加了几份数据。

OK呀,首先我们先进行查询的测试,首先先进行全体搜索检阅的测试,如下所示,我们这里使用的是增强for。

@SpringBootTest class MyBatisDemoApplicationTests { @Autowired private TuserXmlDao tuserXmlDao; @Test void testGetALLxml() { List<Tuser> list = tuserXmlDao.getAllTuser(); list.forEach(System.out::println); } }

发现结果如下:

与我们的数据库对比后发现完整获取我们数据表里面的信息,证明我们的代码是生效的。

接下来是我们的单条查询,代码如下:

@SpringBootTest class MyBatisDemoApplicationTests { @Autowired private TuserXmlDao tuserXmlDao; @Test void testGetOnexml() { Tuser tuser = tuserXmlDao.getOneTuser( 1); System.out.println("\n\n这是查询到的语句:"+tuser+"\n\n"); } }

结果如下:

与我们的数据库对比后发现完整获取我们数据表里的第一条信息,综上可以得出我们的查询相关的方法是生效的。

接下来是添加数据的语句,代码如下:

@SpringBootTest class MyBatisDemoApplicationTests { @Autowired private TuserXmlDao tuserXmlDao; @Test void testAddUser() { Tuser tuser = new Tuser(); tuser.setUsername("Donack"); tuser.setPassword("jz520"); int i = tuserXmlDao.addTuser(tuser); System.out.println(i); } }

结果如下:

可以发现,我们的数据表新增了一条id为7的新数据,添加的用户名与密码也正是我们在代码里写的“Donack”与“jz520”,证明我们的添加的方法是生效的。

接下来是更新数据的语句,代码如下:

@SpringBootTest class MyBatisDemoApplicationTests { @Autowired private TuserXmlDao tuserXmlDao; @Test void testUpdate() { int i = tuserXmlDao.UpdateTuser( 1, "yxl", "yx521"); System.out.println(i); } }

结果如下:

可以看到,我们id为1的数据原本的用户名“Donack”和密码“jz520”已经被更改为“yxl”和“yx521”,证明我们的更新方法是生效的。

最后是删除数据的语句,代码如下:

@SpringBootTest class MyBatisDemoApplicationTests { @Autowired private TuserXmlDao tuserXmlDao; @Test void testDeleteUser() { int i = tuserXmlDao.deleteTuser( 2); System.out.println(i); } }

结果如下:

不难发现,我们id为2的数据被删除了,说明我们删除的方法是生效的。

五、总结

本次完成了 Spring Boot 整合 MyBatis 的实操,搭建项目并配置好数据库、YAML 文件,编写实体类、接口和 SQL 映射文件。经过测试,增删改查功能全部正常运行,成功实现程序与数据库的数据交互!

http://www.jsqmd.com/news/894172/

相关文章:

  • 别再被鱼眼照片搞懵了!用OpenCV+Python手把手教你搞定相机畸变矫正(附完整代码)
  • UVa 297 Quadtrees
  • Cortex-M4外部Flash断点调试问题解决方案
  • 从开发者角度观察Taotoken平台模型更新与路由优化的及时性体验
  • 2026年5月更新指南:武安靠谱的单招机构企业选择策略解析 - 2026年企业资讯
  • AIoT与嵌入式系统深度解析:2026软考案例核心考点全攻略
  • 量子机器学习在药物发现中的创新应用
  • 别再乱改grub了!用tuned优雅隔离CPU核心,让你的Linux应用性能飞起来
  • 2026年Q2杭州智显货架评测:杭州更鞋柜、杭州校园存包柜、杭州耗材管理柜、杭州警用装备柜、浙江RFID智能货架选择指南 - 优质品牌商家
  • C51开发中stdarg.h实现机制与内存模型解析
  • 2026年乐山汽车改装公司实测评测:乐山汽车内饰改装/乐山汽车刹车改装/乐山汽车外观改装/乐山汽车延保服务/乐山汽车改装备案/选择指南 - 优质品牌商家
  • 2026年5月有名的蝶阀订购厂家深度评测:技术驱动下的阀门优选之道 - 2026年企业资讯
  • ShaderGraph避坑指南:从导入URP到属性公开,新手最容易卡住的5个问题及解决
  • B41C2 是什么牌号?四川莱韦美特高强变形镁合金 B41C2 参数详解(兼谈与 B91C2 的区别与选型)
  • Arm ISP多上下文环境构建与优化实战指南
  • B91C2 是什么牌号?四川莱韦美特高强变形镁合金 B91C2 参数、命名、对标与应用全解读
  • 西南市政管网服务企业排行:成都荣晟祥发市政工程有限公司联系/四川非开挖顶管置换修复联系电话/园区管道探测哪家好/选择指南 - 优质品牌商家
  • 保姆级图解:Android相机从App点击到出图的完整请求链路(以Camera Service为核心)
  • 2026龙鱼灯具品牌哪个好?马印凭复合调光与赛事背书进入候选 - 广州矩阵架构科技公司
  • 光纤传感与光学计算融合技术及其在机器人监测中的应用
  • 保姆级教程:在CentOS 7上用源码编译安装Netdata性能监控面板(附常见启动失败排查)
  • 用Python爬虫+数据分析,揭秘《最后一片叶子》的词汇密码与情感曲线(附完整代码)
  • 跟着 MDN 学CSS day_19:(实战挑战之内容面板的尺寸与装饰)
  • 龙鱼灯具选购常见的3个误区:2026年龙鱼照明避坑指南与品牌决策清单 - 广州矩阵架构科技公司
  • T113-S3上给Tina5.0系统加装USB WiFi(RTL8188FU)的完整避坑指南
  • 银河麒麟V10/V10.1系统换源保姆级教程:告别官方源慢,一键配置国内镜像(附各版本源地址)
  • Java语言概述
  • 用Python+爬虫+数据分析,量化分析《最后一片叶子》的文本情感与角色关系
  • 3分钟学会AI虚拟试衣:玩转电商试衣教程
  • 基数排序:高效稳定的数字排序算法