MyBatis-plus 快速入门

提示:MyBatis-Plus(MP)是一个 MyBatis的增强版

文章目录

  • 前言
  • 使用MybatisPlus的基本步骤
    • 1、引入MybatisPlus依赖代替Mybatis依赖
    • 2、定义Mapper接口并继承BaseMapper
      • 他是怎么知道哪张表,哪些字段呢
    • 3、实体类注解
    • 4、根据需要添加配置


前言

提示:这里可以添加本文要记录的大概内容:

使用MybatisPlus的基本步骤

pom.xml文件引入依赖

1、引入MybatisPlus依赖代替Mybatis依赖

MyBatisPlus官方提供了starter,其中集成了MybatisMybatisPlus的所有功能,并且实现了自动装配效果。因此可以用MybatisPlusstarter代替Mybatisstarter

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

2、定义Mapper接口并继承BaseMapper

自定义的Mapper继承MybatisPlus提供的BaseMapper接口:

public interface UserMapper extends BaseMapper<User> {// 继承 BaseMapper 后,无需手动编写 CRUD 方法
}

单表的增删改查可以不用写SQL语句、mapper 接口

原来mapper接口:

public interface UserMapper {void saveUser(User user); // 保存用户void deleteUser(Long id); // 根据 ID 删除用户void updateUser(User user); // 更新用户信息User queryUserById(@Param("id") Long id); // 根据 ID 查询用户List<User> queryUserByIds(@Param("ids") List<Long> ids); // 根据 ID 列表批量查询用户
}

继承后:注意泛型为实体类的类型

public interface UserMapper extends BaseMapper<User> {//实体类void saveUser(User user);    // 对应 BaseMapper.insert()void deleteUser(Long id);    // 对应 BaseMapper.deleteById()void updateUser(User user);  // 对应 BaseMapper.updateById()User queryUserById(@Param("id") Long id);          // 对应 BaseMapper.selectById()List<User> queryUserByIds(@Param("ids") List<Long> ids);  // 对应 BaseMapper.selectBatchIds()
}

他是怎么知道哪张表,哪些字段呢

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

遵循MP约定:
默认以类名驼峰转下划线作为表名
默认把名为id的字段作为主键
默认把变量名驼峰转下划线作为表的字段名,不遵循约定就要用注解

不符合约定的要自己定义表名、字段名
在这里插入图片描述

3、实体类注解

三个注解的核心用途和区别:

注解作用常见场景
@TableName指定实体类对应的数据库表名实体类名与表名不一致时
@TableId指定主键字段及其生成策略主键字段名与列名不一致或需要指定生成策略
@TableField指定普通字段的映射关系或忽略字段字段名与列名不一致或需要忽略某些字段

通过合理使用这些注解,可以轻松实现实体类与数据库表之间的映射,同时满足各种复杂的业务需求。
在这里插入图片描述

@TableName("tb_user") // 指定数据库表名为 "tb_user"
public class User {@TableId(type = IdType.ASSIGN_ID) // 雪花算法生成主键private Long id;@TableField("username") // 数据库列名为 "username",映射到实体类的 name 字段private String name;@TableField("is_married") // 数据库列名为 "is_married",映射到实体类的 isMarried 字段private Boolean isMarried;@TableField("`order`") // 数据库列名为 "order"(避免与 SQL 关键字冲突),需要使用反引号包裹private Integer order;@TableField(exist = false) // 非数据库字段,不映射到数据库private String address;
}

IdType 枚举

  • AUTO:数据库自增长
  • INPUT:通过 set 方法自行输入主键值,需手动指定主键。
  • ASSIGN_ID:分配 ID,通过 IdentifierGenerator 接口的 nextId 方法生成主键,默认实现类为 DefaultIdentifierGenerator,基于雪花算法生成唯一 ID。

使用 @TableField 的常见场景

  1. 成员变量名与数据库字段名不一致
    当实体类的成员变量名与数据库表中的字段名不一致时,可以使用 @TableField 注解来指定数据库字段名。

  2. 成员变量名以 is 开头,且是布尔值
    如果实体类的布尔类型字段以 is 开头,而数据库字段名通常没有 is 前缀,可以通过 @TableField 映射字段名。

  3. 成员变量名与数据库关键字冲突
    如果实体类的字段名与 SQL 关键字冲突(如 ordergroup 等),需要使用 @TableField 注解,并通过反引号包裹字段名以避免语法错误。

  4. 成员变量不是数据库字段
    如果实体类中某些字段不需要映射到数据库表(如临时字段或计算字段),可以使用 @TableField(exist = false) 忽略该字段。


