MyBatis-plus(一):快速入门

目录

一、MyBatis-plus 快速入门

1、原理

2、实体类命名规则

3、常见注解

4、主键 id 策略

5、使用 @TableField 的常见场景

6、常用配置

二、核心功能

1、条件构造器

2、自定义 SQL

3、IService 接口


一、MyBatis-plus 快速入门

1、原理

  • MyBatisPlus 通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。
  • 主要作用是定义 DAO 层的数据库操作方法,例如数据的增删改查等。基本使用示例:
    public interface xxxMapper extends BaseMapper<xxx实体类>{}

2、实体类命名规则

  • 类名使用驼峰命名,转变下划线的方式,作为表名。
  • 变量名使用驼峰命名,转变下划线的方式,作为字段名。
  • 固定以字段名为 id 的字段作为主键。

3、常见注解

  • 可以通过注解的方式,映射实体类和数据表的关系。
  • @TableName:用于指定表名。
  • @Tableld:用于指定表中的主键字段信息。
  • @TableField:用于指定表中的普通字段信息。

4、主键 id 策略

  • 主键在 MyBatis-plus 中称为 IdType, 可以通过注解的方式,设置不同的 id 策略。
  • ldType 枚举:
    • AUTO:主键自增。示例:@TableId(value=id, type=IdType.AUTO)
    • INPUT:通过 set 方法自行输入
    • ASSIGN_ID:分配 id,通过接口 IdentifierGenerator 的方法 nextld 生成 id,默认实现类使用 DefaultldentifierGenerator 雪花算法。

5、使用 @TableField 的常见场景

  • 成员变量名与数据库字段名不一致时。
  • 成员变量名以 is 开头,且为布尔值时。
  • 成员变量名与数据库关键字冲突时。示例:@TableField("`order`")
  • 成员变量不是数据库字段时。示例:@TableField(exist = false)

6、常用配置

  • MyBatisPlus 的配置项继承了 MyBatis 原生配置,同时也拥有一些自己特有的配置。
mybatis-plus:type-aliases-package: com.xxx.xxx  #别名扫描包,配置默认包名。mapper-locations: "classpath*:/mapper/**/*.xml"configuration: map-underscore-to-camel-case: true  #是开启下划线和驼峰映射。cache-enabed: false  #是否开启二级缓存global-config: db-config: id-type: assign_id  #使用雪花算法生成 id。update-strategy: not_null  #更新策略:只更新非空字段.

二、核心功能

1、条件构造器

  • Querywrapper 和 LambdaQueryWrapper 通常用来构建 select、delete、update 的 where 条件部分。
  • Updatewrapper 和 LambdaUpdatewrapper 通常只有在 set 语句比较特殊才使用。
  • 尽量使用 LambdaQuerywrapper 和 LambdaUpdatewrapper 避免硬编码。

2、自定义 SQL

  • 可以利用 MyBatisPlus 的 Wrapper 构建复杂的 Where 条件,然后自己定义 SQL 语句中剩下的部分。
  • 基于 Wrapper 构建 where 条件。示例代码:
    List<Long> ids = List.of(1L,2L,3L);
    int amount = 200;LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId,ids);userMapper.updateAmountByIds(wrapper, amount);
  • 在 mapper 方法参数中用 @Param 注解声明 wrapper 变量名称,必须是 Constants.WRAPPER 。示例代码:
    // UserMapper 接口中void updateAmountByIds(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper, @Param("amount") int amount);

  • 自定义SQL, 并使用 Wrapper 条件。示例代码:
    <update id="updateAmountByIds">UPDATE 数据表名 SET amount = amount - #{amount} ${(Constants.WRAPPER).customSqlSegment}
    </update>

3、IService 接口

  • 使用 service 接口需要先构建以下继承体系:

  • 示例代码:
    // service 接口
    public interface IUserService extends IService<User> { }// service 实现类
    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService { }

  • IService 提供批量处理操作(IService 和 BaseMapper 需一起使用),BaseMapper 则没有。

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

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

