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

Mybatis-plus自动填充starter

时间:2023-08-13 15:32:33浏览次数:27  
标签:metaObject 填充 plus Mybatis import autoFillProperties com public starter

Mybatis-plus自动填充starter

前言:

上一篇我们说了自动填充,现在利用spring-boot把它抽象为一个组件,可以在项目中共同使用

工具

  • IDEA 2021.1.1
  • MAVEN 3.6.3
  • JDK1.8
  • spring-boot 2.1.3.RELEASE

配置

一、引入依赖

<!-- mybatis-plus start 勿需再引入mybatis依赖了 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.0</version>
    </dependency>
<!-- 配置提示 可有可无 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

二、配置自动填充的字段与启用

package com.ypshengxian.mybatisplus.properties;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 描述:自动填充配置
 * Created on 2021/7/15 09:34
 * @author zjw
 */
@Setter
@Getter
@ConfigurationProperties(prefix = "ypsx.mybatis-plus.auto-fill")
public class MybatisPlusAutoFillProperties {
    /**
     * 是否开启自动填充字段
     */
    private Boolean enabled = true;
    /**
     * 是否开启了插入填充
     */
    private Boolean enableInsertFill = true;
    /**
     * 是否开启了更新填充
     */
    private Boolean enableUpdateFill = true;
    /**
     * 创建时间字段名
     */
    private String createTimeField = "gmtCreate";
    /**
     * 更新时间字段名
     */
    private String updateTimeField = "gmtModified";
}

三、实现元对象处理器接口:MetaObjectHandler

  • 实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
package com.ypshengxian.mybatisplus.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.ypshengxian.mybatisplus.properties.MybatisPlusAutoFillProperties;
import org.apache.ibatis.reflection.MetaObject;

import java.util.Date;

/**
 * 描述:自动填充
 * Created on 2021/7/14 18:58
 * @author zjw
 */
public class MyMetaObjectHandler implements MetaObjectHandler {
    private final MybatisPlusAutoFillProperties autoFillProperties;

    public MyMetaObjectHandler(MybatisPlusAutoFillProperties autoFillProperties) {
        this.autoFillProperties = autoFillProperties;
    }

    /**
     * 是否开启了插入填充
     */
    @Override
    public boolean openInsertFill() {
        return autoFillProperties.getEnableInsertFill();
    }

    /**
     * 是否开启了更新填充
     */
    @Override
    public boolean openUpdateFill() {
        return autoFillProperties.getEnableUpdateFill();
    }

    /**
     * 插入填充,字段为空自动填充
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        Object createTime = getFieldValByName(autoFillProperties.getCreateTimeField(), metaObject);
        Object updateTime = getFieldValByName(autoFillProperties.getUpdateTimeField(), metaObject);
        if (createTime == null || updateTime == null) {
            Date date = new Date();
            if (createTime == null) {
                setFieldValByName(autoFillProperties.getCreateTimeField(), date, metaObject);
            }
            if (updateTime == null) {
                setFieldValByName(autoFillProperties.getUpdateTimeField(), date, metaObject);
            }
        }
    }

    /**
     * 更新填充
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName(autoFillProperties.getUpdateTimeField(), new Date(), metaObject);
    }
    // // TODO: 2021/7/14 测试?
    // @Override
    // public void insertFill(MetaObject metaObject) {
    //     this.strictInsertFill(metaObject, "gmtCreate", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
    //     this.strictInsertFill(metaObject, "gmtModified", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
    // }
    //
    // @Override
    // public void updateFill(MetaObject metaObject) {
    //     this.strictUpdateFill(metaObject, "gmtModified", Date.class, new Date()); // 起始版本 3.3.0(推荐)
    // }
}

四、配置AutoConfigure注入 MetaObjectHandler Bean

package com.ypshengxian.mybatisplus.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.ypshengxian.mybatisplus.properties.MybatisPlusAutoFillProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

/**
 * 描述:mybatis-plus配置
 * Created on 2021/7/15 09:37
 * @author zjw
 */
@EnableConfigurationProperties(MybatisPlusAutoFillProperties.class)
public class MybatisPlusAutoConfigure {

    @Autowired
    private MybatisPlusAutoFillProperties autoFillProperties;


    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = "ypsx.mybatis-plus.auto-fill", name = "enabled", havingValue = "true", matchIfMissing = true)
    public MetaObjectHandler metaObjectHandler() {
        return new MyMetaObjectHandler(autoFillProperties);
    }
}

五、默认生效

resources资源文件夹下新建META-INF/spring.factories,内容如下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ypshengxian.mybatisplus.config.MybatisPlusAutoConfigure

标签:metaObject,填充,plus,Mybatis,import,autoFillProperties,com,public,starter
From: https://blog.51cto.com/u_11906056/7067573

相关文章

  • mybatis框架
    mybatis框架1、mybatis框架介绍MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS......
  • mybatisplus
    注解@TableId(type=IdType.AUTO)表示主键自增@TableField(value="create_time")表示字段"()"里的value对应数据库的表名@TableLogic逻辑删除mapper接口创建service接口创建serviceImpl类创建配置分页插件:创建一个类,在类上面标注注解并在类中实现官方给的方法@C......
  • java.lang.NoSuchMethodError: com.baomidou.mybatisplus.core.toolkit.StringUtils.i
    1、原因这是由于两个版本不一致导致的;<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version&......
  • c、SQLPlus命令
    SQL*Plus命令SQL*Plus与数据库的交互Oracle的SQL*Plus是与Oracle进行交互的客户端工具,在SQL*Plus中,可以运行SQL*Plus命令与SQL*Plus语句,主要介绍SQL*Plus命令。SQL*Plus是一个基于C/S两层结构的客户端操作工具,包括客户层(即命令行窗口)和服务器层(即数据库实例),这两层既可以在一......
  • mybatis plus所需配置
    yml配置mybatis-plus:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl#日志mapper-locations:classpath:mapper/*.xml#映射type-enums-package:com.dxc.zeno.enums#枚举类配置类@Configuration@MapperScan("com.dxc.z......
  • 第一个Mybatis程序
    1、首先创建一个数据库CREATEDATABASEmybatis;CREATETABLE`user`(`id`INT(20)NOTNULLPRIMARYKEY,`name`VARCHAR(30)NOTNULL,`pwd`VARCHAR(30)NOTNULL)ENGINE=INNODBDEFAULTCHARSET=utf8;INSERTINTO`user`(`id`,`name`,`pwd`)VALUES(1,'张三'......
  • Mybatis如何添加映射接口和映射文件?
    Mybatis是一种半ORM框架,需要我们手动编写SQL语句。在启动时,它会将SQL语句等信息读取到内存中,便于操作数据库时进行参数解析、执行SQL和结果封装。使用过Mybatis的都知道,它有两种方式编写SQL语句:xml映射文件映射接口方法上的注解在启动Mybatis时,可以通过Configuration的addM......
  • Mybatis简介
    1.1、Mybatis简介●MyBatis是一款优秀的持久层框架●它支持定制化SQL、存储过程以及高级映射。●MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。●MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POjO(PlainOldJavaObjects,普通老式Java......
  • MyBatis 实例
    MyBatis简介MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java......
  • 统一门户|WorkPlus整合内部应用,构筑企业统一的智能工作入口
    国家“十四五”发展规划中指出加强数字化发展,支持企业建设一体化数字平台,全面整合企业内部系统,提升产业链上下游协同效率。而在数字化经济浪潮下,企业和各类组织随着业务规模、人员规模的不断扩大,在信息化办公中存在不少弊端:·系统入口不统一,员工需要记多套账号密码,多个系统来回切......