码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-10 00:57:14      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:glob   注解   image   handle   tao   封装   file   对象   integer   

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

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

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

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

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

标签:glob   注解   image   handle   tao   封装   file   对象   integer   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!