在线问题反馈模块实战:实现对通用字段内容自动填充功能

Posted bug菌¹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在线问题反馈模块实战:实现对通用字段内容自动填充功能相关的知识,希望对你有一定的参考价值。

👨‍🎓作者:bug菌

✏️博客:CSDN掘金

💌公众号:猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。 

【开发云】年年都是折扣价,不用四处薅羊毛

一、前言🔥

       接下来的这几期,bug菌想跟大家分享一下自己昨天刚接到一个临时的需求,热乎着呢,想分享一下自己是如何面对临时需求并制定整个开发周期,其中包括从梳理业务到创建业务表再到实现业务逻辑形成闭环再到与前端对接,其中会穿插一些业务拓展及功能性拓展,这一条龙流程在线与大家一起见证,分享给刚入门的小伙伴,希望对你们有所帮助。

环境说明:idea2019.3 + springboot2.3.1.REALSE + mybati-plus3.2.0 + mysql5.6 + jdk1.8

       若小伙伴们在批阅文章的过程中觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️ 

二、正文🔥

        上一期提到那通过实体类的自动注入,这期我就来给大家讲讲啦,我要带着大家避免重复造轮子,采用了mp(mybatis-plus)所提供的自动填充策略。mp它是有封装了一套可供多选的自动填充策略方案。不比你手动造的香么?至于如何使用,这个也简单的。

三、引入相关依赖🔥

第一步:引入mp的依赖包

<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>

第二步:实体类添加注解属性

        在你需要自动填充的字段加上注解。比如就如上BaseEntity这个通用类。我们逐一加上对应的注解。具体添加如下:

/**
	 * id 生成策略为UUID
	 */
	@TableId(value = "id",type = IdType.UUID)
	private String id;

	/**
	 * 创建时间 填充策略为插入自动填充
	 */
	@ApiModelProperty(value = "创建时间")
	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
	@TableField(value = "create_time",fill = FieldFill.INSERT)
	protected Date createTime;

	/**
	 * 创建者 填充策略为插入自动填充
	 */
	@ApiModelProperty(value = "创建人")
	@TableField(value = "create_by",fill = FieldFill.INSERT)
	protected String createBy;

	/**
	 * 更新时间 填充策略为新增或更新自动填充
	 */
	@ApiModelProperty(value = "修改时间")
	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
	@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
	protected Date updateTime;

	/**
	 * 更新者 填充策略为新增或更新自动填充
	 */
	@ApiModelProperty(value = "修改人")
	@TableField(value = "update_by",fill = FieldFill.INSERT_UPDATE)
	protected String updateBy;

第三步:实现填充执行器

        没有这一步,自动填充功能肯定是不行的,如下我就给大家讲解一下,如何实现填充器?

你只需要按如下代码,具体实现insertFill()跟 updateFile() 接口即可。 这分别代表你的insert、update方法触发执行时所会进行的字段填充策略。

/**
 * 自动补充插入或更新时的值
 *
 * @author luoYong
 * @date 2022-03-29
 */
