mybatisplus 增删改查&使用技巧

2023-11-04

一、查询条件使用

 

//单个查询,如果返回多条会抛异常
User user = userService.getOne(Wrappers.<User>query().lambda().eq(User::getUserId, 9527));
//列表查询
List<User> user = userService.list(Wrappers.<User>query().lambda().eq(User::getUserId, 9527));
// 查询条件传入对象,对象中有值的条件都会带到where条件中
List<User> list = userService.list(Wrappers.query(user));

// .eq  ==   等于
// .ne <>    不等于
// .gt 大于
// .ge 大于等于>=
// .lt 小于
// .le 小于等于<=
// .in 包含
// .notIn   
// .orderByAsc 正序排序 
// .like() 模糊匹配    likeRight  、 likeLeft
// .between() 区间查询
// .orderByDesc 倒序排序
// .last()  自定义SQL  例如 .last(" limit 1")
// .or()  userWrapper.lambda.and(tmp ->tmp.eq(“pwd”, pwd).or().eq(“phone”, phone));

userService.getOne(Wrappers.<User>query().lambda()
        .eq(User::getUserId, 9527)
        .last(" limit 1"))

//使用find_in_set判断参数是否在数组中
        wrapper.apply(!extractExpertAssignmentDTO.getExpertType().isEmpty(), "FIND_IN_SET ('" + extractExpertAssignmentDTO.getExpertType() + "',Expert_Type)");

1.1查询条件动态化 QueryWrapper 或者  LambdaQueryWrapper

        QueryWrapper<ProjectConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("project_id", projectId);
        queryWrapper.eq("is_using", 1);
        if ("1".equals(type)) {
            queryWrapper.le("sc_product_distribution_relationship_start_time", new Date());
            queryWrapper.ge("sc_product_distribution_relationship_end_time", new Date());
        } else if ("4".equals(type)) {
            // 小于等于
            queryWrapper.le("contract_signing_start_time", new Date());
            queryWrapper.ge("contract_signing_end_time", new Date());
        }

        ProjectConfig con = this.getOne(queryWrapper);

        // 统计数量 使用 DISTINCT 
        QueryWrapper<Suppur> queryWrapper = new QueryWrapper<>();
        queryWrapper.select(" DISTINCT hospital_id");
        int num = suppurMapper.selectCount(queryWrapper);

        // LambdaQueryWrapper--可以使用lambda表达式------------begin
        LambdaQueryWrapper<BidprcuOrgInfoDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(BidprcuOrgInfoDO::getOrgName, "XXXXXX");
        BidprcuOrgInfoDO con = this.getOne(lambdaQueryWrapper);

二、新增(支持单个、批量)

//.save 保存单个
//.saveBatch  批量保存
userService.save(userEntity1);

三、修改(支持单个、批量)

1、修改对象,entity set了几个值就更新几个值,没有set值得将不更新

// 存在就修改,不存在就新增
userService.saveOrUpdate(userEntity1, Wrappers.<UserEntity>query().lambda()
        .eq(UserEntity::getUserId, 9527));

UserEntity entity = new UserEntity();
// 只会更新flag,其他字段不更新
entity.setFlag("0");
// wrappers传null ,全表更新
userService.update(entity, null);

2、修改单个字段

// 修改ID为1234567的数据,状态=2
service.update(Wrappers.<UserEntity>update().lambda()
        .eq(UserEntity::getId, 1234567)
        .set(UserEntity::getStatus, "2"))

四、删除

// 数据库删除
userService.remove(Wrappers.<userEntity>query().lambda().eq(userEntity::getUserId, 9527));

这边列举的是些常用的,并不全面自己可以通过

this.baseMapper.

 提示看接口所有的方法。

例:

使用技巧

1、新增修改时自动给字段赋值

@TableField(fill = FieldFill.INSERT) 新增数据的时候自动赋值,参考:FieldFill.INSERT与FieldFill.UPDATE使用_MIDSUMMER_yy的博客-CSDN博客_fieldfill

 2、表单未传值时,不更新数据表字段,可以添加以下注解,这样前台传递null 也会更新到数据库


    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String stas;

3、表主键id生成的几种方式

// 注意 IdType几种枚举值对应生成ID的方式
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private String id;

// 赋值逻辑 
ob.setId(IdWorker.getIdStr());
AUTO
自动递增代码中不需要赋值
NONE
数据库未设置主键类型(将会跟随全局)
INPUT
用户输入ID(该类型可以通过自己注册自动填充插件进行填充)
ID_WORKER
全局唯一ID (idWorker)
UUID
全局唯一ID(UUID)
ID_WORKER_STR

字符串全局唯一ID(idWorker 的字符串表示)

ob.setId(IdWorker.getIdStr());

4、@TableField(exist = false)表示不是数据库表字段 

5、@TableLogic 标记字段为删除标识

文章并不完善,边学边记,持续更新中....

扩展: mybatis-plus联合主键的使用_mybatisplus联合主键注解_凌晨两点钟同学的博客-CSDN博客

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

mybatisplus 增删改查&使用技巧 的相关文章

随机推荐

  • 【C++ Primer】重载运算与类型转换

    文章目录 一 基本概念 二 输入输出运算符 1 重载输出运算符 lt lt 2 重载输入运算符 gt gt 三 算数和关系运算符 1 相等运算符 2 关系运算符 四 赋值运算符 五 下标运算符 六 递增递减运算符 七 成员访问运算符 八 函
  • windows下网络编程UDP

    转载 C UDP客户端服务器Socket编程 UDPServer cpp include
  • IC项目中svn使用经验总结

    一 svn权限 二 svn分支 三 项目中遇到的问题总结 svn内容太大怎么解 svn的trunk经常不稳定怎么解 svn merge 冲突的处理方式 四 疑问 svn使用者未及时提交代码至trunk分支怎么办 提交代码至trunk后在tr
  • 每日一题:从前序与中序遍历序列(C++)

    题目描述 根据一棵树的前序遍历与中序遍历构造二叉树 注意 你可以假设树中没有重复的元素 例如 给出 前序遍历 preorder 3 9 20 15 7 中序遍历 inorder 9 3 15 20 7 返回如下的二叉树 3 9 20 15
  • html、vue、uni-app微信小程序的区别

    传统的h5只有1端 即浏览器 而uni app可跨多端 虽仍属前端 与传统h5有不同 网络模型的变化 以前网页大多是b s 服务端代码混合在页面里 现在是c s 前后端分离 通过js api 类似ajax的uni request 获取jso
  • opencv读取rtsp的一些优化

    用队列将同步转为异步 import cv2 import queue import time import threading q queue Queue def Receive print start Reveive cap cv2 Vi
  • 迅雷链同构多链框架解析

    本文转载自迅雷官方微信群 传统意义上的 甚至是消费者端熟知的迅雷 是那家唯一在美国上市的中国下载服务商 主营业务还是在线广告 游戏和会员 迅雷从2015年开始对分布式计算和区块链领域的布局 这几年 迅雷布局了CDN 推出了C端的赚钱宝和玩客
  • Notepad++ 支持markdown语法

    之前windows下想编写markdown只是通过有道云笔记来写 看的时候简单的就直接用notepad 看 有些语法得导入到有道云笔记中看很不方便 搜索windows下的markdown编辑工具 Typora sublime markdow
  • myBase7安全破解的方法

    转自https blog csdn net weixin 42414714 article details 89642305 首先 保证myBase7是关闭状态 然后执行以下步骤 1 找到myBase7的安装目录 右击mybase的启动图标
  • 用Python预测收入,来看看你的收入到底应该是多少?

    Python界的网红机器学习 这股浪潮已经逐渐成为热点 而Python是机器学习方向的头牌语言 用机器学习来玩一些好玩的项目一定很有意思 比如根据你的职业 婚姻 家庭 教育时间等等来预测你的收入 这么神奇 不信的话 一起跟我往下看 1 数据
  • 如何使用chatGPT进行论文润色(中英文均可)

    1 为什么ChatGPT可以进行论文润色 ChatGPT本质是一个基于GPT3 5 应用在对话场景的超大语言模型 在各种数据集上经过训练而来的 很好的掌握了语言的 本质 特征 自然可以进行语言相关的工作 论文润色只是小事情 2 如何使用ch
  • 搭建简单的神经网络——使用pytorch实现鸢尾花的分类

    最近写毕业论文 看到网上的pytorch入门nn方法乱七八糟 遂写了本篇方法 好让更多的人可以使用pytorch实现简单的神经网络方法 version python 3 7 9 pytorch 1 7 0 function 利用神经网络进行
  • 区块链中的:哈希算法

    什么是哈希算法 哈希算法 又称散列算法 它是一个单向函数 可以把任意长度的输入数据转化为固定长度的输出 h H x h H x h H x 例如 对 morning 和 bitcoin 两个输入进行某种哈希运算 得到的结果是固定长度的数字
  • 当根据条件查询数据库中记录没有,但是又想返回0怎么办?

    我们平时在操作数据库的时候 对于null的记录或者字段相信大家都可以用ifnull 来判断为null的时候需求返回什么数据 但是如果根据条件查询的时候 数据库根本没有这条记录但是又想返回数据不存在时候的结果该怎么办 比如你统计一个时间区间的
  • 关于g2o的使用笔记

    文章目录 前言 一 g2o进行非线性优化 二 g2o进行前端位姿优化 三 g2o进行后端位姿优化 总结 前言 g2o是比较流行的图优化库 在视觉slam中的应用非常广泛 关于如何利用g2o求解BA优化问题 在此作个笔记 以供后面的学习中方便
  • webRTC的标准与发展

    Web实时通信 WebRTC 是标准 协议和JavaScript API的集合 两者的组合可实现浏览器 对等 之间的对等音频 视频和数据共享 WebRTC无需依赖第三方插件或专有软件 而是将实时通信转变为任何Web应用程序都可以通过简单的J
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 一觉睡醒,ChatGPT 竟然被淘汰了?

    点击上方 码农突围 马上关注 这里是码农充电第一站 回复 666 获取一份专属大礼包 真爱 请设置 星标 或点个 在看 来源丨转自公众号 机器之心 编辑 杜伟 陈萍 OpenAI 的 Andrej Karpathy 都大力宣传 认为 Aut
  • Stream流(入门篇)

    目录 前言 1 Stream流概述 2 获取Stream流的方式 2 1 单列集合获取Stream流 2 2 双列集合获取Stream流 2 3 数组获取Stream流 2 4 零散数据获取Stream流 3 Stream流的中间方法 4
  • mybatisplus 增删改查&使用技巧

    一 查询条件使用 单个查询 如果返回多条会抛异常 User user userService getOne Wrappers