这个功能非常实用,在很多情况下,数据库中的表有一些公共字段,比如创建时间、更新时间等,如果每个表在增删改查时都要操作这些字段不免太过冗余。所以我们考虑自动填充。
为镇安等地区用户提供了全套网页设计制作服务,及镇安网站建设行业解决方案。主营业务为成都做网站、网站制作、镇安网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!MyBatis为我们提供填充的方法,具体做法如下:
1.在实体类的属性上加入@TableField注解,指定自动填充的策略
这里策略有两种:
(1)@TableField(fill = FieldFill.INSERT),插入时填充字段
(2)@TableField(fill = FieldFill.INSERT_UPDATE),插入和更新时填充字段
比如对于dish实体表:
2.编写元数据对象处理器,在类中统一为公共字段赋值,需要实现MetaObjectHandler接口
在common包下定义元数据处理器类MyMetaObjectHandler继承MetaObjectHandler接口,重写两个方法insertFill和updateFill:
使用metaObject的setValue就可以进行自动填充,这里的绿色框需要注意。我们在填充创建人、更新人信息的时候需要知道当前操作者的id,这个怎么获取到的呢?
首先确认一个事情, 客户端每次发送的http请求,对应在服务端都会分配一个新的线程来处理,比如对于一个更新请求,在处理过程中涉及到下面类中的方法都属于相同的一个线程:
LoginCheckFilter的doFilter方法(登录过滤,这里有用户的登录信息)
EmployeeController的update方法(更新接口)
MyMetaObjectHandler的updateFill方法(上述公共字段填充方法)
因此我们可以先在登录过滤处使用线程保存用户id,到字段填充类再取出即可。即在LoginCheckFilter的doFilter方法中获取当前用户id,并调用ThreadLocal的set方法来设置当前线程的线程局部变量的值(用户id),然后在MyMetaObjectHandler的updateFill方法中调用ThreadLocal的get方法来获得当前线程所对应的线程局部变量的值(用户id)
先对ThreadLocal封装一个工具类BaseContext:
通过其中的set和get操作更好的操作用户id。
在LoginCheckFilter类中添加代码:
即登录完毕将用户id保存至线程中,然后在MyMetaObjectHandler类中:
这里就把保存的id取到进行设置,公共字段填充完毕。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站栏目:Reggie项目总结4——公共字段自动填充-创新互联
文章地址:http://scgulin.cn/article/pijgi.html