那些年我们一起学过的Mybatis-Plus的常用注解(12个)

网友投稿 1136 2022-05-30

一、前言

最近学习了mybatis-plus,现在带大家来回顾一下在学习的过程中,我们会经常使用哪些注解,这些注解具有哪些功能?如何使用这些注解?特别适合新手的学习以及老手的复习~

废话不多说,咱们速速开始吧!

二、mybatis-plus简介

MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

愿景是成为 MyBatis 最好的搭档!

官方地址:https://baomidou.com/

文档发布地址:https://baomidou.com/pages/24112f

三、常用注解(12个)

那些年,我们一起学过的Mybatis-Plus的常用注解(12个)

1、@MapperScan

@SpringBootApplication @MapperScan("com.cabbage.mapper") public class Mybatisplus01Application { public static void main(String[] args) { SpringApplication.run(Mybatisplus01Application.class, args); } }

结合代码和图片,小伙伴们估计可以猜出来:注解@MapperScan是用来扫描mapper的映射文件的,只有使用它之后,我们才能够使用官方提供的各种方法。

2、@Mapper

@Mapper @Repository public interface UserMapper extends BaseMapper { /** * 根据id查询到map集合 * @param id * @return */ Map selectMapById(Long id); }

为什么第二个我会介绍这个注解呢?是因为@Mapper作用于数据库中的实体类之后,就不需要再次写注解@MapperScan,他们之间的区别就是@Mapper只能映射一个实体类,而@MapperScan可以映射整个包下的实体类,范围更广,操作更简便。

3、@TableName

先看看如下代码:

@Data //设置实体类对应的表名 @TableName("t_user") public class User { @TableId(value = "id",type = IdType.AUTO) private Long uid; @TableField(value = "name") private String name; private Integer age; private String email; @TableField(value = "is_deleted") @TableLogic private Integer isDeleted; }

大家都知道,当实体类类型的类名和要操作的表的表名不一致时,就会报错,而注解@TableName就可以帮助我们解决这个问题。我的数据库表名是t_user,实体类名是User,只需要在类名上写入@TableName("t_user")就可以了

4、@Data

这个注解也极大的简化了我们的开发,为什么这样说呢?是因为,使用这个注解,就可以省略getter()、setter()、toString()、重写该类的equals()和hashCode()方法,这样一听,是不是很吃惊呢?

5、@TableId

MyBatis-Plus在实现增删改查时,会默认将id作为主键列,并在插入数据时,默认

基于雪花算法的策略生成id,这个雪花算法在这里就不明讲了。

当使用@TableId(value = "id")语句时,若实体类和表中表示主键的不是id,而是其他字段,例如代码中的uid,MyBatis-Plus会自动识别uid为主键列,否则就会报这样的错误:

当使用@TableId(value = "id",type = IdType.AUTO)语句时,代表着使用数据库的自增策略,

注意,该类型请确保数据库设置了id自增,否则无效!

当然呢,@TableId的功能,也可以写在application.yml配置文件中,配置如下:

mybatis-plus: global-config: banner: false db-config: # 配置MyBatis-Plus操作表的默认前缀 table-prefix: "t_" # 配置MyBatis-Plus的主键策略 id-type: auto # 配置MyBatis日志 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

6、@TableField

MyBatis-Plus在执行SQL语句时,要保证实体类中的属性名和表中的字段名一致,否则就会报错,语句@TableField(value = "is_deleted")代表着让数据库表中is_deleted与实体类中isDeleted字段名一样。

注意:

若实体类中的属性使用的是驼峰命名风格,而表中的字段使用的是下划线命名风格

例如实体类属性userName,表中字段user_name,此时MyBatis-Plus会自动将下划线命名风格转化为驼峰命名风格

若实体类中的属性和表中的字段不满足上述条件,例如实体类属性name,表中字段username,此时需要在实体类属性上使用@TableField("username")设置属性所对应的字段名

