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

news2024/11/22 11:58:13

  • 一、初始化数据库(基于 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 {

    @Bean
    public 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 {

    @Autowired
    private 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.coloradmin.cn/o/571156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么用迅捷PDF转换器在线修改图片大小

大家在生活和工作中会遇到图片的大小尺寸不合适的情况&#xff0c;尤其是一些公用的照片&#xff0c;都会有固定的尺寸要求。或者是一些同学想要考研考公考编之类的&#xff0c;也需要严格按照规定来修改图片。那么怎么才能快速修改图片大小呢&#xff1f; 推荐大家使用迅捷PD…

OpenVINO 2022.3实战四:POT API 实现 YOLOv5 模型 INT8 量化

OpenVINO 2022.3实战四&#xff1a;POT API 实现 YOLOv5 模型 INT8 量化 将预训练的 YOLOv5m Pytorch 模型转换为 OpenVINO™ FP32 Intermediate Representation (IR) 模型。下一步&#xff0c;通过 OpenVINO™ Post-Training Optimization Tool (POT) API 来定义客制化DataLo…

Linux之文件权限类命令

文件权限类命令 文件属性 Linux系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。为了保护系统的安全线&#xff0c;Linux系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的规定&#xff0c;在…

白嫖免费版gpt与wetab插件的使用

目录 网址 如何使用 wetab 介绍wetab 怎么获得这个插件 使用效果 网址 1. wetab网站 : chatgpt (免费&#xff0c;不需要账号&#xff0c;不需要翻墙) 2. gpt镜像网站&#xff1a;https://chatbot.theb.ai/#/chat/1002 &#xff08;免费&#xff0c;不需要账号&#xff0…

learn C++ NO.6——类和对象(4)

1.再谈构造函数 1.1.构造函数体赋值 在创建类的对象时&#xff0c;编译器回去调用类的构造函数&#xff0c;来各个成员变量一个合适的值。 class Date { public:Date(int year,int month,int day){_year year;_month month;_day day;}private:int _year;int _month;int _…

Neepu2023-部分Reserve复现

目录 Base IKUN检查器 dnSpy junk code Cheat Engine工具使用&#xff1a; 奇怪的ELF mov混淆问题&#xff1a; Xor Base 打开附件&#xff0c;可以看到主函数 先是给出一个物理题&#xff0c;要求输入答案&#xff0c;这个无关紧要&#xff0c;接着要求输入一串字符&…

MyBatis-Plus 可视化代码生成器来啦,生产力直接拉满

在基于Mybatis的开发模式中&#xff0c;很多开发者还会选择Mybatis-Plus来辅助功能开发&#xff0c;以此提高开发的效率。虽然Mybatis也有代码生成的工具&#xff0c;但Mybatis-Plus由于在Mybatis基础上做了一些调整&#xff0c;因此&#xff0c;常规的生成工具生成的代码还有一…

被Chatgpt碾压的打工人与大学生,准备反击!

最近一段时间&#xff0c;chatgpt可谓如火如荼&#xff0c;它的出现引发各行各业的震动&#xff0c;有人利用它实现了一夜暴富&#xff0c;有企业将它纳进人才招聘的技能要求中&#xff0c;国内各大厂商也纷纷下场推出自家的AI大模型&#xff0c;从第一代到GPT-4&#xff0c;所…

基于html+css的图片展示92

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

用好 kafka,你不得不知的那些工具

前言 工欲善其事&#xff0c;必先利其器。本文主要分享一下消息中间件 kafka 安装部署的过程&#xff0c;以及我平时在工作中针对 kafka 用的一些客户端工具和监控工具。 kafka 部署架构 一个 kafka 集群由多个kafka broker组成&#xff0c;每个broker将自己的元数据信息注册…

【ROS2】install micro_ros

本文参考b站up&#xff1a;“照祥同学”的教程来的&#xff0c;中间一些细节的操作谨以此文作为补充&#xff0c;或者说是我在按照教程走的时候遇到的问题记录。视频链接&#xff1a;第二节&#xff1a;安装micro_ros 的 Arduino 开发环境_哔哩哔哩_bilibili 1. 安装和配置ros…

集权安全 | 域渗透中的 DCSync技术分析

DCSync是AD域渗透中常用的凭据窃取手段&#xff0c;默认情况下&#xff0c;域内不同DC每隔15分钟会进行一次数据同步&#xff0c;当一个DC从另外一个DC同步数据时&#xff0c;发起请求的一方会通过目录复制协议&#xff08;MS- DRSR&#xff09;来对另外一台域控中的域用户密码…

一分钟图情论文:《面向学科建设的我国文献资源保障评价研究综述》

一分钟图情论文&#xff1a;《面向学科建设的我国文献资源保障评价研究综述》 高质量的文献资源保障工作不仅能够提供完备的环境、满足用户的信息需求&#xff0c;在高校中&#xff0c;还可以发挥促进教学资源优化和科研成果产出、增强科技基础能力等作用。华中师范大学的夏立…

『树莓派云台机器人』01. 使用手机控制树莓派云台机器人

目录 1. 检查是否已经开机&#xff0c;连接机器人wifi2. 安装树莓派控制app应用&#xff0c;直连模式连接机器人3. 机器人功能实现总结 欢迎关注 『树莓派云台机器人』 博客&#xff0c;持续更新中 欢迎关注 『树莓派云台机器人』 博客&#xff0c;持续更新中 动手组装等步骤请…

halcon 安装21.05版本 小坑记录

&#xff08;注意&#xff1a;都可以设置语言&#xff09; 1.选择扩展安装 影响安装进度显示 可以后续单独安装 Visual Studio变量检查扩展 2.破解相关 主程序dll路径 路径: C:\Users******\AppData\Local\Programs\MVTec\HALCON-21.05-Progress\bin\x64-win64 Visual St…

chatgpt赋能python:Python修改配置文件

Python 修改配置文件 Python 作为一种优秀的编程语言&#xff0c;在实际使用中起到了很大的作用。对于开发者来说&#xff0c;修改配置文件是一个常见的操作&#xff0c;Python 也支持在代码中修改配置文件。本篇文章将介绍如何使用 Python 修改配置文件&#xff0c;并且分享一…

【CSAPP】虚拟内存 | 地址空间 | 页表内存保护 | 页错误引发异常逐出 (evicted)

&#x1f4ad; 写在前面&#xff1a;本文将学习《深入理解计算机系统》虚拟内存部分&#xff0c;CSAPP 是计算机科学经典教材《Computer Systems: A Programmers Perspective》的缩写&#xff0c;该教材由Randal E. Bryant和David R. OHallaron 合著。 &#x1f4dc; 本章目录…

Bytebase:更好地管理你的 OceanBase 数据库

我们很高兴宣布&#xff1a;OceanBase 用户现在可以使用 Bytebase 进行数据库变更管理啦&#xff01;&#x1f680; Bytebase 是一款为 DevOps 团队准备的数据库 CI/CD 工具&#xff0c;专为开发者和 DBA 打造&#xff0c;也是唯一被 CNCF Landscape 收录的 Database CI/CD 产…

k8s 弹性伸缩的使用

1.手动扩缩容 编辑一个yaml文件 vi deployment-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata:lables:app: nginxname: nginxnamespace: default spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name:…

C语言交换数组内容

代码&#xff1a; int main() {int arr1[] { 1,2,3,4,5 };int arr2[] { 6,7,8,9,0 };int sz sizeof(arr1) / sizeof(arr1[0]);int i 0;for (i 0;i<sz; i ) {int tmp arr1[i];arr1[i] arr2[i];arr2[i] tmp;}for (i 0; i < sz; i) {printf("%d ", ar…