MybatisPlus核心功能

news2024/11/16 5:25:49

文章目录

  • 一、前言
  • 二、核心功能
    • 2.1、条件构造器
      • 2.1.1、基础查询条件
      • 2.1.2、复杂查询条件
      • 2.1.3、动态查询条件
      • 2.1.4、查询结果排序
      • 2.1.5、执行查询
    • 2.2、主键策略
      • 2.2.1、自增主键策略
      • 2.2.2、UUID 主键策略
      • 2.2.3、雪花算法主键策略
      • 2.2.4、自定义 ID 生成策略
  • 三、总结

一、前言

MyBatis-Plus 是一个基于 MyBatis 的增强工具,提供了一系列强大的功能,能够极大地简化 Java 持久层的开发。本文将深入探讨 MyBatis-Plus 的核心功能,包括条件构造器、主键策略以及自定义 ID 生成器。

二、核心功能

2.1、条件构造器

条件构造器能够让开发者以更优雅的方式构建复杂的查询条件,从而提升查询的灵活性和可读性。

2.1.1、基础查询条件

条件构造器的基本概念是创建一个 QueryWrapper 对象,然后使用其方法来逐步添加查询条件。我们以一个 User 表为例来说明:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25)
            .like("name", "John");

上述代码中,我们创建了一个 QueryWrapper 对象,并使用 eqlike 方法分别添加了等于和模糊查询的条件。

2.1.2、复杂查询条件

条件构造器支持各种复杂的查询条件组合,如 BETWEEN、IN、OR 等。以下是一些示例:

queryWrapper.between("age", 20, 30)
            .in("department", "IT", "Finance")
            .or()
            .like("name", "Smith");

在上述代码中,我们使用 between 方法添加了一个范围查询条件,使用 in 方法添加了一个多选项查询条件,使用 or 方法创建了一个 OR 条件组。

2.1.3、动态查询条件

条件构造器还支持根据条件是否成立来动态添加查询条件,这在动态查询中非常有用。以下是一个示例:

if (StringUtils.isNotEmpty(keyword)) {
    queryWrapper.like("name", keyword);
}
if (minAge != null && maxAge != null) {
    queryWrapper.between("age", minAge, maxAge);
}

在上述代码中,我们根据不同的情况动态添加了查询条件,使得查询更加灵活。

2.1.4、查询结果排序

条件构造器还支持添加排序条件,使得查询结果按照指定的字段进行排序:

queryWrapper.orderByAsc("age")
            .orderByDesc("salary");

2.1.5、执行查询

最后,我们使用 QueryWrapper 对象执行查询:

List<User> userList = userMapper.selectList(queryWrapper);

2.2、主键策略

2.2.1、自增主键策略

自增主键策略是最常见的主键生成策略,适用于大多数数据库。通过自增,数据库会自动为每个插入的记录生成唯一的主键值。在 MyBatis-Plus 中,使用 IdType.AUTO 可以指定自增主键策略。

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

public class User {
    @TableId(type = IdType.AUTO) // 自增主键
    private Long id;
    // 其他字段...
}

2.2.2、UUID 主键策略

在这里插入图片描述

UUID 主键策略通过生成 UUID(通用唯一标识符)来确保主键的全局唯一性。这对于分布式系统中的数据一致性非常重要。在 MyBatis-Plus 中,使用 IdType.ASSIGN_UUID 可以指定 UUID 主键策略。

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

public class Product {
    @TableId(type = IdType.ASSIGN_UUID) // UUID 主键
    private String id;
    // 其他字段...
}

2.2.3、雪花算法主键策略

雪花算法主键策略是一种高效的分布式唯一 ID 生成算法,能够在分布式环境下生成有序的、唯一的 ID。在 MyBatis-Plus 中,使用 IdType.ASSIGN_ID 可以指定雪花算法主键策略。

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

public class Order {
    @TableId(type = IdType.ASSIGN_ID) // 雪花算法主键
    private Long id;
    // 其他字段...
}

2.2.4、自定义 ID 生成策略

