【代码备忘录】Mybatis Plus自动填充技术

您所在的位置:网站首页 数据库自动建表 【代码备忘录】Mybatis Plus自动填充技术

【代码备忘录】Mybatis Plus自动填充技术

2023-04-19 10:26| 来源: 网络整理| 查看: 265

Mybatis Plus YYDS

絮絮叨叨

在开发过程中,经常会遇到一些需要在数据库表中自动写入特定字段值的情况,例如创建时间、更新时间等,这时候MybatisPlus的自动填充功能就派上用场了。在本文中,左羊将介绍MybatisPlus自动填充的技术原理以及如何在项目中使用。

首先,咱们需要了解自动填充是如何工作的。MybatisPlus通过MetaObject对象来实现对数据库表的字段进行自动填充。当咱们插入数据时,MybatisPlus会使用MetaObject对象检测实体中的特定字段,如果检测到有需要填充的字段,它就会根据特定的逻辑自动填充这些字段。

改改就能抄的代码

下面是一个示例代码,演示了如何使用MybatisPlus进行自动填充。在这个示例中,咱们将创建一个Hero实体,包括创建者、创建时间、更新者、更新时间等属性,然后使用MybatisPlus的自动填充功能为这些属性赋值。

实体类 @Data @TableName("Hero") public class Hero { @TableId(type=IdType.AUTO) private Long id; private String name; @TableField(fill = FieldFill.INSERT) private Long createBy; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.UPDATE) private Long updateBy; @TableField(fill = FieldFill.UPDATE) private LocalDateTime updateTime; } 复制代码 Handler public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createBy", Long::valueOf, "zuoyang"); this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateBy", Long::valueOf, "zuoyang"); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); } } 复制代码 Config @Configuration @MapperScan("com.zuoyang.mapper") public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // add PageInterceptor PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); paginationInnerInterceptor.setDbType(DbType.MYSQL); interceptor.addInnerInterceptor(paginationInnerInterceptor); return interceptor; } @Bean public MyMetaObjectHandler myMetaObjectHandler() { return new MyMetaObjectHandler(); } } 复制代码

在这个示例中,咱们创建了一个User实体,其中包含了创建者、创建时间、更新者、更新时间等属性。咱们使用@TableField(fill = FieldFill.INSERT) 和@TableField(fill = FieldFill.UPDATE)注解来标记需要自动填充的属性。

接下来,咱们创建了一个名为MyMetaObjectHandler的对象,并实现了MetaObjectHandler接口,该对象将根据自定义逻辑为咱们的实体属性自动填充值。在这个示例中,咱们为createBy属性的初始值提供了一个默认值“zuoyang”,并使用LocalDateTime::now方法为createTime和updateTime属性提供当前时间。

最后,咱们在配置类中注册了这个MyMetaObjectHandler对象。在进行数据库操作时,MybatisPlus会生成一个MetaObject对象并将这个对象传递到MyMetaObjectHandler中,MyMetaObjectHandler将根据实体属性需要自动填充的规则来自动填充这些属性。

@TableField用法 注解名称解释@TableField(exist = false)标记这个属性并非数据库表中的字段,但实体类需要这个属性,例如在一些特殊逻辑中需要用到。@TableField(value = "column_name")映射实体属性和数据库表中的字段名,value参数即为数据库表中的字段名。@TableField(value = "column_name", el = "role.id")映射实体属性和一个 SQL 片段,用法类似于 XML 中的 占位符,其中el参数可写成{} 占位符,其中 el 参数可写成 占位符,其中el参数可写成{} 或 #{},这里的示例中将在 SQL 语句中使用 role.id 的值作为 column_name 的值。@TableField(value = "column_name", condition = SqlCondition.LIKE)指定实体类基本的 SQL 操作中 WHERE 条件的运算符,默认情况下为 =,例如这个示例中是用 LIKE 运算符进行模糊查询。@TableField(select = false)当进行查询操作时,标记这个字段不出现在 SQL 语句的 SELECT 字段中,同时 EntityWrapper 和 LambdaWrapper 会忽略这个字段。@TableField(fill = FieldFill.INSERT)指定需要自动填充的字段,在 INSERT 操作时自动设置默认值或者填充当前时间。@TableField(fill = FieldFill.UPDATE)指定需要自动填充的字段,在 UPDATE 操作时自动设置默认值或者填充当前时间。@TableField(fill = FieldFill.INSERT_UPDATE)指定需要自动填充的字段,在 INSERT 或者 UPDATE 操作时自动设置默认值或者填充当前时间。 参考文献: Mybatis Plus 官方文档 https://baomidou.com/ 复制代码


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3