MyBatisPlus快速入门(二)MyBatisPlus快速入门体验

news/2024/9/18 8:11:18/

  • 一、初始化数据库(基于 HeidiSQL)
    • 1.1 创建数据库
    • 1.2创建数据表
    • 1.3 初始化数据
  • 二、初始化项目(基于Spring Boot)
    • 2.1 创建项目
    • 2.2 新增依赖
    • 2.3 数据库配置
    • 2.4 配置 MyBatis Plus
    • 2.5 创建实体类
    • 2.6 创建Mapper层接口
    • 2.7 创建Server层接口
    • 2.8 创建Server层接口实现
    • 2.9 创建 Controller 控制器类
  • 三、测试项目(基于浏览器)
    • 3.1 运行项目
    • 3.2 测试查询接口
    • 3.3 测试新增接口
    • 3.4 测试编辑接口
    • 3.5 测试删除接口
  • 四、总结

一、初始化数据库(基于 HeidiSQL)

1.1 创建数据库

MyBatisPlus 快速入门体验之前,请同学们运行 HeidiSQL

运行后,输入您电脑本地 MySQL 的配置,点击打开,界面如下图所示。

在这里插入图片描述

如果您没有安装HeidiSQL,可以进入 HeidiSQL 官网 进行下载安装,MySQL同理。

请同学们新建一个数据库:mybatisplus,界面如下所示。

在这里插入图片描述

在这里插入图片描述

创建完成后,界面如下图所示。

在这里插入图片描述


1.2创建数据表

首先请同学们创建用户表 user,创建的 SQL 命令如下。

CREATE TABLE `user` (`name` VARCHAR(50) NULL DEFAULT NULL,`age` INT(10) NULL DEFAULT NULL,`address` VARCHAR(50) NULL DEFAULT NULL,`mobile` VARCHAR(50) NULL DEFAULT NULL
) ENGINE=InnoDB;

在这里插入图片描述


1.3 初始化数据

用户表 user 表创建完成后,接下来需要初始化 5 5 5 条用户的数据,SQL 命令如下。

INSERT INTO `user` (`name`, `age`, `address`, `mobile`) VALUES ('张三', 18, '测试地址1', '13600000001');
INSERT INTO `user` (`name`, `age`, `address`, `mobile`) VALUES ('李四', 19, '测试地址2', '13600000002');
INSERT INTO `user` (`name`, `age`, `address`, `mobile`) VALUES ('王五', 20, '测试地址3', '13600000003');
INSERT INTO `user` (`name`, `age`, `address`, `mobile`) VALUES ('赵六', 21, '测试地址4', '13600000004');
INSERT INTO `user` (`name`, `age`, `address`, `mobile`) VALUES ('郑七', 22, '测试地址5', '13600000005');

在这里插入图片描述

数据新增后,可以在 数据 页签查询用户数据,如下图所示。

在这里插入图片描述

提示:同学们也可以通过 SELECT * FROM user; 命令进行查询。


二、初始化项目(基于Spring Boot)

2.1 创建项目

请同学们运行 IntelliJ IDEA,点击新建项目,界面如下图所示。

在这里插入图片描述

请同学们输入项目名称 mybatisplus,选择合适的项目路径,勾选 Maven 的打包方式,点击下一步,界面如下图所示。

在这里插入图片描述

继续点击创建按钮,即可完成项目创建,如下图所示。

在这里插入图片描述

项目创建完成后,如下图所示。

在这里插入图片描述

请同学们删除不必要的文件,只留下 srcpom.xml,如下图所示。

提示:鼠标单击选中文件后,点击 Delete 键即可删除。

在这里插入图片描述

2.2 新增依赖

请同学在 pom.xml 文件中,新增 3 3 3 个依赖,如下图所示。

  • mysql-connector-java:用于连接 MySQL 数据库
  • lombok:用于实体类的 get 和 set 方法生成
  • mybatis-plus-boot-starter:mybatisplus 依赖

在这里插入图片描述

具体的依赖 XML 代码如下所示。

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>

