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)

相关推荐
csdn_aspnet40 分钟前
C++ 扇形的面积(Area of a Circular Sector)
开发语言·c++
上位机_0x1 小时前
c#中添加visionpro控件(联合编程)
开发语言·数码相机·c#
小邓是个人才呀1 小时前
第二章:Android常用UI控件
android·java·ui
cykaw25901 小时前
QT中信号和事件的区别
开发语言·qt
摆烂仙君1 小时前
手搓四人麻将程序
开发语言·python
68岁扶墙肾透1 小时前
Java安全-Servlet内存马
java·安全·web安全·网络安全·系统安全·网络攻击模型
码农爱java1 小时前
Elasticsearch 深入分析三种分页查询【Elasticsearch 深度分页】
java·大数据·spring boot·后端·elasticsearch·全文检索
木易小熙2 小时前
chromedp -—— 基于 go 的自动化操作浏览器库
开发语言·golang·自动化
天天进步20152 小时前
C# Prism框架详解:构建模块化WPF应用程序
开发语言·c#·wpf
_extraordinary_2 小时前
Java 继承
java·开发语言·继承