@Component
public class MpMetaObjectHandler implements MetaObjectHandler 

    /**
     * 插入-填充策略
     *
     * @param metaObject
     */
    @SneakyThrows
    @Override
    public void insertFill(MetaObject metaObject) 

        //获取当前登录人信息
        SysUserEntity user = SpringServletContextUtils.getUser();
        this.setFieldValByName("createBy", user.getAccountId(), metaObject);
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateBy", user.getAccountId(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    

    /**
     * 更新-填充策略
     *
     * @param metaObject
     */
    @SneakyThrows
    @Override
    public void updateFill(MetaObject metaObject) 

        //获取当前登录人信息
        SysUserEntity user = SpringServletContextUtils.getUser();
        this.setFieldValByName("updateBy", user.getAccountId(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    

        对于加了通用字段的都支持自动填充,即对于sys_questions表所对应的实体我们将直接继承BaseEntity类即可,只要是insert、update等相关插入、修改方法执行时就不需要再管这些通用字段的赋值问题了,都会自动通过MpMetaObjectHandler执行器替我们赋值。这是不是非常的简便好使啊,小伙伴们。

        其次还有一点需要注意的就是,你这么设置,就要注意在你获取用户信息的时候,我是通过t登录生成token令牌从缓存中获取对于用户的userInfo;若对于开放接口(白名单)而言,它就是支持免登录通过接口调取,那你就得注意获取用户信息是否支持了,如不支持那就你的实体最好就不要用自动填充,也就是不继承BaseEntity,自己在实体单独加上那些字段或者额外封装个通用实体类但不加mp的填充注解,这样也是可以的。

        所以提醒下这一块大家需要注意,我就是因为踩坑啦。然后对于继承了BaseEntity又无法获取用户信息的,目前我也是没有办法避免它也会执行这个字段注入,发现个最笨的方法就是徒手写sql,在持久层定义mapper方法;虽然啊这方案比较low,但是能有效解决目前问题的,你们可以参考下,如果你们有发现别的更优雅简便的方式欢迎评论区告知我呀。

 ... ...

        好啦,以上就是这期的所有内容啦,你们学废了么?如果对你有所帮助,还请不要忘记给bug菌[三连支持]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『猿圈奇妙屋』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。

四、往期热文推荐🔥

        对于问题反馈模块实战开发,我完整的梳理了每一期的教学及链接地址,仅供参考:希望能对你们有所帮助。

  • 在线问题反馈模块实战(一):梳理业务需求并创建数据库表
  • 在线问题反馈模块实战(二):封装代码自动生成类文件器
  • 在线问题反馈模块实战(三):自动生成所有Controller、Service、Mapper等文件
  • 在线问题反馈模块实战(四):封装通用字段类
  • 在线问题反馈模块实战(五):实现对通用字段内容自动填充功能
  • 在线问题反馈模块实战(六):接口文档定义
  • 在线问题反馈模块实战(七):安装部署swagger2
  • ​在线问题反馈模块实战(八)​:实现图片上传功能-上篇
  • ​在线问题反馈模块实战(九)​:实现图片上传功能-下篇
  • ​在线问题反馈模块实战(十)​:实现图片预览功能
  • ​在线问题反馈模块实战(十一)​:实现图片下载功能
  • ​在线问题反馈模块实战(十二)​:实现图片删除功能
  • ​在线问题反馈模块实战(十三)​:实现多参数分页查询列表
  • 在线问题反馈模块实战(十四):实现在线答疑功能
  • 在线问题反馈模块实战(十五)​:实现在线更新反馈状态功能
  • 在线问题反馈模块实战(十六)​:实现查详情功能
  • 在线问题反馈模块实战(十七):实现excel模板在线下载功能
  • 在线问题反馈模块实战(十八):实现excel台账文件记录批量导入功能
  • 在线问题反馈模块实战(十九):实现数据批量导出到excel文件中功能
  • 在线问题反馈模块实战(二十):完结篇

        如上是整整二十期内容,每一期都是干货,对于一个模块的开发,如何一点一滴打造并测试部署上线,我再说一遍,这不是演习,是实战!是实战!是实战!

        若你们觉得只是需要了解其中某个知识点或者业务的话,也不反对,你就选择其中的几期进行学习就好,反正都已经完结啦;我只希望你们能有所收获,有所成长,也就不枉我苦心每天下班后给大家总结更新。

五、文末🔥

        如果你还想要学习更多,小伙伴们大可关注bug菌专门为你们创建的专栏《springboot零基础入门教学》,都是我一手打下的江山,持续更新中,希望能帮助到更多小伙伴们。

【开发云】年年都是折扣价,不用四处薅羊毛

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

        最后送大家两句我很喜欢的话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


​​​​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

以上是关于在线问题反馈模块实战:实现对通用字段内容自动填充功能的主要内容,如果未能解决你的问题,请参考以下文章

在线问题反馈模块实战:封装通用字段类

在线问题反馈模块实战:封装通用字段类

在线问题反馈模块实战​:实现图片预览功能

在线问题反馈模块实战​:实现图片删除功能

在线问题反馈模块实战(十六)​:实现查详情功能

在线问题反馈模块实战:自动生成所有ControllerServiceMapper等文件