IdType的常见类型有哪些?

类型主键生成方式适用场景
AUTO数据库自增数据库支持自增主键(如 MySQL)
ASSIGN_IDMyBatis-Plus 雪花算法生成全局唯一 ID,适用于非自增主键
INPUT手动输入主键值由业务逻辑生成
ASSIGN_UUIDMyBatis-Plus 生成 UUID字符串类型主键,适用于分布式系统
NONE未设置主键生成策略主键生成逻辑由外部处理

4、根据需要添加配置

MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置
在这里插入图片描述

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

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

相关文章

找搭子系统 搭子经济新风口 基于精准匹配的社交新生态探索

一、市场前景&#xff1a;为什么现在需要"找搭子"&#xff1f; 孤独经济爆发 超60%年轻人存在"精准陪伴"需求&#xff08;2024社交报告&#xff09; 传统社交App无法满足"非婚恋、非熟人"的中间态需求 线下活动复苏 剧本杀/飞盘等兴趣活动年增…

深入探析C#设计模式:访问者模式(Visitor Pattern)的原理与应用

引言 在软件开发中&#xff0c;设计模式为我们提供了高效、可维护的解决方案。而在众多设计模式中&#xff0c;访问者模式&#xff08;Visitor Pattern&#xff09;以其独特的结构和应用场景&#xff0c;在复杂系统中发挥着重要作用。本文将深入讲解访问者模式的定义、原理、优…

Redis核心功能实现

前言 学习是个输入的过程&#xff0c;在进行输入之后再进行一些输出&#xff0c;比如写写文章&#xff0c;笔记&#xff0c;或者做一些技术串讲&#xff0c;虽然需要花费不少时间&#xff0c;但是好处很多&#xff0c;首先是能通过输出给自己的输入带来一些动力&#xff0c;然…

RPA VS AI Agent

图片来源网络 RPA&#xff08;机器人流程自动化&#xff09;和AI Agent&#xff08;人工智能代理&#xff09;在自动化和智能化领域各自扮演着重要角色&#xff0c;但它们之间存在显著的区别。以下是对两者区别的详细分析&#xff1a; 一、定义与核心功能 RPA&#xff08;机…

多模态大语言模型arxiv论文略读(十五)

Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文标题&#xff1a;Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文作者&#xff1a;Yuanwei Wu, Xiang Li, Yixin Liu, Pan Zhou, Lichao Sun ➡️ 研究机构…

第1节:计算机视觉发展简史

计算机视觉与图像分类概述&#xff1a;计算机视觉发展简史 计算机视觉&#xff08;Computer Vision&#xff09;作为人工智能领域的重要分支&#xff0c;是一门研究如何使机器"看"的科学&#xff0c;更具体地说&#xff0c;是指用摄影机和计算机代替人眼对目标进行识…

【工具】Fiddler抓包

本文主要讲解如何使用Fiddler抓HTTP包&#xff0c;可通过所抓包内容分析HTTP请求/响应的细节 安装与配置 1.下载与安装 下载地址: https://www.telerik.com/fiddler/ 点击了链接后&#xff0c;跳转到以下页面&#xff1a; 点击Fiddler Classic(免费版)后&#xff0c;跳转到以…

STM32F103复用JTAG/SWD引脚为GPIO

普中-精灵1开发板&#xff0c;主芯片为STM32F103C8T6&#xff0c;4个独立按键K1~K4依次接PA15~PA12&#xff0c;按下为低电平&#xff0c;8个LED灯D1~D8&#xff0c;依次接PA0~PA7。查询手册得知&#xff1a;PA15主功能为JTDI&#xff0c;PA14为JTCK/SWCLK&#xff0c;PA13为JT…

难度偏低,25西电人工智能学院821、833、834考研录取情况

1、人工智能学院各个方向 2、人工智能学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、智能院25年院线相对于24年院线 全部专业下降比较多&#xff0c;其中控制科学与工程下降20分&#xff0c;计算机科学与技术下降20分&#xff0c;计算机技术[专硕]下降…

