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)

相关推荐
用户2986985301412 分钟前
Java高效读取CSV文件的方法与分步实例
java·后端
一根甜苦瓜13 分钟前
Go语言Slice的一道骚题
开发语言·后端·golang
驰羽20 分钟前
[GO]Go语言泛型详解
开发语言·golang·xcode
NPE~20 分钟前
[手写系列]Go手写db — — 第五版(实现数据库操作模块)
开发语言·数据库·后端·golang·教程·手写系列·手写数据库
润 下22 分钟前
C语言——深入解析C语言指针:从基础到实践从入门到精通(二)
c语言·开发语言·经验分享·笔记·学习·程序人生
程序员卷卷狗24 分钟前
JVM实战:从内存模型到性能调优的全链路剖析
java·jvm·后端·性能优化·架构
Android-Flutter25 分钟前
kotlin - 正则表达式,识别年月日
java·kotlin
得物技术25 分钟前
线程池ThreadPoolExecutor源码深度解析|得物技术
java·编译器·dns
道可到28 分钟前
直接可以拿来的面经 | 从JDK 8到JDK 21:一次团队升级的实战经验与价值复盘
java·面试·架构
布伦鸽39 分钟前
C# WPF DataGrid使用Observable<Observable<object>类型作为数据源
开发语言·c#·wpf