Mybatis-Plus:几个好的用法

news2024/10/26 3:25:05

项目使用mybatis-plus,同事的用法让我很难苟同,于是自己百度了一些用法,分享一下。

一、静态适配器

最好使用官方提供的ObjectUtils,比较全面,不用加载不同的对象工具。
com.baomidou.mybatisplus.core.toolkit

    /**
     * 设置查询适配器
     *
     * @param req 分页请求参数
     * @return 查询
     */
    private static QueryWrapper<EscrowKeyEntity> setWrapper(PageAsymKeyReqDTO req) {
        QueryWrapper<EscrowKeyEntity> wrapper = new QueryWrapper<>();
        wrapper.eq(ObjectUtils.isNotEmpty(req.getKeyId()), "key_id", req.getKeyId());
        wrapper.eq(ObjectUtils.isNotEmpty(req.getAlias()), "alias", req.getAlias());
        wrapper.eq(ObjectUtils.isNotNull(req.getKeyUsage()), "key_usage", req.getKeyUsage());
        wrapper.eq(ObjectUtils.isNotNull(req.getStatus()), "status", req.getStatus());
        wrapper.eq(ObjectUtils.isNotEmpty(req.getKeySpec()), "key_spec", req.getKeySpec());
        wrapper.orderByDesc("key_id");
        return wrapper;
    }

二、分页

自带的分页参数是“请求、响应同体”的
我们项目的响应参数是规定好的,所以需要自定义分页参数

自定义分页对象

@Data
public class Pager {

    @Schema(description = "页大小,默认10")
    @Max(value = 1000)
    private long rows = 10;

    /**
     * 当前页
     */
    @Schema(description = "当前页,默认1")
    @Max(value = 1000)
    private long page = 1;

}

分页用法示例
在这里插入图片描述

BeanCopyUtil.copyListProperties 是对象复制工具

    @Override
    public PageResult<EscrowKeyEntityVO> pageAsymKey(PageAsymKeyReqDTO reqDTO) {
        log.info("PageAysmKeyReqDTO : {}", reqDTO);
        Page<EscrowKeyEntity> page = new Page<>(reqDTO.getPage(), reqDTO.getRows());
        // 查询
        QueryWrapper<EscrowKeyEntity> wrapper = setWrapper(reqDTO);
        List<EscrowKeyEntity> records = escrowKeyService.list(page, wrapper);
        // 视图
        List<EscrowKeyEntityVO> list = BeanCopyUtil.copyListProperties(records, EscrowKeyEntityVO::new, (t, s) -> {
            // 公钥
            s.setPublicKeyStr(new String(t.getPublicKey(), StandardCharsets.UTF_8));
        });
        // 组合
        PageResult<EscrowKeyEntityVO> pageResult = new PageResult<>(page.getTotal(), list);
        log.info("PageResult<EscrowKeyEntityVO> : {}", pageResult);
        return pageResult;
    }

三、视图:复合查询的二级用法(减少sql代码)

视图在JAVA中可以当一个逻辑表使用,极大的减少sql代码的编码量。
个人一般使用Navicat Premium 工具生成MySQL的视图,如下

在这里插入图片描述
最终SQL

在这里插入图片描述
自动生成实体类
复制SQL查询语句,使用sql转JAVA实体(entity)在线工具生成实体。
推荐地址:代码生成工具地址
在这里插入图片描述视图对象在这里插入图片描述
Mapper.xml文件
mybatis-plus 可以在有需要的时候写mapper.xml文件,个人一般不写。
Mapper.java文件

public interface ViewDeviceExtMapper extends BaseMapper<ViewDeviceExtEntity> {

}

用法
在这里插入图片描述
如何?这种视图的用法是否非常直观的增加了开发速度?如果有任何弊端欢迎评论告知,感谢。

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

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

相关文章

C# 由左上、右下两个坐标点计算矩形的长、宽以及两点的距离

一、计算长、宽 直接使用坐标点计算 // 定义矩形左上角和右下角的坐标 Point topLeft new Point(0, 0); Point bottomRight new Point(5, 10); // 计算矩形的长和宽 int width bottomRight.X - topLeft.X;//矩形宽度 int height bottomRight.Y - topLeft.Y;//矩形高度或是…

实战-Sealos一键部署k8s集群-2024.3.7(测试成功)

目录 [toc] 原文链接 实战-Sealos一键部署k8s集群-2024.3.7(测试成功) | 彦 推荐文章 我的开源项目&#xff1a; 开源项目 | 彦 实验环境 centos7.6 1810,5.4.270-1.el7.elrepo.x86_64sealos v5.0.0-beta4k8s v1.28.7 &#xff08;当前时间&#xff1a;2024年3月7日 k8s最新版…

ruoyi-vue框架密码加密传输

先看一下改造后的样子&#xff0c;输入的密码不会再以明文展示。 下面我主要把前后端改造的代码贴出来。 1.后端代码 RsaUtils类 在com.ruoyi.common.utils包下新建RsaUtils类&#xff0c;RsaUtils添加了Component注解 generateKeyPair()构建密钥对添加了Bean注解 在项目启动…

AI助力剧本创作:如何5分钟内构思出热门短剧大纲

人工智能重塑短剧行业&#xff1a;从剧本创作到市场推广 在当今短剧行业的飞速发展中&#xff0c;剧本创作的质量及其更新的速度已然成为短剧能否转化为热门作品的关键性因素。然而&#xff0c;随着短剧创作成本的日益攀升&#xff0c;一个卓越的剧本无论在创作时间上还是在构思…

