springBoot+mybatisPlus表名字段自动映射,时间字段值自动注入,序列化java对象到json显示时间

2023-11-08

mybatisPlus依赖引入

 <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.4.2</version>
    </dependency>
  • application.yml配置字段映射
    可自动将表中的字段和表名与实体类中的类名和变量使用驼峰命名法匹配
    好处: 写sql时不用对应每个字段的?占位符输入值。直接传入实体类对象即可,MP会自动识别字段,匹配相应的值。
    例: create_time 可在类中匹配createTime
    自动去掉下划线,使后面一位大写
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID

字段值自动注入

MetaObjectHandler接口是mybatisPlus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入或者更新数据的时候,为一些字段指定默认值。实现这个需求的方法不止一种,在sql层面也可以做到,在建表的时候也可以指定默认值。

package com.itheima.reggie.common;

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.time.LocalDateTime;

/**
 * 自定义元数据对象处理器
 */
@Component
@Slf4j  //打印日志
public class MyMetaObjecthandler implements MetaObjectHandler {
    /**
     * 插入操作自动填充
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("createUser", BaseContext.getCurentId());
        metaObject.setValue("updateUser", BaseContext.getCurentId());

    }
    
	/**
     * 更新操作
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("公共字段");
    metaObject.setValue("updateTime",LocalDateTime.now());
    metaObject.setValue("updateUser",BaseContext.getCurentId());
    }
}
  • 实体类配置触发事件自动注入
    MP底部执行sql时会自动判断是什么操作语句选择触发,上面设置的两个方法;
    FieldFill.INSERT : 插入的时候设置值
    FieldFill.INSERT_UPDATE: 更新的时候设置值
  @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Long createUser;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;

序列化java对象到json显示时间

有时候前端需要指定显示时间格式,可继承ObjectMapper类实现序列化和反序列化。
依赖引入

  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.76</version>
    </dependency>
/**
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */
//ObjectMapper是jackson中的一个类,可以将 java 对象与 json 字符串相互转化。
public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);


        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))

                .addSerializer(BigInteger.class, ToStringSerializer.instance)
                .addSerializer(Long.class, ToStringSerializer.instance)
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}
  • 设置扩展mvc框架的消息转换器
    在消息转换器中设置我们设置的json格式,在后端转换json时会自动把时间按照我们设置的json格式转换给前端,前端发送时间时,消息转换器也会转换格式给后端。
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    /**
     * 扩展mvc框架的消息转换器
    * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器...");
        //创建消息转换器对象
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        //设置对象转换器,底层使用Jackson将Java对象转为json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        //将上面的消息转换器对象追加到mvc框架的转换器集合中
        converters.add(0,messageConverter);
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springBoot+mybatisPlus表名字段自动映射,时间字段值自动注入,序列化java对象到json显示时间 的相关文章

  • 解析器解析 SQL 查询并返回 Java 中的列名和相应的表名 [重复]

    这个问题在这里已经有答案了 可能的重复 Java 的 SQL 解析器库 https stackoverflow com questions 660609 sql parser library for java 我需要一个解析器 它应该以以下
  • 使用桌面的默认应用程序打开存储在 jar 文件中的 PDF 文件

    我的计算机科学课程的程序开发即将结束 然而 要求之一是应用程序内有一份用户手册 我在 Eclipse 工作区中将用户手册保存为 PDF 它存储在 Documents PDF Manual pdf 下 我最初使用这段代码 URL url ge
  • 如何从c调用Java函数

    我被这个问题困扰了 我需要从 c c 调用 Java 函数 在示例和教程中 我只看到一个java应用程序调用一个c方法 并在同一个方法中调用另一个java方法 但我想做的是从代码的任何部分调用java方法 这就是我所拥有的 static J
  • 从 QueryDSL 谓词对象中获取参数

    我使用带有 Spring REST 端点的 QueryDSL 谓词对象来检索和查询参数值 GetMapping subjectId students RolesAllowed Roles PLATFORM ADMIN Roles USER
  • Java中如何存储profile?

    我仍在学习 Java 的诀窍 如果有一个明显的答案 我很抱歉 我有一个占用大量内存的程序 我想找到一种方法来减少其使用 但是在阅读了许多 SO 问题后 我认为在开始优化它之前我需要证明问题出在哪里 这就是我所做的 我在程序的开头添加了一个断
  • 在手机上单步执行 Android 代码 - 大行号差异

    我正在尝试调试与 Samsung Captivate Galaxy S 上的 ListView 相关的一些代码 我在代码中的某个位置放置了断点 当它停止时 我会在堆栈上返回几帧到 ListView 源 现在 我可以预期会出现一些不匹配的情况
  • SAP Spartacus 表单个性化

    如果已经有使用给定电子邮件注册的帐户 我需要修改注册表以显示错误消息 SAP Hybris 后端 Angular 中的 Spartacus 店面 目前 我有一个自定义验证器类 它可以正常工作 import org springframewo
  • 将 PFX 文件导入现有 JKS 文件(不从 .pfx 转换为 .jks)

    我有 Java Web 服务 并使用 Java Keytool 创建的 jks 文件实现了 X 509 keytool genkey keyalg RSA sigalg SHA1withRSA validity 730 alias myse
  • 如何更改 angularjs $http.jsonp 的标头

    我读了document http docs angularjs org api ng 24http 但我想我一定是误解了 http defaults headers jsonp Accept application json http js
  • 编辑 CSV 文件(设计实现)

    我开始设计一个程序 该程序将根据已找到并保存到主 CSV Excel 文件中的相似字符串及其标识 自动执行正确查找和识别字符串的过程 现在我想正确设计它 这样我以后在实现 CSV Excel 读写部分时就不会遇到问题 我可能会使用 Open
  • Axis2 不返回自己的对象

    我编写了一些网络服务 其中一些返回一个简单的字符串 这个可以工作 另一些返回一个对象列表 不 axis2 1 5 1 无法处理集合类型 所以我将返回类型更改为Object 但我仍然收到这个异常 ERROR java lang Runtime
  • Java:getInstance 与静态

    目的是什么getInstance 在Java中 在我的研究过程中我一直在读getInstance 有助于实现单例设计模式 根据我的理解 这意味着整个程序中只有一个实例 但我不能只使用静态吗 这不是静态的全部意义吗 如果我只有静态方法和字段
  • 基本的 Swing 库? JGoodies,JFreeChart [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android 折叠工具栏在折叠时没有隐藏其他元素

    我在 Android 上有一个布局 支持设计折叠工具栏 其中包含 TextView 但是当我折叠工具栏时 一些带有工具栏标题的 TextView 我想隐藏所有其他内容 而不是工具栏和标题 这是我的布局
  • 在调用超类型构造函数之前无法引用“X”,其中 x 是最终变量

    考虑以下 Java 类声明 public class Test private final int defaultValue 10 private int var public Test this defaultValue lt Compi
  • 无法在 Windows 7 64 位中正确设置 java 路径

    我已经在计算机中安装了 java 1 6 并且还使用高级变量设置设置了路径 当我尝试执行 java 时 在命令提示符下出现此错误 Error could not open C Program Files Java jre7 lib amd6
  • 多个事件分派线程

    我是 Java Swing 新手 我的问题与事件队列和调度线程相关 我读到可以有多个事件队列 每个队列应用上下文 http www java2s com Open Source Java Document 6 0 JDK Modules s
  • 根据 netbeans 中的单选按钮切换组件的“启用”属性

    我在按钮组中有两个单选按钮 在同一面板中我有一个文本框和一个按钮 我想仅在选择第二个按钮时启用文本框和按钮 并在选择另一个单选按钮时禁用文本框和按钮 我已经尝试过这个但没有成功 private void radio button2Actio
  • @Transactional 方法调用另一个没有 @Transactional 注解的方法?

    我在 Service 类中看到了一个方法 该方法被标记为 Transactional 但它还调用同一类中的一些其他方法 这些方法未标记为 Transactional 这是否意味着对单独方法的调用导致应用程序打开与数据库的单独连接或挂起父事务
  • JSON 数据的动态表单(不同类型)

    我尝试使用 JSON 中的数据在 AngularJS 中创建动态表单 我有这个工作 HTML p p

随机推荐

  • Mysql中的WITH ROLLUP用法

    Mysql中的WITH ROLLUP用法 1 WITH ROLLUP 在group分组字段的基础上再进行统计数据 例子 首先在name字段上进行分组 然后在分组的基础上进行某些字段统计 表结构如下 CREATE TABLE test Id
  • 区块链隐私保护方案:零知识证明、可信执行、多方计算、同态加密

    在现在这个网络发达的时代 个人隐私已经变成一个既敏感又常见的问题 随着有越来越多的人加入区块链 私人钱包被盗或是隐私外露等等这些事件层出不穷 这使得大家对隐私保护的需求在逐步提升 区块链技术最受人敬仰的是它具有匿名 不可篡改以及可追溯的属性
  • 浅析Java编程中类和对象的定义

    浅析Java编程中类和对象的定义 1 什么是类 答 类是客观存在的 抽象的 概念的东西 2 什么事对象 答 对象是具体的 实际的 代表一个事物 例如 车是一个类 汽车 自行车就是他的对象 关于类与对象的描述 类是对象的模版 对象是类的一个个
  • C++ 字符串 string 用法简述

    C 是 C 的超集 因此 C 中的字符串可利用 C 的写法 可以戳此链接了解 另外一种方法是利用 string 类库 本文主要介绍这种方式 string 类使用起来比字符数组简单许多 能够像处理普通数组一样处理字符串 目录 声明 初始化 内
  • VS2015 安装ReportDesigner/ReportViewer的方法

    首先 进入控制面板 找到并进入功能与程序 在安装的所有软件中找到 vs2015 点击更改 其次 在弹出窗口选择修改 然后 勾选Mircosoft SQL Server Data Tools后 一路下一步 最后 重启VS即可看到报表的相关选项
  • 【华为OD机试真题】删除最少字符(java)100%通过率【2023(B卷)100分】

    删除最少字符 题目描述 删除字符串中出现次数最少的字符 如果多个字符出现次数一样则都删除 输入描述 输入只包含小写字母 输出描述 输出删除后剩余的字符 若删除后字符串长度为0 则输出empty 示例一 输入 abcdd 输出 dd 示例二
  • uniapp语法特点

    uniapp vue 小程序 uniapp中的页面使用vue的单文件组件结构 子组件同样使用vue的单文件组件 uniapp应用启动页 由page json 文件配置 uniapp中的标签使用小程序中的组件标签 uniapp中的尺寸单位使用
  • 解决Windows出现d3dcompiler_40.dll找不到

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个d3dcompiler 40 dll文件进行安装
  • 学习Linux(一)初始Linux

    前面的文章 简单的介绍了下如何使用windows搭建Linux子系统 让我们在只用windows 电脑的情况下了解并且快而简洁的学习并且了解Linux 那么接下来我们一起学习下Linux及相关命令 文章内容为自己学习整理 什么是Linux
  • tesserocr模块的安装(Windows,linux ,Mac)

    Windows下的安装 第一步 http digi bib uni mannheim de tesseract 下载安装 第二步 安装tesserocr即可 直接使用pip安装 pip3 install tesserocr pillow L
  • 【Unity实用小知识点】实现按钮长按功能(用EventTrigger实现)

    在一些游戏中可能需要一些按钮长按的功能 但在EventTrigger找了找貌似没有代表长按的功能 感觉EventTrigger通过Down和Up可以实现 就尝试了下 长按简单小例子 实现点击和长按并存 先放效果 脚本 using Unity
  • 学习记录3:一个按键控制两盏灯,亮灯循环

    单片机SC95F8617 一个按键控制两盏灯 要求是按一下按键 1亮2灭 再按一下1灭2亮 再按一下1亮2亮 再按一下1灭2灭 然后又1亮2灭循环 其实列出来会发现这个亮灯的规律是一次转换一个灯 一次转换两个灯 循环 如下表所示 第一次的转
  • linux下重新安装python

    linux下重新安装python 1 移除旧版本 之前版本过低 yum erase y python3 2 下载新版本安装包 在自己的电脑上下载好再传输到云服务器上 直接在服务器上下载 wget https www python org f
  • 照片怎么换背景?这几个方法或许能帮到你

    大学上就业指导课的时候 老师让我们制作一个自己的简历 并要求了头像需要是蓝底的一寸照 课后 在制作简历的过程中 我并没有被简历的内容给难住 而是被如何获得一个蓝底的证件照给拖了后腿 这时候 我的舍友就给我介绍了几个方法来实现抠图换纯色背景
  • parse:uParse修复​​版,优化表格,css等,html富文本加载

    https ext dcloud net cn plugin id 364 自己搞微信小程序遇到的 uniapp 搞得 后台textarea富文本便捷器 录入的客户端显示 试了好几种都不行 尤其是表格图片排版的 https ext dclo
  • 【C语言】如何自动控制输出空格的个数

    include
  • ant design Table实现可编辑的单元格

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 需求 最近接到的一个需求 在table栏中实现属性的可编辑单元格 并且table内部可动态删减的单元格 外部操作新增或删除一行新旧数据的操作
  • idea怎么转换为中文

    搜索chinses 然后安装后 重启idea即可
  • 微信小程序发布审核基本步骤(带图)

    本文作为烂笔头记录或小白感性认识或为客户做基础说明 复杂性时间等 大佬请勿费神 微信小程序源码编辑与调试略 微信小程序注册略 一 安装微信开发者工具 微信开发者工具下载地址与更新日志 微信开放文档 二 绑定微信小程序开发者 1 登录微信公众
  • springBoot+mybatisPlus表名字段自动映射,时间字段值自动注入,序列化java对象到json显示时间

    mybatisPlus依赖引入