MyBatis-Plus 的基础增删改查

2023-11-17

目录

 

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;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis-Plus 的基础增删改查 的相关文章

随机推荐

  • Apikit 自学日记:API 异常监控-监控报告

    在 api 管理中 查看 api 异常监控的监控报告 在 apikit 中也是常用的功能 通常你可以在流程综合报告页中看到当前流程在选定时间段内的整体监控情况 在 APIkit 中监控报告有这几种类别 单接口监控报告 流程监控报告 项目监控
  • 【C#学习笔记】读文件

    using System using System IO namespace ConsoleApplication class Program static void Main string args FileStream file new
  • 解决Win11休眠一段时间后自动关机的问题

    1 Win11系统有以下工作状态 S0 工作状态 系统完全可用 S0 睡眠 现代待机 低功耗空闲 网络可用 S1 睡眠 CPU停止工作 S2 睡眠 CPU关闭 S3 睡眠 仅保留内存工作 S1 S3 S4 混合睡眠 睡眠和休眠状态的组合 S
  • 最小生成树和最短路径算法

    图的概念 图表明了一种多对多的关系 图由两个元素组成 节点 vertex 和边 edge 有向图 如果给每条边规定一个方向 那么就是一个有向图 入度出度 对于有向图而言 指向一个顶点的边数称为一个点的入度 从一个顶点指出的边的个数就是出度
  • 【深度探索STL】空间配置器(二) 第一级配置器

    了解内存配置后的对象构造行为和内存释放前的对象析构行为后 参见博文 http blog csdn net wenqian1991 article details 19545049 空间配置器 构造与析构 我们再来学习内存的配置与释放 定义在
  • Keil5/MDK结构体无法自动指示成员变量

    方法总结 1 点击魔术棒法 1条消息 MDK5的结构体变量成员不提示问题的解决办法 weixin 45722312的博客 CSDN博客 keil5结构体加点后没有提示成员https blog csdn net weixin 45722312
  • elasticsearch基础5——文档处理解析、数据入盘流程、文档分片存储

    文章目录 一 同步和异步 阻塞和非阻塞 1 1 四种组合 二 客户端 2 1 高级客户端文档解析 2 2 文档索引 2 3 构建JSON文档 2 4 文档处理过程解析 2 5 数据入盘流程 2 6 与MongoDB比较 三 文档分片存储 3
  • java 生成uuid 16位_java生成16位随机UUID数

    public void testUid for int i 0 i UUID uuid UUID randomUUID System out println uuid toString 9e0db051 5ca9 46f4 958f ebd
  • STM32CubeMX学习六 之ADC配置

    文章目录 前言 一 本地环境 二 开始 1 定时器配置 2 引脚配置 在这里插入图片描述 https img blog csdnimg cn e5b6f155a1b8468cb15046a0a9d031cd png 3 内部时钟配置 4 A
  • redis必杀命令:列表(List)

    题记 Redis列表是简单的字符串列表 按照插入顺序排序 你可以添加一个元素导列表的头部 左边 或者尾部 右边 一个列表最多可以包含 232 1 个元素 4294967295 每个列表超过40亿个元素 例如 wd wd usr local
  • idea+springboot启动报错 ERROR org.apache.catalina.core.ContainerBase

    用idea导入了一个spring boot的项目 结果启动报错 ERROR org apache catalina core ContainerBase A child container failed during start tomca
  • 【JavaScript高级】Proxy和Reflect

    文章目录 存储属性描述符监听对象 Proxy 基本使用 set和get捕获器 Proxy的其他捕获器 construct和apply捕获器 Reflect 作用 方法 举个例子 Reflect的construct Receiver 参考 存
  • React 开发一个移动端项目(1)

    技术栈 项目搭建 React 官方脚手架 create react app react hooks 状态管理 redux redux thunk UI 组件库 antd mobile ajax请求库 axios 路由 react route
  • 1)数据库系统概述

    文章目录 一 数据库概念 二 常见的数据模型 三 关系型数据库 1 关系术语 2 关系的特点 3 常见存在的关系问题 4 关系运算 四 数据库设计 1 设计步骤 2 设计实例 一 数据库概念 长期存放在计算机上有组织的可共享的数据集合 二
  • secure boot 是什么

    一 secure boot 是什么 secure boot 中文叫安全启动 是电脑行业成员共同开发的一种安全机制 用于确保电脑只能启动原装系统 如果电脑重装了其他系统 那么这个系统是启动不了的 说白了 就是垄断 所以安装完其他系统 必须关闭
  • flex伸缩布局看着一篇就够啦

    flex伸缩布局 flex弹性概念 弹性盒子是一种按行或者按列布局元素的一种布局方式 它是需要父子盒子嵌套使用的 作用在父盒子 容器 上的属性有 flex direction 改变轴方向 flex wrap 换行 flex flow 前两项
  • 项目重点问题

    面试大保健 https blog csdn net Mrerlou article details 114295888 ops request misc 257B 2522request 255Fid 2522 253A 252216786
  • Java Swing图书管理系统,界面漂亮功能全,完整源码、下载直接使用 -417

    今天为利用晚上的一小段时间为大家分享一个写的不错的窗体程序 图书管理系统 417 系统功能已经比较全面 而且界面非常漂亮 有较强的参考和使用价值 项目系统有完整源码 下载后即可以运行 希望大家可以喜欢 喜欢的帮忙点赞和关注 一起编程 一起进
  • Shell脚本运行中的停止方法

    Linux系统Shell中提交了一个脚本 但是需要停止这个进程 如何处理 方式1 killall file flume kafka 说明 killall是一个命令 不是kill all file flume kafka是脚本名 此方法简单粗
  • MyBatis-Plus 的基础增删改查

    目录 1 简介 2 准备工作 3 MyBatis Plus 实现增删改查 1 MyBatis Plus 简介 MyBatis Plus 简称 MP 是 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提