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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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);
    }


数据库更新结果:


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
数据采集 Java 关系型数据库
Java代码高效连接数据库
Java代码高效连接数据库
20 2
|
1月前
|
存储 数据库 Python
用Python代码表示数据库
用Python代码表示数据库
15 0
|
4月前
|
数据库
电子好书发您分享《《阿里云数据库案例集客户案例集》电子书》
电子好书发您分享《《阿里云数据库案例集客户案例集》电子书》
203 2
|
4月前
|
SQL 弹性计算 关系型数据库
服务器数据恢复-华为ECS云服务器mysql数据库数据恢复案例
云服务器数据恢复环境: 华为ECS云服务器,linux操作系统,mysql数据库(innodb引擎)。作为网站服务器使用。 云服务器故障: 在执行mysql数据库版本更新测试时,误将本应该在测试库上执行的sql脚本执行在生产库上了,生产库上的部分表被truncate,部分表内有少量数据被delete。 需要恢复被truncate的表以及被少量数据被delete的表。
服务器数据恢复-华为ECS云服务器mysql数据库数据恢复案例
|
4天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
16天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
1月前
|
SQL Oracle 关系型数据库
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
12 0
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
北京某国企客户Oracle 11g R2数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,数据库的备份不可用,无法查询表数据。 Oracle数据库执行Truncate命令的原理:在执行Truncate命令后ORACLE会在数据字典和Segment Header中更新表的Data Object ID,但不会修改实际数据部分的块。由于数据字典与段头的DATA_OBJECT_ID与后续的数据块中的并不一致,所以ORACLE服务进程在读取全表数据时不会读取到已经被TRUNCATE的记录,但是实际数据未被覆盖。
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
|
1月前
|
存储 前端开发 安全
酒店客房管理系统设计与实现(代码+数据库+文档)
酒店客房管理系统设计与实现(代码+数据库+文档)
|
1月前
|
存储 JavaScript 前端开发
基于SpringBoot的医护人员排班系统(代码+数据库+文档)
基于SpringBoot的医护人员排班系统(代码+数据库+文档)

热门文章

最新文章