同学们在 pom.xml 中更新完依赖后,需要按下图所示刷新 Maven,触发重新拉取依赖。

在这里插入图片描述

2.3 数据库配置

请同学们在 application.properties 文件中添加对数据库的配置,命令如下。

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatisplus?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456

提示:如果是 mysql5.7 及以下版本,驱动字段请填写 com.mysql.jdbc.Driver

2.4 配置 MyBatis Plus

请同学们在 cn.zwz.mybatisplus 包下创建 config 包,用于存放mybatisplus 的配置文件。

接着在 cn.zwz.mybatisplus.config 包下创建 MybatisPlusConfig.java 配置类,代码如下。

package cn.zwz.mybatisplus.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author 郑为中* CSDN: Designer 小郑*/
@Configuration
@MapperScan({"cn.zwz.mybatisplus.mapper"})
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

在这里插入图片描述

2.5 创建实体类

根据 1.2 1.2 1.2 节的 SQL 代码,创建 cn.zwz.mybatisplus.entity 包,再在包内创建 User 类,代码如下。

CREATE TABLE user (
name VARCHAR(50) NULL DEFAULT NULL,
age INT(10) NULL DEFAULT NULL,
address VARCHAR(50) NULL DEFAULT NULL,
mobile VARCHAR(50) NULL DEFAULT NULL
) ENGINE=InnoDB;

package cn.zwz.mybatisplus.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private String id;private String name;private Integer age;private String address;private String mobile;
}

其中 nameageaddressmobile 四个字段和 SQL 命令中的列名称一一对应,id 是持久化到数据库所必备的字段。

@Data 注解用于自动生成 getset 方法。

@AllArgsConstructor 注解用于自动生成全参构造,即等同于:

public User(String id, String name, Integer age, String address, String mobile) {this.id = id;this.name = name;this.age = age;this.address = address;this.mobile = mobile;
}

@NoArgsConstructor 注解用于自动生成无参构造,即等同于:

public User() {
}

2.6 创建Mapper层接口

请同学们创建 cn.zwz.mybatisplus.mapper 包,再在包内创建 UserMapper 接口,代码如下。

package cn.zwz.mybatisplus.mapper;import cn.zwz.mybatisplus.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface UserMapper extends BaseMapper<User> {
}

此 Mapper 数据链路层接口无需实现任何方法,只需继承 Mybatis Plus 提供的 BaseMapper 接口即可。

同学们可以点开 BaseMapper 查询源码,发现此类已经提供了基础的增删改查接口。

在这里插入图片描述

2.7 创建Server层接口

请同学们创建 cn.zwz.mybatisplus.service 包,再在包内创建 IUserService 接口,代码如下。

package cn.zwz.mybatisplus.service;import cn.zwz.mybatisplus.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;public interface IUserService extends IService<User> {
}

此 Service 服务层接口无需实现任何方法,只需继承 Mybatis Plus 提供的 IService 接口即可。

同学们可以点开 IService 查询源码,发现此类已经提供了基础的增删改查接口。

在这里插入图片描述

2.8 创建Server层接口实现

请同学们创建 cn.zwz.mybatisplus.serviceimpl 包,再在包内创建 IUserServiceImpl 接口实现类,代码如下。

package cn.zwz.mybatisplus.serviceimpl;import cn.zwz.mybatisplus.entity.User;
import cn.zwz.mybatisplus.mapper.UserMapper;
import cn.zwz.mybatisplus.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
@Transactional
public class IUserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}

此实现类无需手动编写任何方法,只需继承 Mybatis Plus 提供的 ServiceImpl 类即可,并实现 IUserService 接口即可。

2.9 创建 Controller 控制器类

前面的 8 个小节,只是为了完成前期准备工作,在 2.9 小节就开始正式投入使用了。

请同学们创建 cn.zwz.mybatisplus.controller 包,在其中创建 UserController 类,代码如下所示。