7、@TableLogic

在讲这个注解之前,我们先认识一下逻辑删除。

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据

逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

使用场景:可以进行数据恢复

在我的数据库表中,is_delete为1时,代表着逻辑上的删除,is_delete为0时,表示没有删除

注解@TableLogic的使用,就代表着该类中的属性是逻辑删除的属性

注意:

在测试逻辑删除的时候,真正执行的是修改UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0

测试查询功能,被逻辑删除的数据默认不会被查询SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0

在学习mybatis-plus分页插件的时候,我们需要配置-,看代码:

@Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor (new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }

8、@Configuration

这个注解相信大家已经见过很多次了,可能都有些不耐烦了,但是我还是要在这里提一下,使用该注解的类代表着是一个配置类,该类本身也是一个bean。也可以在该类中加载bean,使用@Bean注解

9、@Bean

注解@Bean表示的是将方法中的对象注入到spring容器中,以后方便于之后在容器中拿出对象,简化开发。常与@Configuration注解一起使用,相信大家也经常见到此注解,这里也不多讲了~

既然讲到了分页插件,那就简单的看看他们的基本使用方法吧

@Test void test01() { //设置分页参数 Page page = new Page<>(1, 3); userMapper.selectPage(page, null); //获取分页数据 List list = page.getRecords(); list.forEach(System.out::println); System.out.println("当前页:" + page.getCurrent()); System.out.println("每页显示的条数:" + page.getSize()); System.out.println("总记录数:" + page.getTotal()); System.out.println("总页数:" + page.getPages()); System.out.println("是否有上一页:" + page.hasPrevious()); System.out.println("是否有下一页:" + page.hasNext()); }

运行结果:

10、@Param

当我使用自定义的分页语句时:

@Mapper @Repository public interface UserMapper extends BaseMapper { /** * 通过年龄查询用户信息并分页 * @param page * @param age * @return */ Page selectPageByAge( Page page, @Param("age") Integer age); }

@Param是MyBatis所提供的,作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,简化了开发~

11、@Version

在我们学习乐观锁的时候,肯定见过如下代码:

@Data @TableName("t_product") public class Product { private Long id; private String name; private Integer price; @Version private Integer version; }

@Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //分页插件 interceptor.addInnerInterceptor (new PaginationInnerInterceptor(DbType.MYSQL)); //乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } }

而这个注解@Version就是实现乐观锁的重要注解,当要更新数据库中的数据时,例如价格,version 就会加 1,如果where语句中的version版本不对,则更新失败。

12、@EnumValue

@Getter public enum SexEnum { MALE(1, "男"), FEMALE(2, "女"); @EnumValue private Integer sex; private String sexName; SexEnum(Integer sex, String sexName) { this.sex = sex; this.sexName = sexName; } }

mybatis-plus: global-config: banner: false db-config: # 配置MyBatis-Plus操作表的默认前缀 table-prefix: "t_" # 配置MyBatis-Plus的主键策略 id-type: auto # 配置MyBatis日志 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 配置类型别名所对应的包 type-aliases-package: cabbage.pojo # 配置扫描通用枚举 type-enums-package: cabbage.pojo

而注解@EnumValue所标识的属性值会存储到数据库,相当于语句INSERT INTO t_user ( username, age, sex ) VALUES ( ?, ?, ? )

Parameters: Enum(String), 20(Integer), 1(Integer)

四、总结

好了,各位小伙伴们,mybatis-plus的常用注解讲解的差不多了,相信大家已经感受到国产框架的方便支持了,希望大家积极支持。如果感觉博主写的还不错的话,可以给博主三连支持哦~~

MyBatis

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:EXCEL表格中的人口数据如何转换成饼形图
下一篇:OpenCV计算机图像处理 —— 凸性缺陷 + 点多边形测试 + 形状匹配 + 轮廓分层与cv.findContours()
相关文章