课堂复刻|个人经验分享: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类型选 Mavenjdk 按照自己电脑上配置的选择然后 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配置YAMLYAML 相较于 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: true3配置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 ListTuser 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 version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.example.springboot_mypj.mappers.TuserXmlDao select idgetAllTuser resultTypeTuser select * from t_user /select select idgetOneTuser resultTypeTuser select * from t_user where id#{id} /select insert idaddTuser parameterTypeTuser insert into t_user values (#{id},#{username},#{password}) /insert update idUpdateTuser update t_user set username#{username},password#{password} where id#{id} /update delete iddeleteTuser delete from t_user where id#{id} /delete /mapper这里写的主要都是数据库操作的 SQL 语句通过 MyBatis 的 XML 映射文件和之前定义的 Mapper 接口进行绑定实现增删改查的功能。这里只有几个要注意的小细节namespace的在我们写的时候还是要注意不要写错了它的命名其实就是“com.example.你的项目名.包名本文即mappers不要成mapper喽.xml文件名本文即TuserXmlDao”下面的 id 要和我们的接口文件定义的方法分毫不差包括大小写问题否则就会报错。写到这我们就连接完成啦下面是我们整个下面的一个项目结构。四、增删改查测试接下来我们在test文件夹下找到测试类“SpringBootMyPjApplicationTests.java”进行测试。如下图可以看见我们提前在数据库里手动添加了几份数据。OK呀首先我们先进行查询的测试首先先进行全体搜索检阅的测试如下所示我们这里使用的是增强for。SpringBootTest class MyBatisDemoApplicationTests { Autowired private TuserXmlDao tuserXmlDao; Test void testGetALLxml() { ListTuser 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 映射文件。经过测试增删改查功能全部正常运行成功实现程序与数据库的数据交互