相关文章

Spark写Hbase如何提高Bulkload的速度

​   对于Hbase的Bulkload基本流程这里就不多介绍可以看Bulkload流程介绍&#xff0c;本问主要介绍如何提升Bulkload的方式。   很多时候我们在写HFile的时候都会进行repartition使用的是repartitionAndSortWithinPartitions&#xff0c;其中Spark也提供几种repartition的实…

蓝桥杯备战6.奖学金

P1093 [NOIP2007 普及组] 奖学金 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> #define endl \n #define int long long using namespace std; const int N 2e710,M 1e310; int a[N],pre[N]; int chi[N],math[N],eng[N],id[N],b[N]; struct s…

算法学习012-不同路径 c++动态规划算法实现 中小学算法思维学习 信奥算法解析

目录 C不同路径 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C不同路径 一、题目要求 1、编程实现 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09…

Golang | Leetcode Golang题解之第78题子集

题目&#xff1a; 题解&#xff1a; func subsets(nums []int) (ans [][]int) {set : []int{}var dfs func(int)dfs func(cur int) {if cur len(nums) {ans append(ans, append([]int(nil), set...))return}set append(set, nums[cur])dfs(cur 1)set set[:len(set)-1]df…

什么是跨域?怎么解决跨域?为什么使用中间服务器就行?

文章目录 什么是跨域怎么解决跨域为什么使用中间服务器就行了呢 什么是跨域 跨域指的是在Web开发中&#xff0c;当一个网页的脚本试图访问不同域&#xff08;域名、协议或端口&#xff09;的资源时&#xff0c;就会发生跨域问题。同源策略&#xff08;Same-Origin Policy&…

计算概论学习笔记(2)

感谢北大李戈老师讲解的计算概论。 【道阻且长&#xff0c;行则将至】 很多年没有intensive coding&#xff0c;现在这个系列是coding retake&#xff0c;一点点回忆之前的知识&#xff0c;希望能重回到一线。主要内容包括C,C,Pytorch学术前沿项目学习和实践&#xff0c;预计…

iOS 安装cocoapds

注意 CocoaPods安装是基于ruby环境的&#xff0c;所以要安装CocoaPods先要安装Ruby环境&#xff0c;国内不能直接安装&#xff0c;只能通过VPN或淘宝的Ruby镜像来访问。 安装过程 gem sources --remove https://rubygems.org/ ** (注意是两个“-”&#xff0c;否则会移除失败) …

Spring STOMP-开启STOMP

通过Spring框架的spring-messaging和spring-websocket模块&#xff0c;提供了对WebSocket上STOMP的支持。一但你添加了这些依赖项&#xff0c;你就可以像下面这个示例一样&#xff0c;通过WebSocket公开一个STOMP端点&#xff1a; import org.springframework.web.socket.conf…

掌握文件重命名技巧:一次性处理多路径文件并赋予独立编号

在日常工作和生活中&#xff0c;我们经常需要处理大量的文件&#xff0c;而文件重命名则是一项非常常见的任务。如何高效地一次性处理多路径文件并赋予独立编号&#xff0c;成为许多用户关注的焦点。本文将介绍云炫文件管理器一些实用的文件重命名技巧&#xff0c;帮助您轻松应…

蓝桥杯备战7.宇宙总统

P1781 宇宙总统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 当时写cmp的时候没想到直接让string类型进行比较 #include<bits/stdc.h> #define endl \n #define int long long using namespace std; const int N 2e710,M 1e310; int a[N],pre[N]; int chi[N],math…

Python3 笔记:Python的常量

常量&#xff08;constant&#xff09;&#xff1a;跟变量相对应&#xff0c;指第一次赋予值后就保持固定不变的值。 Python里面没有声明常量的关键字&#xff0c;其他语言像C/C/Java会有const修饰符&#xff0c;但Python没有。 Python中没有使用语法强制定义常量&#xff0c…