达梦数据校验系统(DMDVS):数据完整性保障的不二之选

产品概述 达梦数据校验系统(DMDVS)是一款企业级数据一致性管理平台,提供跨数据库、跨平台的数据比对与修复能力。系统采用模块化架构设计,支持静态校验、动态校验、单向校验及分布式校验四大核心模式,适用于数据迁移验证、容灾备份核查、实时同步监控等关键场景,👉更多…

【3dSwap】3D-Aware Face Swapping

文章目录 3D-Aware Face Swapping背景points贡献方法从2D图像推断3D先验通过潜在代码操纵进行人脸交换联合枢轴调整目标函数实验与二维人脸交换方法比较进一步分析3D感知人脸交换消融实验局限性3D-Aware Face Swapping 会议/期刊:CVPR 2023 作者: code:https://lyx0208.gi…

客户案例 | 日事清×初心家居:多部门协作实现新品上架自动化

1、客户背景 佛山市初心家居有限公司&#xff0c;主营家居类目&#xff0c;年营收额近亿元。初心家居有自己的家居生产工厂&#xff08;可为第三方提供生产&#xff09;&#xff0c;店内产品均为自主研发设计&#xff0c;所以新品开发也是初心家居的核心。 2、客户工作场景及需…

KWDB创作者计划—KWDB多副本集群保姆级部署

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…

micro ubuntu 安装教程

micro ubuntu 安装教程 官网地址 : https://micro-editor.github.io 以下是在 Ubuntu 系统中安装 micro 编辑器 的详细教程&#xff1a; 方法 1&#xff1a;通过 ​apt​​ 直接安装&#xff08;推荐&#xff09; 适用于 Ubuntu 20.04 及以上版本&#xff08;官方仓库已收录…

Docker 镜像 的常用命令介绍

拉取镜像 $ docker pull imageName[:tag][:tag] tag 不写时&#xff0c;拉取的 是 latest 的镜像查看镜像 查看所有本地镜像 docker images or docker images -a查看完整的镜像的数字签名 docker images --digests查看完整的镜像ID docker images --no-trunc只查看所有的…

从零搭建微服务项目Pro(第0章——微服务项目脚手架搭建)

前言&#xff1a; 在本专栏Base第0章曾介绍一种入门级的微服务项目搭建&#xff0c;尽管后续基于此框架上实现了Nacos、Eureka服务注册发现、配置管理、Feign调用、网关模块、OSS文件存储、JSR参数校验、LogBack日志配置&#xff0c;鉴权模块、定时任务模块等&#xff0c;但由于…

VS Code下开发FPGA——FPGA开发体验提升__下

上一篇&#xff1a;IntelliJ IDEA下开发FPGA-CSDN博客 Type&#xff1a;Quartus 一、安装插件 在应用商店先安装Digtal IDE插件 安装后&#xff0c;把其他相关的Verilog插件禁用&#xff0c;避免可能的冲突。重启后&#xff0c;可能会弹出下面提示 这是插件默认要求的工具链&a…

使用Python从零开始构建端到端文本到图像 Transformer大模型

简介&#xff1a;通过特征向量从文本生成图像 回顾&#xff1a;多模态 Transformer 在使用Python从零实现一个端到端多模态 Transformer大模型中&#xff0c;我们调整了字符级 Transformer 以处理图像&#xff08;通过 ResNet 特征&#xff09;和文本提示&#xff0c;用于视觉…

Webpack中的文件指纹:给资源戴上个“名牌”

你是否想过&#xff0c;当你修改代码后&#xff0c;浏览器为什么仍然拿着旧版资源不放&#xff1f;秘密就在于——文件指纹&#xff01;简单来说&#xff0c;文件指纹就像给每个构建出来的文件贴上独一无二的“姓名牌”&#xff0c;告诉浏览器&#xff1a;“嘿&#xff0c;我更…

python可变对象与不可变对象

文章目录 Python 中的可变对象与不可变对象不可变对象(Immutable Objects)可变对象(Mutable Objects)重要区别 Python 中的可变对象与不可变对象 在 Python 中&#xff0c;对象可以分为可变对象(mutable)和不可变对象(immutable)&#xff0c;这是 Python 中非常重要的概念&…