Bootstrap

MybatisPlus常用注解分析

目录

一、MybatisPlus获取数据库信息的原理

 二、常用注解

1.概述

2.@TableName

3.@TableId

4.@TableField


一、MybatisPlus获取数据库信息的原理

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

在使用MybatisPlus时,要继承BaseMapper<?>,其中“?”为对应数据库表的实体类,比如数据库中有名为user的表,则它对应的实体类为User,使用MybatisPlus时,应继承BaseMapper<User>,如图:

接下来MybatisPlus将根据User实体类的信息作为数据库表信息。

其中遵循以下约定:

  1. 类名驼峰转下划线作为表名。比如有一个实体类叫做UserInfo,则转换成数据库表名为user_info(windows下Mysql数据库表名不区分大小写)
  2. 名为id的字段作为主键。
  3. 变量名驼峰转下划线作为表的字段名。比如updateTime变量转为表的的字段名为update_time。

根据这三个约定,此时MybatisPlus根据User类的信息,知道数据库中有一张名为user的表,其中的id字段为表的主键,其他字段还有:username、password、phone、info、status、balance、creat_time、update_time。

MybatisPlus根据这些信息,就可以帮我们生成sql语句,我们直接调用它提供的方法即可。

以上就是MybatisPlus自动帮我们实现增删改查的原理。

 二、常用注解

1.概述

在一中所讲的原理是遵循了约定大于配置的原则。也就是说,只要给出的实体类满足约定,就不需要我们进行手动配置,MybatisPlus会自动帮我实现增删改查功能。

但是如果我们的实体类不完全符合约定,就需要我们进行手动配置,自己去定义表名、字段名和主键名。

那如何自定义配置呢?

MybatisPlus为我们提供了一些注解来进行自定义配置。

接下来我讲介绍比较常用的三个注解。

2.@TableName

@TableName用来指定表名。

使用情况:比如说我们定义的实体类叫做User,但是真实的数据库表的名称叫做tb_user,此时已不符合约定,我们需要在类上加上@TableName("tb_user")注解。如图

这样MybatisPlus就可以通过注解找到这个类的真实表名。

3.@TableId

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

使用情况:当实体类里的作为主键的变量名与真实数据库的主键名不一致时,此时也不符合约定,我们需要在对应变量名上加上@TableId。比如tb_user表的主键名叫做data_id,则User实体类的id(代表主键)需要加上主键@TableId("data_id"),如图:

4.@TableField

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

使用场景:

1.成员变量名与数据库字段名不一致。

比如数据库的用户名字段名叫name,而User对应的成员变量名为username,此时需要进行注解,如图:

2.成员变量名以is开头并且是布尔值。

这种情况经过MybatisPlus的反射处理,会将is去掉作为变量名,这样就起不到驼峰转下划线的作用了。比如布尔类型的isMarried。经过MybatisPlus的反射处理,会把is去掉,将Married作为变量名,那它根据约定得到的字段名为married,而不是is_married。就会跟数据库的字段名不一致。所以也需要加上注解,如图:

3.成员变量名与数据库关键字冲突

比如我成员变量名叫做order,而order是数据库关键字,就会引发冲突。

解决方法:@TableField("转义"),将order通过转义字符处理来指定字段名,转义字符用``包裹,如@TableField("`order`"),如图:

4.成员变量不是数据库字段

如果成员变量所代表的字段在数据库中没有,而不通过注解处理,就会出错。

比如我user表中假设没有password这个字段,而我User类中有password这个成员变量,我需要在对应位置加上@TableField(exist=false),来表明我数据库中没有这个字段,如图

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;