MybatisPlus 自动填充的实现

2025-05-29 0 71

一、设置填充时机

使用下面的注解设置填充的时机,例如insert 、update语句

?

1
@TableField(fill = FieldFill.INSERT)

有下面4种规则

MybatisPlus 自动填充的实现

源码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
/**

* 字段填充策略枚举类

*

* <p>

* 判断注入的 insert 和 update 的 sql 脚本是否在对应情况下忽略掉字段的 if 标签生成

* <if test="...">......</if>

* 判断优先级比 {@link FieldStrategy} 高

* </p>

*

* @author hubin

* @since 2017-06-27

*/

public enum FieldFill {

/**

* 默认不处理

*/

DEFAULT,

/**

* 插入时填充字段

*/

INSERT,

/**

* 更新时填充字段

*/

UPDATE,

/**

* 插入和更新时填充字段

*/

INSERT_UPDATE

}

二、设置填充的值

创建一个类实现mp提供的MetaObjectHandler接口

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;

import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component

public class MyMetaObjectHandler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

setFieldValByName("字段名,例如User的createTime", LocalDateTime.now(),metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

setFieldValByName("字段名,例如User的updateTime",LocalDateTime.now(),metaObject);

}

}

注意请将中文去掉换成自己实体对象的字段名

测试代码:

?

1

2

3

4

5

6

7

8

9
User user = new User();

user.setName("张三");

user.setAge(12);

user.setAge(12);

user.setId(11111111111L);

user.setEmail("someone@qq.com");

user.setManagerId(1087982257332887553L);

int insert = userMapper.insert(user);

System.out.println("插入"+insert);

检测表中数据:

MybatisPlus 自动填充的实现

说明成功

优化填充规则

案例代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;

import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component

public class MyMetaObjectHandler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

boolean createTime = metaObject.hasSetter("createTime");//如果有这个字段返回true

if (createTime) {//如果字段不存在则不进行下面的填充

setFieldValByName("createTime", LocalDateTime.now(), metaObject);

}

}

@Override

public void updateFill(MetaObject metaObject) {

Object updateTime = getFieldValByName("updateTime", metaObject);

if (null == updateTime) { //没有设置updateTime值则进行填充如果有设置值则不进行填充

setFieldValByName("updateTime", LocalDateTime.now(), metaObject);

}

}

}

到此这篇关于MybatisPlus 自动填充的实现的文章就介绍到这了,更多相关MybatisPlus 自动填充内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://blog.csdn.net/qq_41813208/article/details/108059691

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 MybatisPlus 自动填充的实现 https://www.kuaiidc.com/117738.html

相关文章

发表评论
暂无评论