MyBatis-Plus 的基础增删改查

news2024/11/27 0:43:47

目录

 

1. 简介

2. 准备工作

3. MyBatis-Plus 实现增删改查


1. MyBatis-Plus 简介

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生.

2. 准备工作

2.1 准备数据表

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

2.2 插入数据

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

2.3 创建一个 SpringBoot 项目, 添加如下常用依赖 

不要添加 MyBatis 依赖, 因为等下添加 MyBatis-Plus 依赖后 MyBatis 依赖也会自动添加进来

2.4 添加 MyBatis-Plus 依赖 (官网有)

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

2.5 添加 application.properties 配置文件

# 1.配置 MySQL 连接信息
spring.datasource.url=jdbc:mysql://127.0.01:3306/mybatis_plus?characterEncoding=utf8
spring.datasource.username=root
# MySQL 的密码
spring.datasource.password=316772
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 2.配置 MyBatis XML 保存目录
mybatis.mapper-locations=classpath:mapper/**Mapper.xml
# 配置 MyBatis 打印 SQL 日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.mplus.mpdemo=debug

 其中数据库名称,密码以及最后一行的包名需要根据自己的来设置.

并且需要在 resource 目录下创建 mapper 文件夹. 然后分模块创建好对应的文件夹: config controller, dao, model, service, util. 

3. MyBatis-Plus 实现增删改查

3.1 @TableName, @TableId, @TableField 注解的使用

@TableName

它是一个表名注解, 用来修饰实体类的, 加在实体类的头上, 表示这个实体类对应数据库哪张表.

@TableName("sys_user")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

@TableId

@TableId 是一个主键注解, 是用来修饰实体类主键字段的, 如果不给这个字段加上 type = IdType.AUTO, 那么它默认就会使用雪花算法给你生成 ID, 那样看起来怪难受的, 而且还不连续, 所以我们可以手动给他设置为数据库自增 ID

@TableField

这个注解是用于表字段重命名的, 为什么需要重命名呢, 因为数据库的代码风格和 Java 的代码风格不一样, 所以有时候, 人们会因为风格或者表达语义, 就会使得表字段和实体类属性不一致.

以前我们使用 MyBatis 的时候, 表字段重命名非常麻烦, 需要使用到 resultMap 来解决, 以前的写法如下 :

 而到了 MyBatis-Plus 之后, 就彻底解放双手了, 只需要一个注解就能搞定.

@TableName("sys_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    @TableField("nickname") // 表字段重命名
    private String name;
    private Integer age;
    private String email;
}

3.2 准备 model 实体类 

@Data
public class User {
    // 设置 id 为数据库自增 ID
    @TableId(type = IdType.AUTO)
    private long id;
    private String name;
    private int age;
    private String email;
}

我的 IDEA 不知为啥, 加了 Data 注解, 也无法使用 get, set 方法, 于是需要手动添加.(因人而异)

3.3 准备 mapper 接口

public interface UserMapper extends BaseMapper<User> {

}

① 在学 MyBatis 的时候呢, 每个 mapper 接口都需要手动加上一个 @mapper 注解, 这样的话.如果有非常多的接口, 那每个类都需要加上这个注解, 就显得很笨重了, 到了 MyBatis-Plus 的时候,, 它只需要在启动类上面加上一个 @MapperScan 注解, 并指定扫描的 mapper 路径就解决了.

@MapperScan("com.mplus.mpdemo.dao")

②  以前使用 MyBatis 来写 增删改查, 需要写对应的好几个抽象方法, 而在 Mybatis-Plus 中我们只需要继承 BaseMapper, 并指定对应的实体类泛型参数即可使用 BaseMapper 中的所有的增删改查方法.

3.4 单元测试新增方法

首先在 UserMapper 接口中, 右击 generate, 选择 test, 然后生成单元测试类, 然后在类上添加 @SpringBootTest 注解, 然后属性注入 UserMapper 接口.

@Test
public void insert() {
    User user = new User();
    user.setName("张三");
    user.setAge(18);
    user.setEmail("1234456@qq.com");
    // 添加操作
    int result = userMapper.insert(user);
    System.out.println("添加: " + result);
}

 3.5 单元测试修改方法

@Test
public void update() {
    User user = new User();
    user.setName("张三丰");
    // 修改操作
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.eq("id",6);
    int result = userMapper.update(user,wrapper);
    System.out.println("修改: " + result);
}

当然修改方法不只这一个, 大家可以去官网自行扩展.

3.6 单元测试删除方法

@Test
public void delete() {
    // 删除操作
    int result = userMapper.deleteById(6);
    System.out.println("删除: " + result);
}

删除方法也一样, 也可以使用 wrapper 等其他方式.

3.7 单元测试查询方法

@Test
public void getAll() {
    QueryWrapper queryWrapper = new QueryWrapper();
    // 查询 id > 3 的数据
    queryWrapper.gt("id", 3);
    // 查询操作
    List<User> list = userMapper.selectList(queryWrapper);
    for(User user : list) {
        System.out.println(user.toString());
    }
}

4. 完善 Sevice 层和 controller 层代码

mp 中的 sevice 写法呢, 需要两部分, 一个是 service 接口的定义, 一个是 service 的实现.

41. 创建 IUserService 接口

public interface IUserService extends IService<User> {
}

4.2 创建 impl.UserServiceImpl.java 实现

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> 
    implements IUserService{
}

这时候, 我们所需要的增删改查的方法就都可以通过 IUserService 对象来调用了.

4.3 完善 controller

增删查都有了, 修改也是照猫画虎.

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;
    // 新增
    @RequestMapping("/add")
    public int add(User user) {
        // 非空效验
        if(user == null || !StringUtils.hasLength(user.getName())) {
            return 0;
        }
        // 执行数据库的添加操作
        boolean result = userService.save(user);
        return result ? 1 : 0;
    }
    // 查询
    @RequestMapping("/getlist")
    public List<User> getList() {
        List<User> list = userService.list();
        return list;
    }
    // 删除
    @RequestMapping("/del")
    public int remove() {
        boolean result = userService.removeById(6);
        return result ? 1 : 0;
    }
}

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

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

相关文章

ArgoCD结合Gitlab交付项目到kubernetes集群

ArgoCD结合Gitlab交付项目到kubernetes集群 作者:行癫(盗版必究) 一:环境准备 1.kubernetes集群环境 2.HA_Argocd环境 3.Gitlab集群环境 二:项目配置 1.配置Gitlab 创建仓库,并写入yaml文件,利用yaml构建application;此案例结合了NFS实现持久化存储

【ARM Coresight 系列文章 10.2 - ARM Coresight STM Trace packets】

文章目录 Trace protocolpacket的种类Error packetsVERSION Packets同步 packet 上篇文章&#xff1a;ARM Coresight 系列文章 10.1 - ARM Coresight STM 介绍及使用 Trace protocol STM 产生的trace的是遵守 MIPI System Trace Protocol version 2 (STPv2) 规范的&#xff0c…

Windows环境下Elasticsearch相关软件安装

Windows环境下Elasticsearch相关软件安装 本文将介绍在 windows 环境下安装 Elasticsearch 相关的软件。 1、安装Elasticsearch 1.1 安装jdk ElasticSearch是基于lucence开发的&#xff0c;也就是运行需要java jdk支持&#xff0c;所以要先安装JAVA环境。 由于ElasticSear…

【C++】深入剖析list

本期我们来深入list的实现原理&#xff1a; 目录 一、STL中的list 二、list的模拟实现 2.1 搭建list的框架 2.2 list迭代器的实现 2.2.1 普通迭代器的实现 2.2.2 const类型迭代器的实现 2.2.3 迭代器中->运算符重载实现 2.3 其他功能函数的实现 2.3.1 insert 2.…

爬虫小白-如何辨别是否有cookie反爬案例

目录 一、Cookie介绍二、cookie生成来源区分查找三、如何判断是否有cookie反爬四、来自服务器生成的cookie反爬解决方法五、来自js生成的cookie反爬解决方法 一、Cookie介绍 先推荐该篇文章简单了解Cookie、Session、Token、JWT1、cookie的类型&#xff1a;会话cookie和持久co…

【LeetCode热题100】打卡第42天:滑动窗口最大值搜索二维矩阵II

文章目录 【LeetCode热题100】打卡第42天&#xff1a;滑动窗口最大值&搜索二维矩阵II⛅前言 滑动窗口最大值&#x1f512;题目&#x1f511;题解 搜索二维矩阵II&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第42天&#xff1a;滑动窗口最大值&搜索二维…

装箱问题(背包问题)

题目描述 有一个箱子容量为v(正整数&#xff0c;o≤v≤20000)&#xff0c;同时有n个物品(o≤n≤30)&#xff0c;每个物品有一个体积 (正整数)。要求从 n 个物品中&#xff0c;任取若干个装入箱内&#xff0c;使箱子的剩余空间为最小。 输入格式 第一行&#xff0c;一个整…

js函数增强

目录 函数的属性arguments将arguments转换成数组rest 纯函数柯里化函数自动实现函数柯里化组合函数自动实现组合化with与evalwitheval 严格模式严格模式的限制 函数的属性 函数其实也是一个对象 是对象就会有对应的方法与属性 以下是几个常用属性 name name属性主要用于访问给…

vue 富文本图片回显

富文本上传 <el-form-item label"服务费打款银行回单" prop"bankreceipt"> <!-- <ImageUpload--> <!-- :value"form.bankreceiptUrl"--> <!-- :fileType"fileType"--> <…

【解决方案】视频传输方案怎样选择适用的WiFi模块

工作环境中&#xff0c;我们接触的最多的是有线传输&#xff0c;但是这个会因为转换接口、传输距离等原因受到一些限制&#xff0c;而无线传输不会&#xff0c;不需要布线&#xff0c;不限制接口&#xff0c;传输距离也由于有线传输&#xff0c;这也是物联网广泛使用无线通信技…

了解下余弦相似度在文本处理中的应用

大家好啊&#xff0c;我是董董灿&#xff01; 昨天写了一篇介绍词向量的文章&#xff1a;5分钟搞懂什么是词嵌入&#xff0c;里面说到&#xff1a;通过把文本转换为词向量&#xff0c;就可以十分方便的计算两者之间的关系&#xff0c;看看哪两个单词更为相近。 比如有四个单词…

AtCoder Beginner Contest 288 F. Integer Division(递推+前缀和优化dp)

题目 给定一个n(2<n<2e5)位的数字串X&#xff0c; 可以将X划分成若干段&#xff0c;得分为每一段的乘积&#xff08;可以不分割&#xff0c;此时得分为X&#xff09; 求所有种分法的得分之和&#xff0c;答案对998244353取模 思路来源 洛谷题解 [ABC288F] Integer …

【PostgreSQL内核学习(十)—— 查询执行(可优化语句执行)】

可优化语句执行 概述物理代数与处理模型物理操作符的数据结构执行器的运行 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用来源。 本文主要…

SAP客制化区域菜单和IMG配置清单

1. 自定义区域菜单 事务代码 SE43&#xff0c;操作如下 添加菜单对象 展示效果 输入区域菜单名称并回车&#xff0c;效果如下 2. 自定义IMG配置 事务代码 SIMGH IMG structure 示例-事务代码入口 示例-表格维护入口 示例-自定义代码控制对象 需要创建dummy表并设置表维护 页面设…

平头哥TH5120 BeagleV-Ahead开机系统软件使用体验

等了许久&#xff0c;Beagle 社区官网终于上线了BeagleV-Ahead 的主页 网址 https://beagleboard.org/beaglev-ahead &#xff0c;我们的系统软件评测将会以这个官方主页为出发点 &#xff0c;进行一系列的系统软件功能等操作演示&#xff0c;因官网没有中文页面&#xff0c;我…

【雕爷学编程】Arduino动手做(168)---ATTINY85迷你USB开发板2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

瑞吉外卖开发笔记 二

1、完善登录功能 问题分析 前面我们已经完成了后台系统的员工登录功能开发&#xff0c;但是还存在一个问题:用户如果不登录&#xff0c;直接访问系统首页面&#xff0c;照样可以正常访问。 这种设计并不合理&#xff0c;我们希望看到的效果应该是&#xff0c;只有登录成功后…

JVM运行时数据区——字符串常量池位置的调整

在JDK6及之前&#xff0c;使用永久代来实现方法区&#xff0c;字符串常量池(StringTable)是在永久代(方法区)中的&#xff0c;但是方法区的回收效率不高&#xff0c;在Full GC时才会回收。 在JDK7中&#xff0c;将字符串常量池转移到了堆中&#xff0c;分配在年轻代和老年代中。…

ROS——roslaunch传参注意

本文就总结自己最近开发项目中出现的一些roslaunch有关传参的注意事项说明一下&#xff0c;以免下次有犯错 roslaunch 文件传入到.cpp 这里我采用传参比较简单的方式&#xff0c;还有其他方式&#xff0c;不过这种最为简便 nh.param<xxx>("roslaunch中的名字,如A…

基于 H5 的画图工具

完整资料进入【数字空间】查看——baidu搜索"writebug" 第一章 绪论 1.1 研究的背景 计算机图形学是随着计算机及其外围设备而产生和发展起来的。它是近代计算机科学 与雷达电视及图象处理技术的发展汇合而产生的硕果。在造船、航空航天、汽车、电子、 机械、土建工…