开发者

MyBatis-Plus自动填充字段的详细教程

开发者 https://www.devze.com 2024-08-16 10:29 出处:网络 作者: IT小辉同学
目录1. 项目环境配置1.1 引入必要的依赖1.2 配置数据源2. 创建基础实体类3. 实现 MetaObjectHandler 接口3.1 创建 MyMetaObjectHandler 类3.2 配置生效4. 实体类继承 BaseEntity5. 处理数据插入与更新5.1 Service 层
目录
  • 1. 项目环境配置
    • 1.1 引入必要的依赖
    • 1.2 配置数据源
  • 2. 创建基础实体类
    • 3. 实现 MetaObjectHandler 接口
      • 3.1 创建 MyMetaObjectHandler 类
      • 3.2 配置生效
    • 4. 实体类继承 BaseEntity
      • 5. 处理数据插入与更新
        • 5.1 Service 层示例
      • 6. 验证自动填充功能
        • 7. 其他注意事项
          • 总结

            1. 项目环境配置

            首先,需要确保项目中已经集成了 Spring Boot 和 MyBATis-Plus。下面是一些基本的配置步骤:

            1.1 引入必要的依赖

            在 pom.XML 中添加 MyBatis-Plus 的依赖:

            <dependencies>
                <!-- MyBatis-Plus -->
                <dependency>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-boot-starter</artifactId>
                    <version>3.5.1</version>
                </dependency>
            
                <!-- 其他必要依赖 -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
                <!-- mysql 驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-Java</artifactId>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
            编程客栈

            1.2 配置数据源

            在 application.yml 或 application.properties 文件中配置数据库连接:

            spring:
              datasource:
                url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
                username: your_username
                password: your_password
                driver-class-name: com.mysql.cj.jdbc.Driver
            
            mybatis-plus:
              mapper-locations: classpath:/mapper/*.xml
              type-aliases-package: com.example.entity
              global-config:
                db-config:
                  id-type: auto
            

            2. 创建基础实体类

            为数据库中的表创建一个基础实体类 BaseEntity,在该类中定义创建时间和更新时间字段,并使用 MyBatis-Plus 的注解配置自动填充。

            package com.example.utils;
            
            import com.baomidou.mybatisplus.annotation.FieldFill;
            import com.baomidou.mybatisplus.annotation.TableField;
            import com.fasterxml.jackson.annotation.jsonIgnore;
            import com.fasterxml.jackson.annotation.JsonInclude;
            import lombok.Data;
            
            import java.io.Serializable;
            import java.util.Date;
            import java.util.HashMap;
            import java.util.Map;
            
            @Data
            public class BaseEntity implements Serializable {
            
                private static final long serialVersionUID = 1L;
            
                /**
                 * 搜索值(暂时忽略)
                 */
                @JsonIgnore
                @TableField(exist = false)
                private String searchValue;
            
                /**
                 * 创建者
                 */
                @TableField(fill = FieldFill.INSERT)
                private String createBy;
            
                /**
                 * 创建时间
                 */
                @TableField(fill = FieldFill.INSERT)
                pandroidrivate Date createTime;
            
                /**
                 * 更新者
                 */
                @TableField(fill = FieldFill.INSERT_UPDATE)
                private String updateBy;
            
                /**
                 * 更新时间
                 */
                @TableField(fill = FieldFill.INSERT_UPDATE)
                private Date updateTime;
            
                /**
                 * 请求参数(暂时忽略)
                 */
                @JsonInclude(JsonInclude.Include.NON_EMPTY)
                @TableField(exist = false)
                private Map<String, Object> params = new HashMap<>();
            
            }
            

            3. 实现 MetaObjectHandler 接口

            为了使 BaseEntity 中的自动填充注解生效,我们需要实现 MetaObjectHandler 接口,并将其配置为 Spring 的一个 Bean。

            3.1 创建 MyMetaObjectHandler 类

            package com.example.config;
            
            import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
            import org.apache.ibatis.reflection.MetaObject;
            import org.springframework.stereotype.Component;
            
            import java.util.Date;
            
            @Component
            public class MyMetaObjectHandler implements MetaObjectHandler {
            
              php  @Override
                public void insertFill(MetaObject metaObject) {
                    // 填充创建时间和更新时间
                    this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
                    this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
                    // 可以根据业务需求获取当前用户,填充创建者和更新者
                    this.strictInsertFill(metaObject, "createBy", String.cl编程ass, getCurrentUser());
                    this.strictInsertFill(metaObject, "updateBy", String.class, getCurrentUser());
                }
            
                @Override
                public void updateFill(MetaObject metaObject) {
                    // 更新时只填充更新时间和更新者
                    this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
                    this.strictUpdateFill(metaObject, "updateBy", String.class, getCurrentUser());
                }
            
                // 示例方法:获取当前用户信息
                private String getCurrentUser() {
                    // 这里可以集成 Spring Security 或其他上下文获取实际的当前用户
                    return "system"; // 这是一个占位符,实际应用中会替换为真实用户信息
                }
            }
            

            3.2 配置生http://www.devze.com

            通过在 MyMetaObjectHandler 类上使用 @Component 注解,Spring 会自动管理这个类,并在实体插入和更新时调用它来填充字段。

            4. 实体类继承 BaseEntity

            现在,你的具体实体类可以继承 BaseEntity,从而自动获得 createTimeupdateTime 字段的自动填充功能。

            package com.example.entity;
            
            import com.baomidou.mybatisplus.annotation.TableName;
            import com.example.utils.BaseEntity;
            import lombok.Data;
            
            @Data
            @TableName("your_table")
            public class YourEntity extends BaseEntity {
                // 其他字段
                private String name;
                private Integer age;
            }
            

            5. 处理数据插入与更新

            在 Service 或 Mapper 层,执行插入或更新操作时,createTime 和 updateTime 字段会自动填充。

            5.1 Service 层示例

            @Service
            public class YourEntityService {
            
                @Autowired
                private YourEntityMapper yourEntityMapper;
            
                public void saveEntity(YourEntity entity) {
                    yourEntityMapper.insert(entity);
                }
            
                public void updateEntity(YourEntity entity) {
                    yourEntityMapper.updateById(entity);
                }
            }
            

            6. 验证自动填充功能

            通过简单的单元测试或集成测试,验证 createTimeupdateTime 字段在插入和更新时是否正确自动填充。

            7. 其他注意事项

            • 字段类型: 确保数据库中的 createTimeupdateTime 字段类型与 Java 实体类中的类型相匹配(通常是 DATETIME 类型)。
            • 时间格式: 如果需要统一时间格式,可以在配置文件中设置 Spring Boot 的全局时间格式,或使用 @JsonFormat 注解指定序列化时的格式。
            spring:
              jackson:
                date-format: yyyy-MM-dd HH:mm:ss
                time-zone: GMT+8
            

            总结

            通过本文的教程,你可以轻松地在 Spring Boot 项目中使用 MyBatis-Plus 自动填充创建时间和更新时间字段。该方法充分利用了 MyBatis-Plus 的自动填充机制,并结合 Spring Boot 的优势,使开发过程更加简洁高效。如果遇到问题,务必检查 MetaObjectHandler 是否正确注册,字段类型是否匹配,以及数据库配置是否正确。

            以上就是MyBatis-Plus自动填充字段的详细教程的详细内容,更多关于MyBatis-Plus自动填充字段的资料请关注编程客栈(www.devze.com)其它相关文章!

            0

            精彩评论

            暂无评论...
            验证码 换一张
            取 消

            关注公众号