• 浅谈MyBatis-Plus学习之公共字段自动填充


    一、公共字段自动填充简介

    顾名思义:就是在更新或插入数据时,如果数据项没有设置,则会填充默认的值

    在这里就会涉及到元数据处理接口以及它的两个方法:

    com.baomidou.mybatisplus.mapper.MetaObjectHandler
    insertFill(MetaObject metaObject)  这个方法是插入数据时自动填充的逻辑方法
    updateFill(MetaObject metaObject)  这个方法是更新数据时自动填充的逻辑方法

    而MetaObject这个是MyBatis提供的一个封装对象的类,用于更好的获取对象的相关信息。

    二、公共字段自动填充的配置如下

    2.1、为需要自动填充的实体属性添加注解

    public class User {
         @TableId(type=IdType.AUTO)
         private Integer id;
         @TableField(fill=FieldFill.INSERT_UPDATE) //当插入和更新都会进行字段的填充
         private String name;
         @TableLogic  //标志是一个逻辑标识符号
         private Integer deleteFlag;
             
         // set methods
         // get methods

    @TableFiled这个注解的fill属性提供三种自动填充设置

    2.2、创建一个类继承MetaObjectHandler

    实现相应的方法,在插入和更新数据时如何自动填充的逻辑

    public class MyMetaObjectHandler extends MetaObjectHandler{
        
        //插入时自动填充的逻辑方法
        @Override
        public void insertFill(MetaObject metaObject) {
            // TODO Auto-generated method stub
            System.out.println("###调用insertFill方法###");
            
            Object obj = getFieldValByName("name", metaObject);
            if (obj == null) {
                setFieldValByName("name", "插入填充test", metaObject);
            }
        }
        //更新时自动填充的逻辑方法
        @Override
        public void updateFill(MetaObject metaObject) {
            // TODO Auto-generated method stub
            System.out.println("###调用updateFill方法###");
            Object obj = getFieldValByName("name", metaObject);
            if (obj == null) {
                setFieldValByName("name", "更新填充test", metaObject);
            }
        }
    }

    2.3、在applicationContext.xml配置文件中进行配置

    <!-- mybatis-plus全局配置策略 ,这样避免重复在每一个实体中使用注解进行配置-->
        <bean id="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
            <property name="dbColumnUnderline" value="true"></property>  <!-- 2.3版本后默认配置数据库下划线-->
            <!-- 指定数据库ID生成策略   0:数据库自增-->
            <property name="idType" value="0"></property>
            <!-- 指定数据库表前缀 -->
            <property name="tablePrefix" value="tbl_"></property>
            <!-- 注入处理器方法 -->
            <property name="metaObjectHandler" ref="myMetaObjectHandler"></property>
        </bean>
        <!-- 注入处理器的bean -->
        <bean id="myMetaObjectHandler" class="cn.hjj.mp.handler.MyMetaObjectHandler"></bean>

    2.4、测试代码如下

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:applicationContext.xml"})
    public class TestMetaObjectHandler {
        @Autowired
        private UserMapper userMapper;
        @Test
        public void testInsert() {
            User user = new User();
            user.setDeleteFlag(1);
            userMapper.insert(user);
        }
        
        @Test
        public void testUpdate() {
            User user = new User();
            user.setId(4);
            user.setDeleteFlag(1);
            userMapper.updateById(user);
        }
    }
  • 相关阅读:
    vue后台管理系统——权限管理模块
    vue后台管理系统——用户管理模块
    vue后台管理系统——主页布局
    vue后台管理系统——登录/退出功能
    vue后台管理系统
    kratos 日志请求响应记录
    composer 版本切换
    Nacos搭建并使用
    go micro 搭建微服务
    consul命令行参数
  • 原文地址:https://www.cnblogs.com/jayhou/p/9825854.html
Copyright © 2020-2023  润新知