首页 > 其他分享 >mybatis-plus自动填充

mybatis-plus自动填充

时间:2022-10-09 16:57:53浏览次数:47  
标签:metaObject users 填充 usersVo Date plus mybatis new

在实际开发中创建时间与修改时间是必不可少的,新增时间的时候我们常常使用set方法把时间添加进去,

当然这种方法也是可以的,一次两次还是,要是n次的话就有些影响性能了。程序员讲究的是封装,封装好以后拿来用就行,多省事。

 

1.为需要自动填充的属性添加注解@TableField

提供了4种填充策略:

DEFAULT,默认不处理,INSERT,插入填充字段,UPDATE,更新填充字段,INSERT_UPDATE,插入和更新填充字段。

 

比如说新增数据时我需要自动添加创建时间,在该实体类上加上注解@TableField

/**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

 

编辑时自动填充修改时间

   /**
     * 修改时间
     */
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

 

2.实现字段填充控制器,编写自定义填充规则
实现 MetaObjectHandler 接口,实现 insertFill 和 updateFill 方法,此处的 create_time 和update_time字段需要插入时填充值, 只有 update_time 字段在修改时需要填充,所以策略如下。
需要将自定义填充控制器注册为组件
/**
 * mp自动填充组件
 *
 * @author : chenKeFeng
 * @date : 2022/10/9 15:40
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ...");
        //根据属性名字设置要填充的值
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start insert fill ...");
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

这里的是createTime,updateTime就是你实体类对应的字段

 

接下来测试
 @Test
    void test01() {
        UsersVo usersVo = new UsersVo();
        usersVo.setUserName("aa");
        usersVo.setPassword("12345678");
        usersVo.setScore(33);
        Users users = new Users();
        BeanUtils.copyProperties(usersVo, users);

        usersMapper.insert(users);
    }

新增数据后创建时间不需要set也会自动新增了

 

 @Test
    void test02() {
        Users users = new Users();
        LambdaUpdateWrapper<Users> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(Users::getId, 18);
        users.setUserName("abc");
        usersMapper.update(users, updateWrapper);
    }

编辑时自动更新修改时间

 

标签:metaObject,users,填充,usersVo,Date,plus,mybatis,new
From: https://www.cnblogs.com/ckfeng/p/16772740.html

相关文章

  • 直播系统搭建,设置样式(字体样式、行列宽高、对齐方式、边框、填充和渐变)
    直播系统搭建,设置样式(字体样式、行列宽高、对齐方式、边框、填充和渐变)1.字体样式 fromopenpyxlimportWorkbookfromopenpyxl.stylesimportFontwb=Workbook()ws......
  • spring boot项目使用mybatis-plus代码生成实例
    前言mybatis-plus官方地址https://baomidou.commybatis-plus是mybatis的增强,不对mybatis做任何改变,涵盖了代码生成,自定义ID生成器,快速实现CRUD,自动分页,逻辑删除等功能......
  • MyBatis
    MyBatis是一个开源、轻量级的数据持久化框架学习文档:https://www.cnblogs.com/fire-dong/p/13414797.html mybatis工作流程:-编写核心配置文件,环境信息,日志,缓存,Mapper......
  • spring boot项目使用mybatis-plus代码生成实例
    前言mybatis-plus官方地址https://baomidou.commybatis-plus是mybatis的增强,不对mybatis做任何改变,涵盖了代码生成,自定义ID生成器,快速实现CRUD,自动分页,逻辑删除等功......
  • Mybatis的返回值类型resultMap
    Mybatis的查询结果除了可以设置为resultType以外,还可以设置为resultMap.1.方式一:把resultType的值设置为Mapmapper文件:<selectid="selectReturnMap"resultType="j......
  • Mybatis的返回值类型resultType
     resultType在select查询语句当中都需要返回值类型,mybatis的返回值类型就reulstType和resultMap两种。resultType的mapper示例(Mybatis的xml配置文件):resultType是Jav......
  • Mybatis的#和$的区别
    1.#:占位符,告诉mybatis使用实际的参数值代替。并使用PreparedSatement对象执行sql语句,#{...}代替sql语句的"?"。这样更安全,更迅速,也是通常的做法。mapper文件<select......
  • Mybatis传递参数的各种方式:简单类型,@Param,map,java对象等等
    本文演示了给mybatis的mapper文件当中的SQL语句传递参数或者参数值的各种方式.xml格式mapper文件:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapper......
  • MyBatis的三种分页方式
    一、Limit分页<select id="getUserInfo1" parameterType="map" resultType="dayu">    select * from user    <if test="startPos!=null and pageSize!......
  • MyBatis框架:第三章:传统方式mybatis的增,删,改,查实现
    传统方式mybatis的增,删,改,查实现准备工作创建javaProject项目,建库建表插入数据,到数据库中执行,导入jar包添加mybatis的核心jar添加mysql数据库连接驱动添加log4j日记需......