zoukankan      html  css  js  c++  java
  • 【Mybatis-Plus进阶学习(三)】自动填充

    我们在实际开发中有些字段的值使用手动输入十分的不方便,例如创建时间,更改时间等。有的朋友说可以使用默认值,这是可以的,但同时具有局限性。这时候就需要使用MP的自动填充功能。

    在本篇博客中,如果你遇到了乱码问题,可以在数据库连接池参数中添加如下属性,或者直接在数据库中更改编码方式。

    characterEncoding=UTF-8
    

    自动填充的简单使用

    第一步:字段添加注释

        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime createTime;
        @TableField(fill = FieldFill.UPDATE)
        private LocalDateTime updateTime;
    

    第二步:填充处理器

    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
        @Override
        public void insertFill(MetaObject metaObject) {
                setInsertFieldValByName("createTime", LocalDateTime.now(), metaObject);
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
                setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        }
    }
    

    注意:

    1. creatTime和updateTime是User类的属性不是数据库的字段
    2. setInsertFieldValByName和setUpdateFieldValByName方法不能放错位置,不然不生效。setFieldValByName()可以在随意放置

    自动填充优化

    如上例,虽然可以实现自动填充,但是无论数据库是否有createTime字段都会被填充,是对资源的浪费,所以我需要进行优化,让其在有createTime字段的时候进行自动填充,没有的时候不填充。同样更新也做了相应的修改。update时,变量中如果有updateTime相应的值,就使用输入的变量的值,如果没有,就是用LocalDateTime.now()生成并填入,具体代码如下:

    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
        @Override
        public void insertFill(MetaObject metaObject) {
            //数据库是否有这个字段,有就填充,没有就不填充
    //        boolean hasSetter = metaObject.hasSetter("createTime1");
            boolean hasSetter = metaObject.hasSetter("createTime");
            if (hasSetter) {
                setInsertFieldValByName("createTime", LocalDateTime.now(), metaObject);
            }
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            //updateTime
            Object updateTime = getFieldValByName("updateTime", metaObject);
            if (updateTime == null) {
                setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);
            }
        }
    }
    

    MetaObject是元对象,这里可以初步理解为被操作的数据源的对象,里面包括数据元的各种参数。

  • 相关阅读:
    Eclipse 快捷键
    计算机网络之读Internet网发展史 读后感
    计算机网络之读Internet网发展史 读后感
    动态加载布局的技巧
    二、JSP的3个编译指令,7个动作指令,9个内置对象
    【杭电】[2050]折线分割平面
    【杭电】[2050]折线分割平面
    【杭电】[2068]RPG的错排
    【杭电】[2068]RPG的错排
    【杭电】[4500]小Q系列故事——屌丝的逆袭
  • 原文地址:https://www.cnblogs.com/zllk/p/14239629.html
Copyright © 2011-2022 走看看