MybatisPlus核心用法

news2024/11/16 4:28:29

MybatisPlus核心用法

目录

  • MybatisPlus核心用法
    • 1.使用MybatisPlus的基本步骤:
    • 2.MybatisPlus是如何获取实现CRUD的数据库表信息的?
    • 3.MybatisPlus的常用注解有哪些?
      • 如果表名称和实体类名称不符合约定该怎么做?
      • IdType的常见类型有哪些?
      • 使用@TableField的常见场景是?
    • 4.MyBatisPlus的配置
    • 5. 核心功能
      • 条件构造器
      • 自定义SQL
      • Service接口
    • 6.DB静态方法
    • 7.逻辑删除
    • 8.枚举处理器
    • 9.JSON处理

1.使用MybatisPlus的基本步骤:

①引入MybatisPlus依赖,代替Mybatis依赖

<!--MybatisPlus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

②定义Mapper接口并继承BaseMapper

public interface UserMapper extends BaseMapper<User> {}

③在实体类上添加注解声明 表信息

④在application.yml中根据需要添加配置

2.MybatisPlus是如何获取实现CRUD的数据库表信息的?

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

约定:

•默认以类名驼峰转下划线作为表名

•默认把名为id的字段作为主键

•默认把变量名驼峰转下划线作为表的字段名

3.MybatisPlus的常用注解有哪些?

•@TableName:指定表名称及全局配置

•@TableId:指定id字段及相关配置

•@TableField:指定普通字段及相关配置

如果表名称和实体类名称不符合约定该怎么做?

使用注解来设定表名、主键、普通字段信息等。

在这里插入图片描述

IdType的常见类型有哪些?

•AUTO、ASSIGN_ID、INPUT

使用@TableField的常见场景是?

•成员变量名与数据库字段名不一致

•成员变量名以is开头,且是布尔值

•成员变量名与数据库关键字冲突

•成员变量不是数据库字段

4.MyBatisPlus的配置

MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置。例如:

mybatis-plus:
	type-aliases-package: com.itheima.mp.domain.po # 别名扫描包
	mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值
	configuration: 
		map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
		cache-enabled: false # 是否开启二级缓存
 	global-config:
		db-config:
			id-type: assign_id # id为雪花算法生成
			update-strategy: not_null # 更新策略:只更新非空字段

具体可参考官方文档:使用配置 | MyBatis-Plus (baomidou.com)

5. 核心功能

条件构造器

在这里插入图片描述

条件构造器的用法:

•QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分

•UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用

•尽量使用LambdaQueryWrapper和 LambdaUpdateWrapper,避免硬编码

自定义SQL

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

①基于Wrapper构建where条件

List<Long> ids = List.of(1L, 2L, 4L);
int amount = 200;
// 1.构建条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId, ids);
// 2.自定义SQL方法调用
userMapper.updateBalanceByIds(wrapper, amount);

②在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

void updateBalanceByIds(@Param("ew") LambdaQueryWrapper<User> wrapper, @Param("amount") int amount);

③自定义SQL,并使用Wrapper条件

<update id="updateBalanceByIds">
    UPDATE tb_user SET balance = balance - #{amount} ${ew.customSqlSegment}
</update>

Service接口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MP的Service接口使用流程是怎样的?

自定义Service接口继承IService接口

public interface IUserService extends IService<User> {}

自定义Service实现类,实现自定义接口并继承ServiceImpl类

public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {}

其中我们可以利用ServiceImpl中实现的方法直接进行增删改查等上图的操作。

在这里插入图片描述
在这里插入图片描述

lambaQuery.eq(条件,使用反射获取属性,属性的值也就是参数)
lambaUpdate同理,但最后要跟上.update();

6.DB静态方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用的时候必须给lambadQueryg一个实体类对象

7.逻辑删除

逻辑删除就是基于代码逻辑模拟删除效果,但并不会真正删除数据。思路如下:

•在表中添加一个字段标记数据是否被删除

•当删除数据时把标记置为1

•查询时只查询标记为0的数据

例如逻辑删除字段为deleted:

•删除操作:

UPDATE user SET deleted = 1 WHERE id = 1 AND deleted = 0

•查询操作:

SELECT * FROM user WHERE deleted = 0

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:

mybatis-plus:
	global-config:
		db-config:
			logic-delete-field: flag # 全局逻辑删除的实体字段名,字段类型可以是boolean、integer
			logic-delete-value: 1 # 逻辑已删除值(默认为 1)
			logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

8.枚举处理器

在这里插入图片描述

如何实现PO类中的枚举类型变量与数据库字段的转换?

①给枚举中的与数据库对应value值添加@EnumValue注解

给自定义的枚举类中添加@EnumValue注解如上右图

②在配置文件中配置统一的枚举处理器,实现类型转换

mybatis-plus:
	configuration:
	default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

9.JSON处理

在数据库表中存在info是JSON类型的,当我们想要获取info中的age或者其他属性时,很难获取到,这时候要使用JSON处理器。

在这里插入图片描述

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

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

相关文章

IOS微软语音转文本,lame压缩音频

在IOS开发中&#xff0c;用微软进行语音转文本操作&#xff0c;并将录音文件压缩后返回 项目中遇到了利用微软SDK进行实时录音转文本操作&#xff0c;如果操作失败&#xff0c;那么就利用原始音频文件通过网络请求操作&#xff0c;最终这份文件上传到阿里云保存&#xff0c;考…

监控服务器状态,夜莺( nightingale)方案介绍

前提 选择一台服务器&#xff0c;部署一个监控服务端&#xff0c;然后在各个windows或者linux中部署数据采集节点。 类似如下结构 目前我这边采用的技术是 https://flashcat.cloud/product/nightingale/ Nightingale 的解决方案 1 部署内容 服务端&#xff08;服务端为 c…

centos7安装思源黑体

centos7安装思源黑体 下载思源字体centos7查看目前字体查看所有字体查看所有中文字体 进入字体目录将新加的字体目录添加到fonts.conf配置文件刷新字体缓存查看效果 下载思源字体 下载地址: https://github.com/adobe-fonts/source-han-sans/releases centos7查看目前字体 查…

【MyBatis】基础操作

准备工作 准备数据库表创建 springboot工程&#xff0c;选择引入对应的起步依赖&#xff08;mybatis、mysql驱动、lombok&#xff09;application.properties中引入数据库连接信息创建对应的实体类 Emp&#xff08;实体类属性采用驼峰命名&#xff09;准备Mapper接口 EmpMappe…

排序系列 之 希尔排序

&#xff01;&#xff01;&#xff01;排序仅针对于数组哦本次排序是按照升序来的哦 介绍 英文名为ShellSort&#xff0c;又称“缩小增量排序”是直接插入排序算法的一种更高效的改进版本希尔排序是把记录按下标的指定步长分组&#xff0c;然后按照每组使用直接插入排序&#…

idea一直update indexing 卡死

打开IDEA存储应用程序的本地数据文件夹&#xff0c;关闭IDEA&#xff0c;删除caches和index文件夹下的文件&#xff0c;重新打开。

数据加密技术在数据安全中起到什么样的作用?

把数据以及一个密钥&#xff0c;通过相关的加密算法&#xff0c;进行一系列的加密算法计算处理&#xff0c;使这个数据变成密文&#xff0c;保护数据的机密性。数据加密技术是一种将原始数据&#xff08;明文&#xff09;通过算法转换成只有授权用户才能解读的格式&#xff08;…

C++客户端Qt开发——系统相关(多媒体音频)

3.多媒体&#xff08;音频、视频&#xff09; 播放声音需要引入multimedia模块 使用QSound类 仅支持的音频文件格式为.wav&#xff0c;同样使用qrc文件管理外部的资源 &#xff08;使用的.wav文件不宜过大&#xff0c;尽量在几秒内&#xff0c;否则会构建时间过长&#xff…

拓维思树障分析Tovos PowerLine 4.0.19 航线规划Tovos SmartPlan 2.0.0 下载License电力应用软件使用

Tovos PowerLine 是功能强大的输电线路智能巡检系统&#xff01;这是一个专业且智能的软件&#xff0c;能够更准确的进行巡检和对线路设备进行精确的测量&#xff0c;通过获取高精度的点云来获取精准的三维路线的地形地貌、设备设施、途径的各种物体等来精确您的三维空间信息和…

三子棋小程序

