MyBatisPlus理解

MyBatisPlus是mybatis的增强,mybatis是数据库持久化的框架,但mybatisplus并不是替代mybatis,而是相辅相成的关系

MyBatisPlus不会对以前使用mybatis开发的项目进行影响,引入后仍然正常运行。

使用方法:

1.在引入了对应依赖mybatis-plus-boot-starter之后,该依赖包括了原本mybatis的依赖,所以原本的依赖完全可以删掉,之后就可以免除mybatis中,使用注解,xml定义单表查询的语句的操作。省时省力,只要直接调用mp中封装的大量方法即可,见名知意。

2.把项目中的mapper接口继承mp提供的父接口BaseMapper,因为这个接口中封装了大量方法,只有继承了该接口,才能调用mp的方法开简化书写sql语句,但是必须注意,继承接口时一定要指定泛型为你mapper对应实体类的类型,这样,mp才知道执行crud时,操作的是哪一个实体

3.mp是通过扫描实体类,然后通过反射,获取实体类的class文件,从而得到实体类对象,然后根据里面的对象转化为数据库表信息

有一些约定是:

实体类中驼峰命名的对象名转化为数据库表结构字段名的下划线命名法(userName -> user_name)

id名称的字段视为主键

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

按照上述配置,在运行时mp还会自动完成相应的转换,但有时遇到名称不按规范定义的情况,就需要手动进行配置,来让mp能够识别。

4.有3个常用的注解帮助mp来指定信息

@TableName:用于指定表名,当数据库表名称和实体类名称不一致,需要在实体类上通过来主键指定

例如数据库表名为:tb_user,实体类名称:User

就要在实体类User上添加注解@TableName("tb_user")

@TableId:用于指定表中主键的字段信息

主键属性一般设置为自动增长(AUTO)autoIncrement,但也可以设置其他属性

有INPUT:即通过实体类的set方法进行手动赋值

ASSIGN_ID:分配id,基于接口IdentifyGenerator的方法nextid来动态生成id,根据雪花算法实现,生成的id为20位Long类型整数

设置type为自增长后,添加id时可以不用指定id,系统会自动进行增加,但如果没有指定type类型

那么注意,此时默认类型是使用雪花算法自动分配的id值

@TableField:指定表中的普通字段信息

如果字段名不一致需要指定,和TableName用法类似

但是有时遇到实体类字段名是is开头的,且位布尔类型,因为mp底层转换时会忽略is,所以配置时相当于is开头的字段名与数据库字段名不一致,手动配置即可

再或者实体类对象名称是数据库的关键字,得配置转义字符以免发生错误,即加上一个点

有时实体类中存在数据库表结构中不存在的字段类型,那还有种特殊用法,即指定@TableField(exist = false)

相关推荐
知无不研30 分钟前
lambda表达式的使用(3)
开发语言·c++·lambda
数智化管理手记39 分钟前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
cfm_29141 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统2 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
C++ 老炮儿的技术栈2 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_448011162 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
小白学大数据2 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
0x533 小时前
Java网络编程(二)
java·服务器·网络
zlinear数据采集卡3 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Flittly3 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring