当前位置: 首页 > java >正文

MyBatisPlus(2):常用注解

上文提到MyBatisPlus框架MyBatis框架的基础之上,进行了进一步封装,极大的提高了开发者单表CRUD的效率,开发者可以使用BaseMapper中提供的方法便捷的CRUD。(MyBatisPlus(1):快速入门)上一篇文章中提到了一个问题:MyBatisPlus框架是如何知道要通过这些方法操作哪一张数据库表呢? 这就必须要提到MyBatisPlus框架的默认规则和常用注解了。

MyBatisPlus默认规则

类名驼峰转下划线作为表名

MyBatisPlus框架通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。 我们需要在自定义Mapper继承BaseMapper接口时指明泛型,此时MyBatisPlus框架就可以通过类名驼峰转下划线作为需要操作的表名。举个例子,假如说我们指明的泛型为Emp类,那么MyBatisPlus框架操作的表名就应该是emp;假如说我们指明的泛型为TbEmp类,那么MyBatisPlus框架操作的表名就应该是tb_emp

将名为id的属性作为主键

MyBatisPlus框架会将实体类中名为id的属性作为数据库表中的主键,请注意:必须是严格名为id的属性才可以被默认作为主键,否则需要额外的配置。

将属性名驼峰转下划线作为表中字段名

MyBatisPlus框架会将实体类中通过驼峰命名法命名的属性名,转为下划线命名法并当作表中的字段名,比如说实体类中的属性是username,此时单个单词不涉及驼峰命名法,所以说无需转换,即可直接作为表中的字段名;但假如实体类中的属性是phoneNumber,此时就需要将驼峰命名法转换为下划线命名法phone_number然后再将其作为表中的字段名。

MyBatisPlus常用注解

上述提到了MyBatisPlus框架的默认规则,但是完全依靠默认规则进行编码是极其不方便的,我们的编码在大部分情况下都会违反其默认规则,此时就需要我们使用注解来让MyBatisPlus框架能够正确映射实体类和数据库表的关系。

@TableName

我们可以使用@TableName注解来指定操作的数据库表名,假如我们的实体类类名为Emp,但是想要操作的数据库表为tb_emp,按照MyBatisPlus框架默认规则是肯定无法正确进行映射的,此时我们就可以在Emp类上使用@TableName注解,来手动指定需要操作的表名:

package com.wzb.pojo;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.time.LocalDate;
import java.time.LocalDateTime;@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_emp")
public class Emp {private Integer id;private String username;private String password;private String name;private Integer gender;private String phone;private String image;private Integer job;private LocalDate entryDate;private Integer deptId;private LocalDateTime createTime;private LocalDateTime updateTime;
}

在类上使用@TableName注解就可以手动设置需要操作的表,此时再使用BaseMapper指定泛型为EmpMyBatisPlus框架就知道要操作tb_emp这一张表了。虽然有了@TableName注解,我们可以手动进行配置需要操作的表,但是请还是遵循Java开发的命名规范。

@TableId

我们可以使用@TableId注解来指定表中的主键字段信息,在默认情况下MyBatisPlus框架会将类中名为id的属性作为操作数据库表中的主键,但是我们也可以使用@TableId注解中的value属性来手动指定表中的主键字段信息:

@TableId(value = "emp_id")
private Integer id;

这样就可以手动指定表中主键。除此之外,还可以指定id生成的策略,在不指定id策略的时候,MyBatisPlus框架会使用默认的生成策略。

AUTO

AUTO策略使用数据库自增长id,使用该id策略,就会将id生成的任务交给数据库,数据库将根据已有数据的id进行自增长:

@TableId(value = "id", type = IdType.AUTO)
private Integer id;

可以使用type属性来指定id生成策略。

INPUT

INPUT策略,则需要用户手动输入id,否则将会报错(因为MyBatisPlus框架不会自动生成id而导致没有id):

@TableId(value = "id", type = IdType.INPUT)
private Integer id;
ASSIGN_ID

ASSIGN_ID策略是MyBatisPlus框架默认id策略,是基于雪花算法自动计算id并生成id,当不指定id策略时,就会使用该策略生成id

@TableId(value = "id", type = IdType.ASSIGN_ID)
private Integer id;

@TableField

我们可以使用@TableField注解来指定表中的普通字段信息,比如:

@TableField("name")
private String username;

此时,实体类中的username属性就可以成功映射到数据库表中的name字段,但是@TableField注解一般使用比较少,因为开发时一般严格按照驼峰命名法,并且数据库表字段值和实体类属性值应该要一一对应,所以说使用MyBatisPlus框架默认的规则即可完成映射。

总结

MyBatisPlus框架提供了实体类和数据库表的默认规则,但开发者也可以通过一些常用的注解自己配置实体类和数据库表的映射规则,在一般情况下,严格按照开发规范进行开发,则无需进行额外的配置,MyBatisPlus框架的默认规则就可以实现需求;但通过灵活的注解(如 @TableName@TableId)开发者可以高效应对特殊需求。除了注解配置以外,MyBatisPlus框架还提供了全局配置供开发者进行配置,全局配置且听下文分解。

http://www.xdnf.cn/news/9824.html

相关文章:

  • 【MATLAB例程】基于脉冲雷达的TDOA目标定位,适用于四个锚点、三维空间的环境,附代码下载链接
  • 亚远景-ASPICE与ISO 26262:适用范围与应用场景的差异分析
  • 国产化redis 替代产品tendis 安装
  • 1Panel v2 首发体验(alpha)
  • Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决
  • 项目管理进阶:精读78页 IPD+CMMI+Scrum一体化研发管理解决方案【附全文阅读】
  • 初学python的我开始Leetcode题10-1
  • 递归与递推算法详解(C++版)教案——以斐波那契数列为例
  • MySQL高可用革命:Orchestrator实现零干预的故障转移与智能拓扑管理
  • 自动驾驶与智能交通:构建未来出行的智能引擎
  • LangFuse:开源LLM工程平台的革新实践
  • SpringBoot使用ThreadLocal保存登录用户信息
  • 搭建frp内网穿透
  • 每日c/c++题 备战蓝桥杯(洛谷P1481 魔族密码 题解)
  • MySQL索引:原理、类型与使用指南
  • 高速收发器
  • 67常用控件_QTreeWidget的使用
  • 多部手机连接同一wifi的ip一样吗?如何更改ip
  • SQL的查询优化
  • 云计算服务模式全解析:IaaS、PaaS、SaaS及其扩展
  • 易学探索助手-个人记录(十三)
  • 133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能
  • 算法题(158):牛栏预定
  • 【Java orm框架对比】十四新增gaarason/database-all框架对比
  • 解释滚动更新的过程,如何通过`kubectl set image`命令触发更新? 版本回滚的命令是什么?如何查看Deployment的更新历史?
  • 打印机无法远程打印?可以本地打印,本地网络打印机设置给异地使用
  • LangChain【1】之认识框架和简单体验
  • LeetCode Hot100(多维动态规划)
  • vmware虚拟机固定IP
  • const 用法总结