博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
easymybatis中字段自动填充
阅读量:6715 次
发布时间:2019-06-25

本文共 2153 字,大约阅读时间需要 7 分钟。

hot3.png

假设数据库表里面有两个时间字段gmt_create,gmt_update。

当进行insert操作时gmt_create,gmt_update字段需要更新。当update时,gmt_update字段需要更新。

通常的做法是通过Entity手动设置:

User user = new User();user.setGmtCreate(new Date());user.setGmtUpdate(new Date());

因为表设计的时候大部分都有这两个字段,所以对每张表都进行手动设置的话很容易错加、漏加。 easymybatis提供了两个辅助类DateFillInsert和DateFillUpdate,用来处理添加修改时的时间字段自动填充。配置了这两个类之后,时间字段将会自动设置。

配置方式如下:

EasymybatisConfig config = new EasymybatisConfig();    config.setFills(Arrays.asList(			new DateFillInsert()			,new DateFillUpdate()			));

如果要指定字段名,可以写成:

new DateFillInsert("add_time")

自定义填充器

除了使用easymybatis默认提供的填充之外,我们还可以自定义填充。

自定义填充类要继承FillHandler<T>类。 <T> 表示填充字段类型,如Date,String,BigDecimal,Boolean。

实战

现在有个remark字段,需要在insert时初始化为“备注默认内容”,新建一个StringRemarkFill类如下:

public class StringRemarkFill extends FillHandler
{ @Override public String getColumnName() { return "remark"; } @Override public FillType getFillType() { return FillType.INSERT; } @Override protected Object getFillValue(String defaultValue) { return "备注默认内容"; }}

StringRemarkFill类中有三个重写方法:

  • getColumnName() : 指定表字段名
  • getFillType() : 填充方式,FillType.INSERT:仅insert时填充;FillType.INSERT:insert,update时填充
  • getFillValue(String defaultValue) :返回填充内容。

然后在easymybatisConfig中添加

config.setFills(Arrays.asList(			new DateFillInsert()			,new DateFillUpdate()			,new StringRemarkFill()			));

这样就配置完毕了,调用dao.save(user);时会自动填充remark字段。

指定目标类

上面说到StringRemarkFill填充器,它作用在所有实体类上,也就是说实体类如果有remark字段都会自动填充。这样显然是不合理的,解决办法是指定特定的实体类。只要重写FillHandler类的getTargetEntityClasses()方法即可。

@Overridepublic Class
[] getTargetEntityClasses() { return new Class
[] { TUser.class };}

这样就表示作用在TUser类上,多个类可以追加。最终代码如下:

public class StringRemarkFill extends FillHandler
{ @Override public String getColumnName() { return "remark"; } @Override public Class
[] getTargetEntityClasses() { return new Class
[] { TUser.class }; // 只作用在TUser类上 } @Override public FillType getFillType() { return FillType.INSERT; } @Override protected Object getFillValue(String defaultValue) { return "备注默认内容"; // insert时填充的内容 }}

关于自动填充的原理是基于mybatis的TypeHandler实现的,这里就不多做介绍了。感兴趣的同学可以查看FillHandler<T>源码。

转载于:https://my.oschina.net/u/3658366/blog/1551859

你可能感兴趣的文章
前端技术学习之选择器(四)
查看>>
2016年4月4日中项作业
查看>>
条件+努力=?
查看>>
hadoop常用服务管理命令
查看>>
洛谷P4169 天使玩偶 (算竞进阶习题)
查看>>
Order By操作
查看>>
(三)mybatis之对Hibernate初了解
查看>>
nginx安装与配置
查看>>
Android 命令设置获取、IP地址、网关、dns
查看>>
查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by...
查看>>
[SQL in Azure] Windows Azure Virtual Machine Readiness and Capacity Assessment
查看>>
关于CCR测评器的自定义校验器(Special Judge)
查看>>
java设计模式之 装饰器模式
查看>>
利息力(force of interest)
查看>>
Oracle 角色及其权限
查看>>
NiftyDialogEffects:集成了多种动画效果的Dialog控件
查看>>
《世界是数字的》读后感
查看>>
AD软件原理图封装过程(即由原理图转换到PCB)
查看>>
cocos2d-x lua table与json的转换
查看>>
mysql的基本原理
查看>>