MybatisPlus核心用法

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、integerlogic-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.mzph.cn/pingmian/51193.shtml

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

相关文章

漏洞复现-F6-11泛微-E-Cology-SQL

本文来自无问社区&#xff0c;更多漏洞信息可前往查看http://www.wwlib.cn/index.php/artread/artid/15575.html 0x01 产品简介 泛微协同管理应用平台e-cology是一套企业级大型协同管理平台 0x02 漏洞概述 该漏洞是由于泛微e-cology未对用户的输入进行有效的过滤&#xff0…

Python爬虫技术 第17节 使用BeautifulSoup

使用Python进行网页爬取是一个常见的任务&#xff0c;特别是当需要从网站上批量获取数据时。BeautifulSoup是一个非常流行的Python库&#xff0c;用于解析HTML和XML文档&#xff0c;非常适合用来提取网页中的信息。 下面我将通过一个简单的案例来介绍如何使用Python和Beautifu…

Skyeye云智能制造企业版源代码全部开放

智能制造一体化管理系统 [SpringBoot2 - 快速开发平台]&#xff0c;适用于制造业、建筑业、汽车行业、互联网、教育、政府机关等机构的管理。包含文件在线操作、工作日志、多班次考勤、CRM、ERP 进销存、项目管理、EHR、拖拽式生成问卷、日程、笔记、工作计划、行政办公、薪资模…

vue3 快速入门 (六) : vue中调用HTTP请求

1. 本文环境 Vue版本 : 3.4.29Node.js版本 : v20.15.0系统 : Windows11 64位IDE : VsCode 1.91.0 2. 访问HTTP 在Vue中&#xff0c;访问HTTP&#xff0c;可以使用axios第三方库。 axios 是一个基于 promise 的网络请求库&#xff0c;可以用于浏览器和 node.js。 axios使用简…

DelegateExecution和EXecution有啥区别

DelegateExecution 和 Execution 都是 Activiti 引擎中用于表示流程实例的执行对象&#xff0c;但它们在具体使用上有一些区别&#xff1a; DelegateExecution • 接口&#xff1a;DelegateExecution 是一个接口&#xff0c;继承自 VariableScope 接口。它主要在扩展点&#…

遗传算法与深度学习实战——进化深度学习

遗传算法与深度学习实战——进化深度学习 0. 前言1. 进化深度学习1.1 进化深度学习简介1.2 进化计算简介 2. 进化深度学习应用场景3. 深度学习优化3.1 优化网络体系结构 4. 通过自动机器学习进行优化4.1 自动机器学习简介4.2 AutoML 工具 5. 进化深度学习应用5.1 模型选择&…

【mybatis的批量操作】

在日常开发中&#xff0c;如果要操作数据库的话&#xff0c;或多或少都会遇到批量数据的处理&#xff0c;我们公司使用的mybaits-plus作为持久层的框架&#xff0c;今天就简单介绍一下mybaits批量操作数据库的几种方式。 1.循环插入 其实这种方式并不是批量插入&#xff0c;只…

功能实现——使用 OpenPDF 将 HTML 转换为 PDF,并将其上传到 FTP 服务器

目录 1.需求分析2.项目环境搭建3.将 HTML 转换为 PDF3.1.代码实现mail.htmlHtmlToPDFController.javaPDFConverterService.javaPDFConverterServiceImpl.java 3.2.测试3.3.注意事项 4.将生成的 PDF 上传到 FTP 服务器4.1.搭建 FTP 服务器4.2.配置文件4.3.代码实现FtpUtil.javaF…

谷粒商城实战笔记-75-商品服务-API-品牌管理-品牌分类关联与级联更新

文章目录 一&#xff0c;引入Mybatis Plus分页插件二&#xff0c;品牌列表的模糊查询三&#xff0c;增加品牌测试数据四&#xff0c;开发后台品牌关联分类接口1&#xff0c;接口product/categorybrandrelation/catelog/list2&#xff0c;接口product/categorybrandrelation/sav…

拓扑排序与有向无环图 -- Kahn算法和深度优先搜索

