mybaits-plus通用CRUD详解及代码案例(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: mybaits-plus通用CRUD详解及代码案例

mybaitsplus通用CRUD


通过前面的学习,我们了解到通过继承BaseMapper就可以获取到各种各样的单表操作,接下来我们将详细讲解这 些操作,下图是BaseMapper的各各方法:



插入操作


方法定义


/**
* 插入一条记录 
* ** 
* @param entity 实体对象 
*/ 
int insert(T entity);


该方法返回的result是受影响的行数,并不是自增后的id


测试用例


    //插入
    @Test
    public void testInsert(){
        User user = new User();
    // user.setId(100L);
        user.setName("曹操");
        user.setPassword("111111");
        user.setAge(20);
        user.setUserName("caocao");
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-DD HH:mm:ss");
        LocalDateTime localDateTime = LocalDateTime.parse("1990-01-01 00:00:00", dateTimeFormatter);
        user.setBirthday(localDateTime);
        int i = userMapper.insert(user);
        System.out.println(i);
        //自增后的id会回填到对象中
        System.out.println(user.getId());
    }



mybaitsplus主键生成策略


上例中Mybatis-plus自动生成ID,如何设置id的生成策略呢?


MP支持的id策略如下:


package com.baomidou.mybatisplus.annotation; 
import lombok.Getter;
/**
 *生成ID类型枚举类
 *
 *@author hubin
 * @since 2015‐11‐10
 */ @Getter
public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型
     */
    NONE(1),
    /**
     * 用户输入ID
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),
    /**
     * 全局唯一ID (idWorker)
     */
    ID_WORKER(3),
    /**
     * 全局唯一ID (UUID)
     */
    UUID(4),
    /**
     * 字符串全局唯一ID (idWorker 的字符串表示)
     */
    ID_WORKER_STR(5);
    private final int key;
    IdType(int key) {
        this.key = key;
    }
}


在对象类中添加对应注解即可,例如下面这样



下面我们具体说一下每个主键:


设置自增主键


设置完全采用数据库自增主键方式。


  1. 设置mysql数据库主键为自增


  1. 修改User对象:


@TableId(value = "ID", type = IdType.AUTO) 
private Long id;
或:
@TableId(value = "ID") 
private Long id;


  1. 程序中不用设置主键


设置输入主键:


手动设置主键值。


  1. mysql数据库主键为自增或不是自增都可以


  1. 修改User对象:


@TableId(value = "ID",type = IdType.INPUT) 
private Long id;


  1. 程序中需要设置主键


UUID


生成全局唯一ID。


  1. mysql数据库主键为字符串类型,不是自增类型。


  1. 修改User对象。


@TableId(value = "ID",type = IdType.UUID) 
private String id;


  1. 程序中不用设置主键


ID_WORKER_STR:


采用雪花片算法(雪花算法生成的ID是纯数字且具有时间顺序,适合分布式场景)生成全局唯一ID,字符串类型。


  1. mysql数据库主键为字符串类型,不是自增类型。


  1. 修改User对象。


@TableId(value = "ID",type = IdType.ID_WORKER_STR) 
private String id;


  1. 程序中不用设置主键


ID_WORKER:


采用雪花片算法生成全局唯一ID,数值类型。


  1. mysql数据库主键为数值类型,不是自增类型。


  1. 修改User对象。


@TableId(value = "ID",type = IdType.ID_WORKER) 
private Long id;


  1. 程序中不用设置主键


更新操作


根据id更新


方法定义:


/**
*根 据 ID 修 改
*
*@param entity 实体对象
*/
int updateById(@Param(Constants.ENTITY) T entity);


方法步骤


根据id更新操作步骤:


  1. 首先需要设置对象的主键属性值。


  1. 再设置要更新的属性值。


  1. 根据主键找到对象,更新设置属性值。


  1. 返回影响的记录数。


注意:只能将对象中不为NULL的属性更新到表中。


测试案例:


    @Test
    public void testUpdate(){
        User user = new User();
        //更新记录的主键值
        user.setId(2L);
        user.setAge(100);//要更新的值
        user.setPassword("12222");//要更新的值
        //只将对象中不为NULL的值更新到数据库中
        int i = userMapper.updateById(user);
        System.out.println(i);
        System.out.println(user);
    }


运行结果:



数据库更新结果:




根据条件更新


方法定义:


/**
*根据 whereEntity 条件,更新记录
*
*@param entity  实体对象 (set 条件值,可以为 null)
*@param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
*/
int update(
  @Param(Constants.ENTITY) T entity, 
  @Param(Constants.WRAPPER) Wrapper<T> updateWrapper
);


根据ID更新一次只能更新一条记录,根据条件更新可实现批量更新。


更新步骤:


根据条件更新步骤:


  1. 在对象中设置要更新的属性值。


  1. 设置QueryWrapper,设置更新条件,可以设置多个。


  1. 返回影响的记录数。


注意:只能将对象中不为NULL的属性更新到表中。


测试用例:下次将name等于“曹操”的记录全部更新。


    //根据条件进行更新
    @Test
    public void testUpdate2(){
        User user = new User();
        user.setAge(100);//要更新的值
        user.setPassword("12222");//要更新的值
        //设置条件
        QueryWrapper<User> queryWrapper  =new QueryWrapper<>();
        queryWrapper.eq("name","曹操");
        //只将对象中不为NULL的值更新到数据库中
        int i = userMapper.update(user,queryWrapper);
        System.out.println(i);
    }


数据库更新结果:


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
131 6
|
23天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
43 2
|
28天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
28天前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
64 3
|
1月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
50 15
|
1月前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
13天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
28 1
|
15天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
22天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
110 1
下一篇
无影云桌面