package cn.zwz.mybatisplus.controller;import cn.zwz.mybatisplus.entity.User;
import cn.zwz.mybatisplus.service.IUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/user")
@Transactional
public class UserController {@Autowiredprivate IUserService iUserService;@RequestMapping(value = "/getAll", method = RequestMethod.GET)public List<User> getAll(){return iUserService.list();}@RequestMapping(value = "/add", method = RequestMethod.GET)public String add(@RequestParam String name,@RequestParam Integer age,@RequestParam String address,@RequestParam String mobile){iUserService.saveOrUpdate(new User(new User(UUID.randomUUID().toString(),name,age,address,mobile));return "学生添加成功!";}@RequestMapping(value = "/edit", method = RequestMethod.GET)public String edit(@RequestParam String name,@RequestParam Integer age,@RequestParam String address,@RequestParam String mobile){QueryWrapper<User> qw = new QueryWrapper<>();qw.eq("name",name);List<User> userList = iUserService.list(qw);for (User user : userList) {user.setAge(age);user.setAddress(address);user.setMobile(mobile);iUserService.saveOrUpdate(user);}return "编辑成功" + userList.size() + "位学生";}@RequestMapping(value = "/delete", method = RequestMethod.GET)public String delete(@RequestParam String name){QueryWrapper<User> qw = new QueryWrapper<>();qw.eq("name",name);Long userCount = iUserService.count(qw);if(userCount > 0) {iUserService.remove(qw);}return "删除成功" + userCount + "位学生";}
}

UserController 类中,实现了基础的增删改查方法,供前端调用。

三、测试项目(基于浏览器)

3.1 运行项目

请同学们找到主启动类 MybatisplusApplication,点击绿色三角形,运行项目。

在这里插入图片描述
运行完成后,终端如下图所示。
在这里插入图片描述

提示:若您启动报错,请首先排查依赖版本是否一致,因为 SpringBoot 3.x 版本和低版本的 Mybatis Plus 不兼容,其次再检查包名是否拼写错误。

3.2 测试查询接口

请同学们在浏览器输入:

http://localhost:8080/user/getAll

输出如下:

[{"name":"张三","age":18,"address":"测试地址1","mobile":"13600000001"},{"name":"李四","age":19,"address":"测试地址2","mobile":"13600000002"},{"name":"王五","age":20,"address":"测试地址3","mobile":"13600000003"},{"name":"赵六","age":21,"address":"测试地址4","mobile":"13600000004"},{"name":"郑七","age":22,"address":"测试地址5","mobile":"13600000005"}]

项目已将数据库中的数据查询到,并返回给前端,测试完成。

3.3 测试新增接口

请同学们在浏览器输入:

http://localhost:8080/user/add?name=11111&age=11&address=11111&mobile=13611111111

输出如下:

学生添加成功!

请同学们再次在浏览器输入:

http://localhost:8080/user/getAll
[{"id":null,"name":"张三","age":18,"address":"测试地址1","mobile":"13600000001"},{"id":null,"name":"李四","age":19,"address":"测试地址2","mobile":"13600000002"},{"id":null,"name":"王五","age":20,"address":"测试地址3","mobile":"13600000003"},{"id":null,"name":"赵六","age":21,"address":"测试地址4","mobile":"13600000004"},{"id":null,"name":"郑七","age":22,"address":"测试地址5","mobile":"13600000005"},{"id":"e082f6f4-9052-45bb-9671-2a52f0a5eebb","name":"11111","age":11,"address":"11111","mobile":"13611111111"}]

发现数据添加完成,测试完毕。

3.4 测试编辑接口

请同学们在浏览器输入:

http://localhost:8080/user/add?name=11111&age=22&address=22222&mobile=13622222222

输出如下:

编辑成功1位学生

请同学们再次在浏览器输入:

http://localhost:8080/user/getAll
[{"id":null,"name":"张三","age":18,"address":"测试地址1","mobile":"13600000001"},{"id":null,"name":"李四","age":19,"address":"测试地址2","mobile":"13600000002"},{"id":null,"name":"王五","age":20,"address":"测试地址3","mobile":"13600000003"},{"id":null,"name":"赵六","age":21,"address":"测试地址4","mobile":"13600000004"},{"id":null,"name":"郑七","age":22,"address":"测试地址5","mobile":"13600000005"},{"id":"e082f6f4-9052-45bb-9671-2a52f0a5eebb","name":"11111","age":22,"address":"22222","mobile":"13622222222"}]

发现指定数据编辑完成,测试完毕。

3.5 测试删除接口

请同学们在浏览器输入:

http://localhost:8080/user/add?name=11111&age=22&address=22222&mobile=13622222222

输出如下:

删除成功1位学生

请同学们再次在浏览器输入:

http://localhost:8080/user/getAll
[{"id":null,"name":"张三","age":18,"address":"测试地址1","mobile":"13600000001"},{"id":null,"name":"李四","age":19,"address":"测试地址2","mobile":"13600000002"},{"id":null,"name":"王五","age":20,"address":"测试地址3","mobile":"13600000003"},{"id":null,"name":"赵六","age":21,"address":"测试地址4","mobile":"13600000004"},{"id":null,"name":"郑七","age":22,"address":"测试地址5","mobile":"13600000005"}]

发现指定数据删除完成,测试完毕。


四、总结

以上就是 MyBatisPlus 的快速入门体验,可以发现开发者可以无需编写 SQL 代码,即可快速实现简单的增删改查功能,非常方便。

当然 MyBatisPlus 还有更强大的功能,支持日常开发中 99% 的数据库读写需求,会在后面的章节中继续讲解。


http://www.ppmy.cn/news/87742.html

相关文章

AI技术将手语翻译带入新阶段

对于无声者来说&#xff0c;手语可能就是对外交流的唯一方法&#xff0c;但是随着AI技术的进步&#xff0c;可能会让无声者有更多的选择与和外界进行交流。 近日在巴塞罗那超级计算中心(BSC)和加泰罗尼亚理工大学(UPC)携手合作取得了重大突破&#xff0c;他们成功开发出一项全…

微信小程序 基础模板引入sass的两种方法

推荐使用第二种方法 一、VSCode扩展引入&#xff08;旧&#xff09; 1.vscode搜索扩展 Easy Sass安装 2.微信开发者工具导入vscode安装的所有扩展 3.修改sass扩展配置 打开扩展目录 找到刚导入的sass扩展 打开package.json文件 改成这样 保存 4.重新打开此项目 配置完事 5.使…

基于 typescript 装饰器实现 express 路由

目录 使用装饰器分析装饰器实现自动加载使用 使用 我们先来看看原生的使用方式和使用装饰器实现的使用方式&#xff0c;这样子可以让我们更加直观的感受到区别 原生的使用方式 import { Router } from "express";const router Router();router.use((req, res, ne…

量子OFFICE:TrueType/FreeType/OpenType的概念

FreeType各项功能都有&#xff0c;为什么要改进呢&#xff1f;为了做得跟WORD一样啊。 结合自己以前在研究的时候&#xff0c;看到的资料&#xff0c;介绍几个概念&#xff1a; TrueType是一种矢量字体规范 如果是位图字体&#xff0c;不同字号就要有不同的位置&#xff0c;工…

vue+springboot文件上传分包合包技术

vue组建上传代码 <template><div><el-uploadclass="upload-demo"dragaction="#"

java常用工具之 Arrays类

目录 简介一、创建数组1.1 copyOf1.2copyOfRange1.3 fill 二、比较数组三、数组排序四、数组检索五、数组转流六、打印数组七、数组转 List八、setAll九、parallelPrefix 简介 java.util.Arrays 类&#xff0c;基本上常见的数组操作&#xff0c;这个类都提供了静态方法可供直接…

设计模式详解(六)——原型模式

原型模式简介 原型模式定义 原型模式是用于创建重复的对象&#xff0c;同时又能保证性能。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。就是用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。…

【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

文章目录 List, Set, Queue, Map 四者的区别&#xff1f;集合框架底层数据结构总结ArrayList 和 Vector 的区别ArrayList 与 LinkedList 区别补充内容:RandomAccess 接⼝ArrayList 的扩容机制comparable 和 Comparator 的区别比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同…

【Python】Pandas基础操作

Pandas是一个重要的Python数据处理库。它提供了数据结构和数据分析工具&#xff0c;使得数据清洗、分析和可视化变得更加容易。在本文中&#xff0c;我们将列举一些常用的Pandas基础操作。 读取数据 Pandas提供了多种方法来读取不同格式的数据。其中最常用的是read_csv()和re…

【牛客刷题专栏】0x29:JZ31 栈的压入、弹出序列(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

Spring 框架

一、Spring概述 Spring 是目前主流的 Java Web 开发框架&#xff0c;是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架&#xff0c;具有很高的凝聚力和吸引力。它以Ioc&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;为内核&#xff0c;…

Overleaf中Latex问题——控制文本分两列显示(分栏布局)

文章目录 需求描述相关介绍实现代码实现效果参考和总结 需求描述 要写论文&#xff0c;需要分两列进行显示文本。但是默认都是单列展示&#xff0c;并且自动换行。 需要实现一下的效果 相关介绍 在$LaTeX 中&#xff0c;你可以使用 中&#xff0c;你可以使用 中&#xff0c…

计算机组成原理-存储系统-基本概论及组成

目录 一、存储器的层次化结构 二、存储器分类 存储介质 存取方式 信息可改性 三、性能指标 四、主存储器基本组成 基本的的半导体元件及原理 存储芯片的基本原理 一、存储器的层次化结构 二、存储器分类 存储介质 半导体存储器(主存&#xff0c;cache)、磁表面存储器(…

微生物实验之分菌(细菌)

文章目录 1. 采集实验样本2. 对实验样本进行处理1. 土壤样本的处理2. 植物内生菌样本的处理 3. 接种4. 分离纯化5. 测16s6. 测全基因组7. 保藏菌株 分离细菌菌株 (分菌) 是微生物学实验中&#xff0c;很重要的一环&#xff0c;对于微生物资源来说尤为重要。分菌主要包含以下几个…

pandas获取DataFrame每月(每年)第一天或者最后一天对应行的实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

司空见惯 - 使用dBm表示功率的各种现实情况

前面一篇文章介绍过&#xff0c;使用dBm表示功率时&#xff0c;如何转换为mW。 那现实世界的实际情况中&#xff0c;使用dBm来表示电磁波的能量强度&#xff0c;列表如下&#xff1a; Power level Power Notes 526 dBm 3.61049 W 黑洞碰撞后的引力波辐射的功率&#xff0c…

react-draggable前端实现元素拖拽的组件

react-draggable前端实现元素拖拽的组件 使用方式&#xff1a;将一个需要被拖拽的组件包到它定义的一个组件中&#xff0c;当鼠标拖拽时&#xff0c;重新计算组件的位置&#xff0c;即实现了拖拽。 官网链接&#xff1a;react-draggable组件实现元素的拖拽 react-file-viewer 实…

MySQL 视图(view)

目录 视图 概念 基本使用 视图规则和限制 视图&#xff08;view&#xff09; 概念 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。…

代码随想录算法训练营第十三天|239. 滑动窗口最大值、347.前 K 个高频元素

滑动窗口最大值 题目链接&#xff1a;力扣 知识点&#xff1a;单调队列 解题思路&#xff1a; 需要一个队列&#xff0c;放进去窗口里的元素&#xff0c;然后随着窗口的移动&#xff0c;队列也一进一出&#xff0c;每次移动之后&#xff0c;队列告诉我们里面的最大值是什么…

聚会游戏玩什么?UMO轻松炒热气氛

UMO是一款有趣的多人益智桌游&#xff0c;考验玩家耐力和技巧的比拼&#xff01;玩家将在游戏中通过特定的规则来出牌&#xff0c;谁先出完所有牌谁就赢&#xff0c;游戏非常讲究策略和运气哦~ 【数字牌】由红黄蓝绿4色组成&#xff0c;每色都有数字牌0~9。数字牌每色有19张&a…