浅谈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);
    }
}

原文地址:https://www.cnblogs.com/jayhou/p/9825854.html

时间: 2024-10-16 13:10:49

浅谈MyBatis-Plus学习之公共字段自动填充的相关文章

SpringBoot-Mybatis_Plus学习记录之公共字段自动填充

一.应用场景 平时在建对象表的时候都会有最后修改时间,最后修改人这两个字段,对于这些大部分表都有的字段,每次在新增和修改的时候都要考虑到这几个字段有没有传进去,很麻烦.mybatisPlus有一个很好的解决方案.也就是公共字段自动填充的功能.一般满足下面条件的字段就可以使用此功能: 这个字段是大部分表都会有的. 这个字段的值是固定的,或则字段值是可以在后台动态获取的. 常用的就是last_update_time,last_update_name这两个字段. 二.配置MybatisPlus 导包:

浅谈设计模式的学习(下)

时间过得真快啊,不知不觉又要周末了,借这个周末时间.把<浅谈设计模式的学习(下)>补上吧. 在<浅谈设计模式的学习(中)>中,说到了保持抽象的思维.接下来说一下第四点,做一个分享,也记录一下自己的学习历程. 4.学习设计模式,就不要把它看的太认真    设计模式是一个编程思想,它不是具体的代码套路.举个例子说明一下: 由于家传,接触到了一些中国的传统武术.当我与那些不懂传统武术的人交流的时候,他们总是认为中国的传统武术都是些套路.花架子,只是用来好看.在他们认为,两人打架,别人出拳

浅谈设计模式的学习(中)

在<浅谈设计模式的学习(上)>中我说到了设计模式的基石-----抽象思维.为什么需要抽象思维呢?因为越抽象就越不容易出错,就像有些领导人说话:坚持改革开放.但怎么算坚持改革开放呢,没有具体的标准,因事而异,所以就不容易违背这个坚持改革开放的原则了. 3.学习设计模式,要保持抽象的思维     什么是抽象思维呢?真的不好说,抽象的东西往往难以说明白,听了也难以搞明白,还是通过具体的例子来说吧 有这么一个学生请假的场景,如果请假时间一天以内则有班长批准就可以了,三天以内则需要老师批准,超过三天就得

浅谈设计模式的学习(上)

作为一个开发人员,能写出一个漂亮可扩展的代码,绝对是一件令人愉快的事情.那设计模式就是一门必修课! 本文就自己学习设计模式的一点经历做一个记录. 本人在读大学时,为了学习设计模式就买了一本<java与模式>的数据,书籍有一千多页很重.而且价格不菲.没办法,花那么多钱买的不看岂不浪费.于是每天早上读一章,坚持几个月我终于读完了.这几个月真是煎熬啊,几个月下来,回忆一下似乎自己真得也没收获到什么,很悍然啊.难道是书籍不好吗还是我读的不认真?其实在我现在看来都不是.而为什么读完了却什么也没收获到呢?

【数学教学论文】浅谈小学生数学学习兴趣的培养

浅谈小学生数学学习兴趣的培养 作者:刘亚儒 摘要:古代教育家朱熹曾说:"教人未见其兴趣,必不乐学."由此可见,兴趣的培养在教学过程中至关重要,有利于提高数学课堂的教学效率和学生的学习质量.因此,本文对如何培养学生数学学习兴趣进行了进一步探讨. 关键词:小学生:数学:兴趣培养 一.兴趣在小学生数学学习中的重要性 孔子说过:"知之者不如好之者,好之者不如乐之者."所谓"乐",其实就是我们所说的"喜欢",即兴趣.学习兴趣是学生学习的

浅谈Mybatis(一)

一.MyBatis引言 1.基本概念 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github.MyBatis是一个持久层框架,完成是对数据库的访问和操作. 2.优点 解决了JDBC访问数据库过程中存在的问题,他是对原有JDBC技术的封装. a.大量的代码冗余. b.手工处理ORM. c.没有对访问数据进行优化(没有cach

浅谈Mybatis通用Mapper使用方法_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 对单表进行增删改查是项目中不可避免的需求,Mybatis的通用Mapper插件使这些操作变得简单 添加maven依赖 在对应工程的pom.xml文件中添加 <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1

浅谈mybatis中的#和$的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为ord

浅谈MyBatis 标签

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. 以上是MyBatis的一个概括:一下列出MyBatis常用标签 <insert> 负责MyBatis添加操作,默认返回影响行数 <delete> 负责MyBatis删除操作,默认返回影响行数 <update> 负责MyBatis修改操作,默