如果以上内置的主键策略不满足需求,你还可以使用自定义的 ID 生成策略。首先,你需要实现 IdentifierGenerator 接口,然后在实体类中使用 IdType.INPUT 指定使用自定义生成器。

@Component
public class CustomIdGenerator implements IdentifierGenerator {
    @Override
    public Long nextId(Object entity) {
        // 自定义 ID 生成逻辑
        // 返回生成的 ID
    }
}
public class CustomEntity {
    @TableId(type = IdType.INPUT, inputType = CustomIdGenerator.class) // 自定义 ID 生成策略
    private Long id;
    // 其他字段...
}

三、总结

MyBatis-Plus 不仅在 CRUD 操作上提供了极大的便利,还提供了更高级的功能,如条件构造器、主键策略和自定义 ID 生成器。这些功能的集成使得持久层操作更加简单而灵活,让开发者能够专注于业务逻辑而不用过多关注 SQL 细节。

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

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

相关文章

学习node之——如何在项目中使用MySQL、前后端的身份认证

上一篇文章只写了一丢丢&#xff0c;这篇才是正片&#xff0c;look look look 一、使用mysql模块操作数据库 1、查询数据 这里连接数据库的用户和密码都是我们在安装mysql时配置的密码。每个人的users表格里面数据不同&#xff0c;结果也会不一样哟&#xff01; // 导入mys…

使用Spring Boot和Kafka实现消息发送和订阅

文章目录 一&#xff0c;新建Spring Boot1&#xff0c;Maven配置2&#xff0c;无法识别为SpringBoot项目3&#xff0c;无效的源发行版4&#xff0c;无法访问SpringApplication5&#xff0c;运行直接Finish6&#xff0c;服务运行成功 二&#xff0c;安装启动Kafka1&#xff0c;下…

从零开始学习 Java:简单易懂的入门指南之查找算法及排序算法(二十)

查找算法及排序算法 常见的七种查找算法&#xff1a;1. 基本查找2. 二分查找3. 插值查找4. 斐波那契查找5. 分块查找6. 哈希查找7. 树表查找 四种排序算法&#xff1a;1. 冒泡排序1.1 算法步骤1.2 动图演示1.3 代码示例 2. 选择排序2.1 算法步骤2.2 动图演示 3. 插入排序3.1 算…

基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文

背景 前面曾体验过通过零代码、可视化、拖拉拽的方式快速完成了从 MySQL 到 ClickHouse 的数据迁移&#xff0c;但是在实际生产环境&#xff0c;我们在迁移到目标库之前还需要做一些过滤和转换工作&#xff1b;比如&#xff0c;在诗词数据迁移后&#xff0c;发现原来 MySQL 中…

部署问题集合(二十二)Linux设置定时任务,并设置系统时间

前言 因为项目中经常用到定时任务&#xff0c;特此总结记录一下 步骤 大部分虚拟机创建后就自带定时服务&#xff0c;直接用命令就好编辑定时任务&#xff1a;crontab -e&#xff0c;在该文件下添加如下内容开机自启&#xff1a;reboot /home/autoRun.sh定时执行&#xff1a…

基于java+springboot+vue的交流互动系统-lw

​ 系统介绍&#xff1a; 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多企业的之中&#xff0c;随之就产生了“交流互动系统”&#xff0c;这样就让交流互动系统更加方便简单。 对于本交流互动系统的设计来说&a…

字节一面:你能讲一下跨域吗

前言 最近博主在字节面试中遇到这样一个面试题&#xff0c;这个问题也是前端面试的高频问题&#xff0c;作为一名前端开发工程师&#xff0c;我们日常开发中与后端联调时一定会遇到跨域的问题&#xff0c;只有处理好了跨域才能够与后端交互完成需求&#xff0c;所以深入学习跨域…

STM32F103驱动oled显示屏

STM32F103驱动oled显示屏 一.了解oled显示屏二.IIC协议驱动oled显示屏2.1 oled.c2.2 oled.h 三.效果展示 一.了解oled显示屏 oled显示屏和其他显示屏类似&#xff0c;不过他只有0.96英寸&#xff0c;屏幕较小&#xff0c;但是使用起来比较方便。有二种驱动方式&#xff0c;分别…

