mybatisplus时间处理
建表
阿里巴巴编码规约中建议命名为gmt_create,gmt_modifie,并且类型datetime,我们这里用create_time create_time。
-- auto-generated definition create table user ( id bigint auto_increment comment '主键id' primary key, name varchar(30) null comment '姓名', age int null comment '年龄', email varchar(50) null comment '邮箱', create_time datetime null comment '创建时间', create_time datetime null comment '更新时间' );
方式一:sql级别(数据库设置)
- create_time:
- update_time:
官方解释:
- 此函数返回当前数据库系统时间戳,返回值的类型为 datetime,并且不含数据库时区偏移量。
- current_timestamp 从运行 sql server 实例的计算机的操作系统中获得此值
将default expression设置为current_timestamp的作用:
- 在你进行插入、创建一条数据时给定一个默认值。
- 将on update设置为current_timestamp的作用:
- 在你进行更新数据时会按照current_timestamp的规定更新你的值。(相当于实现了操作后时间的自动更新)
方式二:代码级别(mybatisplus自动填充)
java中(springboot)
建一个pojo实体类:
package com.hyq.pojo; import com.baomidou.mybatisplus.annotation.*; import lombok.allargsconstructor; import lombok.data; import lombok.noargsconstructor; import org.springframework.format.annotation.datetimeformat; import java.util.date; @data @allargsconstructor @noargsconstructor @tablename("user") public class user { @tableid(type = idtype.auto) private long id; private string name; private integer age; private string email; @datetimeformat(pattern = "yyyy-mm-dd hh:mm:ss") @tablefield(fill = fieldfill.insert) //插入时更新 private date createtime; @datetimeformat(pattern = "yyyy-mm-dd hh:mm:ss") @tablefield(fill = fieldfill.insert_update) //添加时更新 之后写策略 private date updatetime; }
重点看时间的处理:
@datetimeformat(pattern = "yyyy-mm-dd hh:mm:ss") @tablefield(fill = fieldfill.insert) //插入时更新 private date createtime; @datetimeformat(pattern = "yyyy-mm-dd hh:mm:ss") @tablefield(fill = fieldfill.insert_update) //添加时更新 之后写策略 private date updatetime;
官方描述:
- 描述:表名注解,标识实体类对应的表
- 使用位置:实体类
写完@tablefield后可以去配置一个handler我们这里取名为mymetaobjecthandler;
实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.metaobjecthandler
package com.hyq.handler; import com.baomidou.mybatisplus.core.handlers.metaobjecthandler; import lombok.extern.slf4j.slf4j; import org.apache.ibatis.reflection.metaobject; import org.springframework.stereotype.component; import java.util.date; @slf4j @component //一定不要忘记把处理器加到io容器c中 public class mymetaobjecthandler implements metaobjecthandler { //插入时的填充策略 @override public void insertfill(metaobject metaobject) { log.info("start insert fill......"); this.setfieldvalbyname("createtime", new date(), metaobject); this.setfieldvalbyname("updatetime", new date(), metaobject); } //更新时的填充策略 @override public void updatefill(metaobject metaobject) { log.info("start insert fill......"); this.setfieldvalbyname("updatetime", new date(), metaobject); } }
这里的setfieldvalbyname源码如下:
/** * 通用填充 * * @param fieldname java bean property name 字段名称 * @param fieldval java bean property value 属性值 * @param metaobject meta object parameter 元对象参数 */ default metaobjecthandler setfieldvalbyname(string fieldname, object fieldval, metaobject metaobject) { if (objects.nonnull(fieldval) && metaobject.hassetter(fieldname)) { metaobject.setvalue(fieldname, fieldval); } return this; }
根据自己理解判断该怎么用;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论