拓扑排序与有向无环图 文章目录 拓扑排序与有向无环图1. 什么是拓扑排序快速排序&#xff08;Quick Sort&#xff09;拓扑排序&#xff08;Topological Sort&#xff09;主要区别 2. 拓扑排序与有向无环图之间的契合性3. Kahn算法实现拓扑排序算法思想算法步骤算法代码 4. 深度…

线性回归从零实现

《李沐动手学深度学习》P30 import numpy as np import matplotlib.pyplot as plt import random# y x * w b noise # x dimension: (num_samples, 2) # w dimension: (2, 1) # b dimension: (1, 1) # noise dimension: (num_samples, 1) def generate_data(num_samples, w…

汽车长翅膀:GPU 是如何加速深度学习模型的训练和推理过程的?

编者按&#xff1a;深度学习的飞速发展离不开硬件技术的突破&#xff0c;而 GPU 的崛起无疑是其中最大的推力之一。但你是否曾好奇过&#xff0c;为何一行简单的“.to(‘cuda’)”代码就能让模型的训练速度突飞猛进&#xff1f;本文正是为解答这个疑问而作。 作者以独特的视角&…

数仓架构解析(第45天)

系列文章目录 经典数仓架构传统离线大数据架构 文章目录 系列文章目录烂橙子-终生成长群群主前言1. 经典数仓架构2. 传统离线大数据架构 烂橙子-终生成长群群主 前言 经典数仓架构 传统离线大数据架构 背景解析 1. 经典数仓架构 1991年&#xff0c;比尔恩门&#xff08;Bill…

Python 中 Caffe 库的使用方法

Caffe 是一个由伯克利视觉与学习中心 (Berkeley Vision and Learning Center, BVLC) 开发的深度学习框架。它特别适用于图像分类和图像分割任务。以下是一个关于如何使用 Caffe 库的详细指南&#xff0c;包括安装、配置、构建和训练模型的步骤。 1. 安装 Caffe 安装 Caffe 可以…

Pinokio:一键安装开源 AI 应用

整合了几乎所有市面上开源的 AI 工具傻瓜式地一键安装AI 工具支持全平台&#xff1a;Windows、Mac、Linux官网&#xff1a;https://pinokio.computer项目仓库&#xff1a;GitHub - pinokiocomputer/pinokio: AI Browser文章地址&#xff1a;https://blog.i68.ltd/archives/Pino…

牛客算法题解:数字统计、两个数组的交集、点击消除

目录 BC153 [NOIP2010]数字统计 ▐ 题解 NC313 两个数组的交集 ▐ 题解 AB5 点击消除 ▐ 题解 BC153 [NOIP2010]数字统计 题目描述&#xff1a; 题目链接&#xff1a; [NOIP2010]数字统计_牛客题霸_牛客网 (nowcoder.com) ▐ 题解 题目要求统计出某段数组中一共有多少个…

关于Buffer和Channel的注意事项和细节

1.举例 package org.example.demo;import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.util.RandomAccess;/*** MappedByteBuffer可…

Linux入门级常用命令行(二)

目录 1、mv指令 2、rm指令 3、通配符* 4、chmod指令 5、tar指令 1、mv指令 功能 用于移动或重命名文件和目录的命令 基本用法 mv [选项] 源文件或目录 目标文件或目录 常用选项 -i&#xff1a;在覆盖文件之前提示用户确认。-f&#xff1a;强制移动或重命名&#xff0…

动量参数(Momentum Parameter)

动量参数&#xff08;Momentum Parameter&#xff09;在机器学习中指的是一种用于加速梯度下降算法的技术&#xff0c;特别是深度学习中优化神经网络权重时。简单来说&#xff0c;动量参数是一种帮助优化过程加速并减少震荡的技术。 具体来说&#xff0c;动量参数具有以下特点…

网络编程——wireshark抓包、tcp粘包

目录 一、前言 1.1 什么是粘包 1.2 为什么UDP不会粘包 二、编写程序 文件树 客户端程序 服务器程序 tcp程序 头文件 makefile 三、 实验现象 四、改进实验 五、小作业 一、前言 最近在做网络芯片的驱动&#xff0c;验证功能的时候需要借助wireshark这个工具&…