Python学习笔记——从面试题出发学习Python

Python学习笔记——从面试题出发学习Python Python学习笔记——从面试题出发学习Python1. 可变数据类型与不可变数据类型&#xff0c;深拷贝与浅拷贝&#xff0c;函数参数的传递机制1.1 变量与对象1.2 可变数据类型与不可变数据类型1.3 深拷贝与浅拷贝1.4 函数参数的传递机制1.…

SIP对讲求助终端,带功放输出

SV-7011TP SIP对讲求助终端&#xff0c;带功放输出 一、描述 网络对讲终端SV-7011TP&#xff0c;SV-7011TP能处理tcp/ip网络音频流&#xff0c;并驱动扬声器进行播音的终端&#xff0c;主要用于公共数字广播&#xff0c;媒体教学&#xff0c;报警等需要数字音频的领域。 SV-…

LinearAlgebraMIT_12_Graph

x.1 用Incidence matrix关联矩阵表示图 矩阵将图的关系数学表达了出来&#xff0c;如下&#xff0c; x.2 图的性质 如果一个数据结构是图&#xff0c;则意味着其组成关联矩阵的向量组是线性相关的&#xff0c;如果数据结构是树则线性无关。 通过对图的了解&#xff0c;我们可…

激活函数总结(二十四):激活函数补充(SquaredReLU、ModReLU)

激活函数总结&#xff08;二十四&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 SquaredReLU激活函数2.2 ModReLU激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、Soft…

【iOS】折叠cell

文章目录 前言一、实现效果二、折叠cell的实现原理三、实现折叠cell的高度变化四、实现选中点击的单元格总结 前言 在暑假的3GShare中用到了折叠cell控件&#xff0c;特此总结博客记录 一、实现效果 二、折叠cell的实现原理 首先我们需要知道ScrollView的是TableView的父类&a…

c++11 标准模板(STL)(std::basic_ostringstream)(四)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ostringstream;(C11 前)template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allo…

Anaconda Prompt输入jupyter lab无反应

问题&#xff1a;Anaconda Prompt界面输入指令无反应 原因&#xff1a;公司电脑勒索病毒防御工具阻止了进程 解决&#xff1a;找到黑名单恢复进程

Modahub魔搭社区:星环向量数据库Transwarp Hippo团队的详细介绍

目录 团队概况 团队特色 团队实践 未来展望 团队概况 星环向量数据库团队,这是一个在星环内部颇具特色的团队。我们的特色在于,我们不仅专注于数据库领域,而且还涵盖了数据应用以及人工智能领域。这种跨领域的合作让我们能够提供更全面、更深入的服务。 我们团队的一个重…

Android Activity启动流程一:从Intent到Activity创建

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、概览二、应用内启动源码流程 (startActivity)2.1 startActivit…

Facebook message tag 使用攻略

Messenger 讯息传不出去&#xff1f;无法发送FB 讯息给非好友&#xff1f; 2020年3月&#xff0c;Facebook 为了防止用户被过多的推广或垃圾讯息困扰而更新使用条款&#xff0c;现在商家要用FB传讯息给所有人&#xff08;包括非好友&#xff09;&#xff0c;应该使用 Facebook …

【管理运筹学】第 6 章 | 运输问题(4,表上作业法 | 闭回路调整法以及特殊情况 | 产销不平衡的运输问题)

文章目录 引言二、表上作业法2.3 改进的方法 —— 闭回路调整法2.4 表上作业法中的特殊情况&#xff08;一&#xff09;无穷多最优解&#xff08;二&#xff09;退化 三、产销不平衡的运输问题3.1 产量大于销量3.2 销量大于产量 写在最后 引言 接下来我们学习表上作业法的最后…

Cocos独立游戏开发框架中的Socket网络模块

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。 Socket模块是Cocos游戏开发框架中的重要组成部分之一。通过Socket模块&#xff0c;开发者可以轻松实现游戏中的网络通信功能&#xff0c;使得玩家可以与其他玩家进行实时交互…