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.hqwc.cn/news/691541.html

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

相关文章

多个文件 import 的相同模块里的对象

多个文件 import 的相同模块里的对象&#xff0c;是否永远都是同一个对象&#xff1f; 在store的index.js中 import vue from ‘vue’ import Vuex from ‘vuex’ 并配置有关对象 然后再app.vue中配置vm 在不同的文件中 import一个vue对象&#xff0c;在任何情况下&#…

pycharm 将项目连同库一起打包及虚拟环境的使用

目录 一、创建虚拟环境 1、用 anaconda 创建 2、Pycharm 直接创建 二、虚拟环境安装第三方库 1、创建项目后&#xff0c;启动终端(Alt F12)&#xff0c;或者点击下方标记处。 2、使用 pip 或者 conda 来进行三方库的安装或卸载 3、将项目中的库放入文档&#xff0c;便于…

HCIP的学习(14)

过滤策略—filter-policy ​ 思科中&#xff1a;分发列表 ​ 过滤策略是只能够针对于路由信息进行筛选&#xff08;过滤&#xff09;的工具&#xff0c;而无法针对于LSA进行过滤。 在R4的出方向上配置过滤策略&#xff0c;使得R1不能学习到23.0.0.0/24路由信息1、抓取流量 […

《Linux运维总结:ARM64架构CPU基于docker-compose一离线部署rabbitmq 3.10.25容器版镜像模式集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

Windows系统下通过nginx配置多项目

文章目录 前言大概思路实际操作记录&#xff1a;查看nginx 错误日志问下AI注意点&#xff1a; 当访问域名根路径时&#xff0c;重定向到/pc解决&#xff1a; 总结 前言 在windows电脑启动一个nginx 测试配置多前端项目&#xff0c;一个pc端&#xff08;vue3tsvite &#xff0c…

金三银四面试题(二十六):责任链模式知多少?

什么是责任链模式 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;旨在通过将请求的处理分布在一系列对象上&#xff0c;从而使得多个对象可以尝试处理同一个请求。这些对象被链接成一条链&#xff0c;每个对象都可以对请…

8种区块链开发者必须知道的顶级编程语言!

我来问你一个问题&#xff1a;请说出一种技术&#xff0c;它以去中心化、不可篡改和透明性等核心特征席卷了全球。 这个问题的答案是&#xff0c;当然是区块链&#xff0c;它在近些年进入大家的视野并颠覆了工商业&#xff0c;没有任何其他技术能够做到这一点。 预计从2020年…

1065 单身狗

solution “单身狗”&#xff1a;没有搭子或者搭子没来的参与者输出id时按增序输出 #include<iostream> #include<map> #include<algorithm> using namespace std; const int maxn 1e6, maxn1 1e4 10; int flag[maxn] {0}, all[maxn1]; int main(){int…

weblogic 反序列化 CVE-2018-2628

这个漏洞因为java版本问题一直下载不了ysoserial反序列化工具&#xff0c;没办法生成payload。这里记录一下漏洞原理。 一、漏洞简介 Weblogic Server中的RMI 通信使用T3协议在Weblogic Server和其它Java程序&#xff08;客户端或者其它Weblogic Server实例&#xff09;之间传…

JVM之运行时数据区

Java虚拟机在运行时管理的内存区域被称为运行时数据区。 程序计数器&#xff1a; 也叫pc寄存器&#xff0c;每个线程会通过程序计数器记录当前要执行的字节码指令的地址。程序计数器在运行时是不会发生内存溢出的&#xff0c;因为每个线程只存储一个固定长度的内存地址。 JAVA虚…

【网站项目】SpringBoot803房屋租赁管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【C/C++】C/C++ 校园失物招领系统设计与实现(源码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…