一.自定义头文件(game.h) 放入源文件需要用到的标准库头文件和函数的声明 ROW 和COL为棋盘的行和列&#xff0c;三子棋嘛&#xff0c;肯定为3啦 #pragma once #include<stdio.h> #include<String.h> #include<stdlib.h> #include<time.h> #define ROW…

中国少女徐可昕心怀爱豆梦 为实现梦想勇赴韩国

如今MZ世代(MZ世代是‌Millennial世代和‌Z世代的合成词,用来描述1980至2000年间出生的人)小伙伴们追求着怎样的梦想呢?随着韩国K-POP热潮和娱乐产业的发展,越来越多的年轻人希望可以在娱乐圈工作,例如成为爱豆或经理人。通过抖音或YouTube等,可以发现很多才华横溢的年轻人创作…

malloc 对比验证 posix_memalign 的功能

1&#xff0c;函数说明 posix_memalign 是一个 POSIX 标准定义的函数&#xff0c;用于在内存中分配对齐的内存块。这个函数可以确保分配的内存块满足特定的对齐要求&#xff0c;通常用于需要对齐内存访问的情况&#xff0c;比如 SIMD 指令集的使用或者特定硬件要求的内存对齐。…

瑞派明星医生:技术深耕教学指导,燃动当代名校兽医双效技能Buff

名校精进&#xff0c;攻破技术堡垒 从动物保护、环境保护的最初理想&#xff0c;到兽医学专业领域深耕&#xff0c;天津瑞派长江宠物医院的唐玉洁医生正用自己的实际行动展现着当代兽医人才背后的奉献、良知、超越与传承。 享受了东北林业大学带来的短暂而有趣的大学生活&…

聊聊RNN与Attention

前言 Attention Mechanism&#xff0c;称为注意力机制。基于Attention机制&#xff0c;seq2seq可以像我们人类一样&#xff0c;将“注意力”集中在必要的信息上。 Attention的结构 seq2seq存在的问题 seq2seq中使用编码器对时序数据进行编码&#xff0c;然后将编码信息传递…

JS:JavaScript 简介

前言 在当今数字时代&#xff0c;JavaScript已然成为了现代Web开发的基石。从最初作为浏览器中的一个小型脚本语言&#xff0c;到如今成为驱动全球互联网的强大引擎&#xff0c;JavaScript的发展历程本身就是一个令人着迷的故事。 好了开始学习JS吧 1. 如果刚开始了解js&#…

Node.js自动化处理TOML文件

在软件开发过程中&#xff0c;自动化处理配置文件是一种常见的需求。TOML&#xff08;Tom’s Obvious, Minimal Language&#xff09;是一种用于配置文件的简单易读的格式。本文将展示如何使用Node.js和一些流行的库来自动化读取、修改并写入TOML文件。 1. 准备工作 在开始之前…

IAR工程设置

这篇记录一下工作中对IARide的工程设置的配置步骤。 所以这不是一篇通用的文章&#xff0c;只是个人记录。 目的&#xff1a;为了是ARM仿真器能够下载调试锐能微的芯片 一、工程设置 1、更改boot文件的工程设置&#xff1a; 2、编译boot文件 3、配置8213B的工程设置&#x…

iPhone 16 Pro Max电池大揭秘,听说迎来了有史以来最持久的续航

智能手机市场的竞争日益激烈&#xff0c;各大厂商都在寻求创新以保持领先地位。而苹果公司即将推出的iPhone 16 Pro Max&#xff0c;则以其革命性的不锈钢电池壳和电诱导粘合剂脱离技术&#xff0c;再次刷新了我们对智能手机电池技术的认知。 一、不锈钢电池壳的突破 苹果公司…

Windows系统编程API 学习之路

目录 I. 基础 进程 动态链接库 线程 Windows应用程序开发 初入Windows编程 使用strings C/C运行时中的字符串 安全字符串函数 32位与64位开发 定义自定义错误代码 I. 基础 Windows NT操作系统系列有着悠久的历史&#xff0c;从1993年推出的3.1版本开始。今天的Windo…

如何主持收集故事研讨会

如何主持收集故事研讨会 引言 在文化的长河中,故事是传承知识、情感与智慧的桥梁。收集故事不仅是对过去的回顾,更是对未来灵感的启迪。组织一场收集故事研讨会,旨在汇聚各界人士,共同挖掘、整理并分享那些触动人心、富有意义的故事。作为这样一场活动的主持人,您的角色…