MyBatis-Plus中自动填充功能的用法示例详解
心态还需努力呀 人气:0前言
有些时候我们可能会有这样的需求,插入或者更新数据时,希望有些字段可以自动填充数据,比如密码、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中的自动填充功能在实际中也是经常使用的知识点,大家要多多练习掌握,就像开发中时用户输入的数据肯定不会是对应数据库表的全部字段,有些字段都需要系统自动填充值,这里就需要自动填充功能来完成。步骤也很简单,多多练习两遍就能够掌握并且熟练运用其知识点。
加载全部内容