zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【项目实战】使用MyBatis-Plus的自动填充功能

mybatis项目自动 实战 功能 Plus 填充 使用
2023-09-14 09:04:55 时间

一、MyBatis-Plus的自动填充功能

Mybatis Plus提供了自动填充功能,可以在插入和更新操作时自动填充一些公共字段,如创建时间、更新时间、创建人、更新人等。这样可以减少代码冗余,提高开发效率。

需要注意的是,自动填充功能只会在实体类中存在对应字段的情况下才会生效。
如果实体类中没有对应字段,自动填充功能会被忽略。

二、如何使用MyBatis-Plus的自动填充功能

要使用自动填充功能,需要实现MetaObjectHandler接口,并在配置文件中配置:

2.1 实现MetaObjectHandler接口

在MetaObjectHandler接口中,需要实现insertFill和updateFill方法,分别用于插入和更新操作时的自动填充。
以下是一个示例MetaObjectHandler实现:

public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("createUser", "admin", metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
        this.setFieldValByName("updateUser", "admin", metaObject);
    }
}

在上面的示例中,insertFill方法会自动填充createTime和createUser字段,updateFill方法会自动填充updateTime和updateUser字段。

2.2 在配置文件中配置

<!-- 配置自动填充 -->
<bean id="myMetaObjectHandler" class="com.example.MyMetaObjectHandler"/>
<mybatis-plus>
    <global-config>
        <meta-object-handler ref="myMetaObjectHandler"/>
    </global-config>
</mybatis-plus>

三、Springboot整合Mybatis Plus并使用自动填充功能

要在Springboot中使用Mybatis Plus的自动填充功能,需要进行以下步骤:

3.1 添加相应依赖

添加Mybatis Plus和Mybatis Plus Springboot Starter依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.4.3.1</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.1</version>
</dependency>

3.2 配置数据源和Mybatis Plus

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      id-type: auto
      field-strategy: not_empty
      insert-fill: createTime,createUser
      update-fill: updateTime,updateUser

在上面的配置中,insert-fill和update-fill分别指定了插入和更新操作时需要自动填充的字段。

3.3 创建实体类并添加自动填充字段:

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private Date createTime;
    private String createUser;
    private Date updateTime;
    private String updateUser;
}

在上面的实体类中,添加了需要自动填充的字段。

3.4 创建Mapper接口和Mapper XML文件:

@Mapper
public interface UserMapper extends BaseMapper<User> {
}
<mapper namespace="com.example.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.entity.User">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="age" property="age" jdbcType="INTEGER"/>
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
        <result column="create_user" property="createUser" jdbcType="VARCHAR"/>
        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
        <result column="update_user" property="updateUser" jdbcType="VARCHAR"/>
    </resultMap>
</mapper>

在上面的Mapper XML文件中,需要将自动填充字段映射到数据库表中的字段。

3.5 在Service中调用Mapper接口:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public void save(User user) {
        userMapper.insert(user);
    }

    @Override
    public void update(User user) {
        userMapper.updateById(user);
    }
}

在上面的Service中,我们直接调用Mapper接口的方法进行数据操作。