您好,欢迎您访问我们燿动吧 – 知识分享,快乐你我,燿动青春!

燿动吧 – 知识分享,快乐你我,燿动青春

                                          您现在的位置是:燿动吧 > IT技术 >

                                          MyBatisPlus中MetaObjectHandler的使用

                                          文章来源:凌兰 时间:2025-03-11

                                          因由是公司1个共事交到需要,让把1条数据录时髦createTime字段,配置为指定的字段,然则他走断面出现施行MyBatisPlus的insert之前值是对于的,然则insert以后便改成以后技术了。

                                          最先尔觉得是数据库字段建设为了凭据以后时分录进值,便默许为以后时代戳,然则1念过失,默许是指不树立值,那里仍然树立了为何照旧过失?

                                          以后呈现,体系代码中配置了MetaObjectHandler处置,分外处置了createTime那个字段。

                                          mybatisplus 插件.jpg

                                          MetaObjectHandler:元数据对于象处置器

                                          MetaObjectHandler交心是mybatisPlus为尔们供给的的1个扩大交心,尔们能够哄骗那个交心正在尔们拔出大概革新数据的时分,为少许字段指定默许值。

                                          应用场景:大众字段弥补等,如updateTime、createTime、createUser、updateUser等大众字段多的填补。

                                          应用办法

                                          真体的大众字段应用@TableField评释;

                                          1)@TebleField(fill = FieldFill.INSERT):示意此字段只正在拔出/新删操纵时革新数据

                                          2)@TebleField(fill = FieldFill.INSERT_UPDATE):显露此字段正在修正战新删操纵时皆革新数据;

                                          3)@TebleField(fill = FieldFill.UPDATE):表现此字段只正在修正操纵时皆革新数据;

                                          自界说元对于象处置器类,告竣MetaObjectHandler交心,誊写insertFill、updateFill办法。

                                          示例真体:

                                          packagecom.example.springboot.entity;importcom.baomidou.mybatisplus.annotation.*;importcom.fasterxml.jackson.annotation.JsonFormat;importcom.fasterxml.jackson.databind.annotation.JsonSerialize;importcom.fasterxml.jackson.databind.ser.std.ToStringSerializer;importlombok.AllArgsConstructor;importlombok.Builder;importlombok.Data;importlombok.NoArgsConstructor;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/***用户对于象*/@Data@Builder@NoArgsConstructor@AllArgsConstructor@TableName("sp_boot_user")publicclassUser{@TableId(value="id",type=IdType.AUTO)@JsonSerialize(using=ToStringSerializer.class)privateIntegerid;@TableField(exist=false)privateList<Integer>ids;@TableField(value="u_name")privateStringname;/***余额*/@TableField("balance_point")privateLongbalancePoint;/***总数*/@TableField("total_point")privateLongtotalPoint;@TableField(value="address")privateStringaddress;@TableField(value="create_time",fill=FieldFill.INSERT)@JsonFormat(timezone="GMT+8",pattern="yyyy-MM-ddHH:mm:ss")privateDatecreateTime;@TableField(value="update_time",fill=FieldFill.UPDATE)@JsonFormat(timezone="GMT+8",pattern="yyyy-MM-ddHH:mm:ss")privateDateupdateTime;/***哀求参数*/@TableField(exist=false)privateMap<String,Object>params=newHashMap<>();}

                                          示例交话柄现:

                                          packagecom.example.springboot.config;importcom.baomidou.mybatisplus.core.handlers.MetaObjectHandler;importorg.apache.ibatis.reflection.MetaObject;importorg.springframework.stereotype.Component;importjava.util.Date;@ComponentpublicclassMyMetaObjecthandlerimplementsMetaObjectHandler{@OverridepublicvoidinsertFill(MetaObjectmetaObject){metaObject.setValue("createTime",newDate());}@OverridepublicvoidupdateFill(MetaObjectmetaObject){metaObject.setValue("updateTime",newDate());}}

                                          编写单位尝试:

                                          @TestpublicvoidtestInsert(){Useruser=newUser();user.setName("尝试1");user.setAddress("天址A");user.setTotalPoint(100L);user.setBalancePoint(50L);userMapper.insert(user);}

                                          检查挨印:

                                          CreatinganewSqlSessionSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@16f62062]wasnotregisteredforsynchronizationbecausesynchronizationisnotactiveJDBCConnection[com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3d763ae5]willnotbemanagedbySpring==>Preparing:INSERTINTOsp_boot_user(u_name,balance_point,total_point,address,create_time)VALUES(?,?,?,?,?)==>Parameters:尝试1(String),50(Long),100(Long),天址A(String),2023-12-2111:45:31.45(Timestamp)<==Updates:1ClosingnontransactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@16f62062]

                                          能够观到,insert时,会主动注进以后的工夫。

                                          推举您浏览更多相关于“ MyBatisPlusMetaObjectHandler主动注进 ”的作品