java中的多线程通信问题介绍

在多线程编程中&#xff0c;通信是线程间协调和同步的重要手段。由于线程是独立执行的&#xff0c;它们需要一种机制来交换信息和协调它们的行为。Java 提供了多种方式来实现线程间的通信&#xff0c;包括共享内存、消息传递、条件变量和共享对象等。 1. 共享内存 在 Java 中&a…

vue2的element UI 表格单选

代码 this.$refs.multipleTable.toggleRowSelection(selection.shift(), false);multipleTable 是定义的表格的ref

Kubernetes(K8S之存储)

configmap configMap描述信息 configMap功能在Kubernetes1.2版本中引入&#xff0c;许多应用程序会从配置文件&#xff0c;命令行参数或环境变量中读取配置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制。ConfigMap可以被用来保存单个属性。 也可以用来保存整…

二叉树前序遍历函数 代码图解(先序遍历 深度优先遍历)

void PreOrder(BiTree p)//只是遍历 即只是读&#xff0c;不会改变树根 {//这个p的类型是 树的结构体 不是之前的p指针if(p!NULL){printf("%c", p->c);PreOrder(p->lchild);//函数嵌套 打印左子树PreOrder(p->rchild);//函数嵌套 打印右子树} } 同理可证 中…

如何在Win系统本地部署Jupyter Notbook交互笔记并结合内网穿透实现公网远程使用

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…

windows部署ruoyi-vue-pro

前提 安装java 安装maven 安装redis mysql 源代码下载 后端 ruoyi-vue-pro 前端 yudao-ui-admin-vue3 后端项目 配置maven 导入数据 CREATE DATABASE ruoyi_vue_pro;修改mysql连接配置 修改redis 打包项目 mvn clean install package -Dmaven.test.skiptrue启动YudaoSe…

Linux CentOS系统安装Spug并结合内网穿透实现远程访问本地运维平台

目录 前言 1. Docker安装Spug 2 . 本地访问测试 3. Linux 安装cpolar 4. 配置Spug公网访问地址 5. 公网远程访问Spug管理界面 6. 固定Spug公网地址 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Linux CentOS系统安装Spug并结合…

19-Java中介者模式 ( Mediator Pattern )

Java中介者模式 摘要实现范例 中介者模式&#xff08;Mediator Pattern&#xff09;提供了一个中介类&#xff0c;该类通常处理不同类之间的通信&#xff0c;并支持松耦合&#xff0c;使代码易于维护中介者模式是用来降低多个对象和类之间的通信复杂性中介者模式属于行为型模式…

快递包装展|2024上海国际电商物流包装产业展览会

2024中国(上海)国际电商物流包装产业展览会 2024 China (Shanghai) international e-commerce logistics packaging industry exhibition 时 间&#xff1a;2024年7月24日 —7月26日 地 点&#xff1a;国家会展中心&#xff08;上海市青浦区崧泽大道333号&#xff…

Vue3.0 vue.js.devtools无法显示Pinia调试工具

之前的配置方式&#xff1a; app.use(createPinia()) app.mount(#app) 更新配置方式&#xff1a; app.use(createPinia()).mount("#app") 设置之后即可显示调试工具

Python学习笔记-Flask实现简单的抽奖程序

1.导入flask包和randint包 from flask import Flask,render_template from random import randint 2.初始化 Flask 应用: app Flask(__name__) 3. 定义英雄列表 hero [黑暗之女,狂战士,正义巨像,卡牌大师,德邦总管,无畏战车,诡术妖姬,猩红收割者,远古恐惧,正义天使,无极剑…

kasan排查kernel内存越界示例(linux5.18.11)

参考资料&#xff1a; 1&#xff0c;内核源码目录中的Documentation\dev-tools\kasan.rst 2&#xff0c;KASAN - Kernel Address Sanitizer | Naveen Naidu (naveenaidu.dev) 一、kasan实现原理 KASAN&#xff08;Kernel Address SANitizer&#xff09;是一个动态内存非法访…

Leetcoder Day39| 动态规划part06 完全背包问题

完全背包理论 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 示例&#xff1a; 背包最大…

CentOS下安装RabbitMQ

准备工作&#xff0c;更新yum源 正式环境慎用 yum update -y # 进入目录 cd /etc/yum.repos.d/ # 创建目录 mkdir backup # 默认源配备份 mv C* backup/ # 下载阿里云yum源 wget -O /etc/yum.repos.d/CenOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 清除旧…

【BUG修复日志】Anaconda + VSCode 编码错误

【BUG修复日志】Anaconda VSCode 编码错误 平台: Windows11家庭版 (v22621.3155) 软件: Visual Studio Code (v1.87.0) 插件: Python (v2024.2.1) 版本: Conda (v24.1.2)问题描述 VSCode 在安装 Python 插件的情况下自动提示配置 Conda 环境&#xff0c;但是在自动配置完成后…

P9889 [ICPC2018 Qingdao R] Plants vs. Zombies 题解 二分+贪心

[ICPC2018 Qingdao R] Plants vs. Zombies 传送门 题面翻译 给定 n n n 个植物和 m m m 的步数限制&#xff0c;每个植物在位置 1 … n 1\dots n 1…n 上。你初始时在位置 0 0 0&#xff0c;每次可以移动到相邻的位置上。 每次设你走完一步后到达的位置是 i i i&#…