前后端完全开源!功能丰富的在线教室项目:Agora Flat

Agora Flat&#xff1a;高效集成的在线教室解决方案&#xff0c;重塑互动学习新体验。- 精选真开源&#xff0c;释放新价值。 概览 Agora Flat是在GitHub平台上公开分享的一个全面开源项目&#xff0c;它精心设计为一个高性能的在线教室解决方案&#xff0c;旨在便捷地搭建支持…

根据标签最大层面ROI提取原始图像区域(二)

今天要实现的任务还是提取肿瘤的感兴趣区域。 有两个文件&#xff0c;一个是nii的原始图像文件&#xff0c;一个是nii的标签文件。我们要实现的是&#xff1a;在标签文件上选出最大层面&#xff0c;然后把最大层面的ROI映射到原始图像区域&#xff0c;在原始图像上提裁剪出ROI…

容器镜像安全管理解析

目录 1. 镜像的层次结构与安全性2. 安全扫描工具3. 安全的最佳实践4. 安全策略实施 镜像安全在容器化和云原生应用中至关重要&#xff0c;因为容器镜像通常包含了应用及其依赖的所有必要组件&#xff0c;任何安全漏洞都可能成为攻击的入口点。 1. 镜像的层次结构与安全性 容器…

【DevOps】Linux 网络命令netstat详解

目录 一、netstat 命令的主要功能 常用 netstat 命令及选项 二、示例和用法 1. 查看所有连接和监听端口 2. 显示端口和进程信息 3. 使用 netstat 查看路由表 4. 查看接口统计 5. 查看服务和协议的统计信息 6. 持续监控网络状态 7. 组合使用 netstat 选项 8. 其他有用…

GEE案例——广东省梅州市梅县区松口镇的梅江横山水灾监测(利用sentinel-1和大津法计算洪水时序面积)

背景 2024年4月5日晚,广东省气象部门发布消息称,4月5日0时到20时,广东中北部出现了暴雨到大暴雨,其中从化吕田累计雨量最大达到225.7毫米。累计降水量达到大暴雨的地方还包括惠州龙门县永汉镇205.2毫米、清远佛冈县水头镇188.6毫米、韶关新丰县梅坑镇174.5毫米、河源东源县…

锐捷EWEB网管系统RCE漏洞

文章目录 免责声明漏洞描述漏洞原理影响版本漏洞复现修复建议 免责声明 该文章只为学习和交流&#xff0c;请不要做违法乱纪的事情&#xff0c;如有与本人无关 漏洞描述 锐捷网管系统是由北京锐捷数据时代科技有限公司开发的新一代基于云的网络管理软件&#xff0c;以"…

哈希表(unordered_set、unordered_map)

文章目录 一、unordered_set、unordered_map的介绍二、哈希表的建立方法2.1闭散列2.2开散列&#xff08;哈希桶/拉链法&#xff09; 三、闭散列代码&#xff08;除留余数法&#xff09;四、开散列代码&#xff08;拉链法/哈希桶&#xff09; 一、unordered_set、unordered_map的…

数据结构之——队列详解

目录 前言&#xff1a; 一、什么是队列 二、队列的实现 2.1 队列结构 2.2 队列初始化 2.3 队列销毁 2.4 入队列 2.5 出队列 2.6 获取队列头部元素 2.7 获取队列尾部元素 2.8 获取队列中有效元素个数 2.9 检测队列是否为空 三、 代码总览 Queue.h test.c 四、例题 前言…

树莓派、ubuntu低版本python3安装库

如果遇到树莓派中自带低版本python3&#xff0c;又不想额外去安装python3时&#xff0c;可能会遇到版本过低&#xff0c;无法安装库的情况&#xff0c;以下用我实际情况举例解决方案。 本次遇到的问题是树莓派低版本中&#xff0c;python3为3.7.3&#xff0c;需要安装numpy&am…