前言
有些时候我们可能会有这样的需求,插入或者更新数据时,希望有些字段可以自动填充数据,比如密码、version、注册时默认的用户角色等。在MP中提供了这样的功能,可以实现自动填充功能。
下面例子的场景假设:如果用户在注册时,只会输入基本的用户信息,这是后台有个字段为user_role用户角色,普通用户注册的话都会自动以USER值设置,但这个值不是用户输入的,需要自动填充。
下面我们就根据这个假设来看看该如何实现这一功能。
一、添加@TableField注解
在持久化User类中,将角色对应的属性上添加注解@TableField(fill= FieldFill.INSERT),INSERT用来插入数据时进行填充。如下代码所示:
//角色
@TableField(fill= FieldFill.INSERT)//插入数据时进行填充
private String userRole;
当然,不只是在插入时可自动填充。还可设置在修改时,或者插入修改时都自动填充的操作。如下图所示:
二、编写MyMetaObjectHandler
我们需要编写MyMetaObjectHandler类,在类下需要继承MetaObjectHandler接口实现其方法,在方法内编写要自动填充的字段。
因为我们是以添加为例,所以这里就直接在insertFill下编写自动填充的内容,如果增加操作传下来的属性值为null的话,就要自动让该属性值设置为USER角色。如果有值的话我们不做操作。所以接下来只需要判断字段是否为空就可以。
代码如下所示:
package cn.imust.mp.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Object userRole=getFieldValByName("userRole",metaObject);
if(null == userRole){
//字段为空,可以进行填充
setFieldValByName("userRole","USER",metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
}
}
三、对自动填充进行测试
在测试类下编写testInsert()方法,传值时就不需要设置userRole的值,添加完成后查看是否会自动填充(即查看userRole是否为USER值)
//测试添加方法
@Test
public void testInsert(){
User user=new User();
user.setUserName("哈哈111");
user.setUserEmail("12433");
// user.setUserRole("ADMIN");
user.setUserStatus("0");
user.setUserPassword("12344");
// 表中没有字段
user.setHobby("足球");
//受影响的行数 count
int count = userMapper.insert(user);
if(count>0){//添加成功
//输出所有数据
testSelectList();
}else {//添加失败
System.out.println("添加失败~");
}
}
四、运行效果图
执行上述的测试代码,得到如下图所示的效果图,添加成功在查询会发现userRole的值会被自动填充成上面设置的USER即普通用户的值。 说明测试成功~
总结
MP中的自动填充功能在实际中也是经常使用的知识点,大家要多多练习掌握,就像开发中时用户输入的数据肯定不会是对应数据库表的全部字段,有些字段都需要系统自动填充值,这里就需要自动填充功能来完成。步骤也很简单,多多练习两遍就能够掌握并且熟练运用其知识点。
到此这篇关于MyBatis-Plus中自动填充功能的用法的文章就介绍到这了,更多相关MyBatis-Plus自动填充内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!