SpringBoot,Mybatis 使用Java8(JSR310)时间日期规范

news2024/10/7 3:18:18

目录

  • 一. 依赖
  • 二. 前台
  • 三. Controller,Form,Service
  • 四. 数据库类型
  • 五. 效果


一. 依赖

⏹若使用的是SpringBoot

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.0.0</version>
</dependency>
  • 2.0.0以上的版本就支持JSR310时间规范。

⏹若使用的是Spring

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>2.0.5</version>
</dependency>
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.5</version>
</dependency>
  • Mybatis在3.4.5版本(2017.8月份发布)之后,就内置了对jsr310的支持。

二. 前台

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSR310日期测试</title>
</head>
<body>
    <button id="btn1">点击发送请求</button>
</body>
<script th:src="@{/js/public/jquery-3.6.0.min.js}"></script>
<script th:inline="javascript">
	$("#btn1").click(function() {
		
		// 各种时间格式
		const data = {
			date1: "2020/03/07 12:10:01",
			date2: "2020-03-06",
			date3: "12:10",
			date5: "202003",
			dateA: "2020/03/07",
			dateB: "2020年03月07日",
			dateC: "20200307",
		}
		
	    $.ajax({
	        url: "/test03/jsr310date",
	        type: 'POST',
	        data: JSON.stringify(data),
	        contentType: 'application/json;charset=utf-8',
	        success: function (data, status, xhr) {
	            console.log(data);
	        }
	    });
	});
</script>
</html>

三. Controller,Form,Service

⏹Controller

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/test03")
public class Test03Controller {
	
	@Resource
	private Test03Service service;

	@GetMapping("/init")
	public ModelAndView init() {
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.setViewName("test03");
		return modelAndView;
	}
	
	@PostMapping("/jsr310date")
	@ResponseBody
	public Test03Entity jsr310date(@RequestBody Test03Form form) throws Exception {
		
		return service.jsr310date(form);
	}
}

⏹Form

  • 后台使用LocalDate等时间类型接收前台数据时,需要使用@JsonFormat注解来指定数据格式。
  • @JsonFormat注解能指定前台向后台传入的数据类型,同时后台向前台返回的数据格式也会受其影响。
  • 若不想在每个字段上都添加@JsonFormat注解来指定格式,可以使用全局日期格式转换器,
    详情请参考这篇博客:SpringBoot Java8日期全局日期格式转换器。
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.YearMonth;

import com.fasterxml.jackson.annotation.JsonFormat;

import lombok.Data;

@Data
public class Test03Form {
	
	@JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss")
	private LocalDateTime date1;
	
	// yyyy-MM-dd 格式的日期字符串,可自动封装到LocalDate中
	private LocalDate date2;
	
	@JsonFormat(pattern = "HH:mm")
	private LocalTime date3;
	
	private Instant date4;
	
	// 年月时间格式也可直接封装
	@JsonFormat(pattern = "yyyyMM")
	private YearMonth date5;
	
	// yyyy-MM-dd 格式之外的日期字符串,需要通过@JsonFormat注解指定格式
	@JsonFormat(pattern = "yyyy/MM/dd")
	private LocalDate dateA;
	
	// 约束前端和后端的数据格式
	@JsonFormat(pattern = "yyyy年MM月dd日") 
	private LocalDate dateB;
	
	@JsonFormat(pattern = "yyyyMMdd")
	private LocalDate dateC;	
}

⏹Service

  • 向数据库中插入数据后,再查询插入的数据,返回前台查看效果。
import java.time.Instant;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class Test03Service {
	
	@Autowired
	private TestMapper03 mapper;

	@Transactional(rollbackFor = Exception.class)
	public Test03Entity jsr310date(Test03Form form) {
		
		form.setDate4(Instant.now());
		mapper.insertData(form);

		// 查询插入数据库中的数据
		return mapper.selectData();
	}
}

四. 数据库类型

⏹使用的是Mysql数据库,其中实体类属性和DB字段类型的对应关系如下

实体类属性DB字段类型
LocalDateTimedatetime
LocalDatedate
LocalTimetime
Instanttimestamp

在这里插入图片描述


五. 效果

  • 因为date4是时间戳类型,所以返回到前台的数据格式为: "2023-09-15T01:22:18Z"
  • 在前台时间戳可以通过new Date("2023-09-15T01:22:18Z")来转换为Date类型。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Microsoft 365跨平台协同办公功能,实现Mac、iOS、Windows用户的实时无缝协作

Microsoft 365 for Mac(Office 365)现已更新&#xff0c;最新版本的Microsoft 365 现已支持跨平台协同办公&#xff0c;接下来为你介绍一些使用office 365 Mac版进行创作及写作的好方法。 Microsoft 365 在全平台共用相同的代码库&#xff0c;这意味着使用 Mac、ios 和Windows…

【日积月累】SpringBoot启动流程

目录 SpringBoot启动流程 1.前言2.构造一个SpringApplication的实例&#xff0c;完成初始化的工作SpringApplication实例构造完之后调用run方法&#xff0c;启动SpringApplication3.SpringBoot启动代码SpringBootConfigurationComponentScanEnableAutoConfiguration 总结参考…

随手笔记(四十六)——idea source root错乱

一般问题会出现在这里&#xff0c;写着别的项目的项目名&#xff0c;就是因为reload了别的项目的maven文件&#xff0c;借鉴了很多网上的说法&#xff0c;比如改project Structure里面改子项目的source。确实讲得挺好&#xff0c;就是不会用&#xff1b;所以最后的解决方案就是…

多云系列|10个关键的多云战略:简介

随着VMware继续向客户介绍多云问题以及VMware跨云服务在云智能计算历程中的优势&#xff0c;有一个问题经常被提及&#xff0c;“我如何开始&#xff1f;”。本博客系列旨在为客户提供指导&#xff0c;并回顾多云的十大领域&#xff0c;介绍我们应该关注哪些方面。此外&#xf…

引领UI设计生产工具进入AI时代,猿辅导旗下Motiff发布三大AI功能

近期&#xff0c;IXDC 2023国际体验设计大会在北京国家会议中心举行&#xff0c;共邀请全球800企业&#xff0c;1000名设计师共襄主题为“设计领导力”的创新盛会。作为全球最具影响力的创新设计大会之一&#xff0c;大会围绕创新、系统、商业三个关键维度&#xff0c;结合在AI…

MySQL优化第二篇

MySQL优化第二篇 性能分析小表驱动大表慢查询日志日志分析工具mysqldumpslow Show Profile进行SQL分析&#xff08;重中之重&#xff09; 七种JOIN 1、inner join &#xff1a;可以简写为join&#xff0c;表示的是交集&#xff0c;也就是两张表的共同数据 sql语句&#xff1a…

Recognize Anything:一个强大的图像标记模型

Recognize Anything是一种新的图像标记基础模型&#xff0c;与传统模型不同&#xff0c;它不依赖于手动注释进行训练;相反&#xff0c;它利用大规模的图像-文本对。RAM的开发过程包括四个关键阶段: 通过自动文本语义解析获得大规模的无标注图像标签。结合标题和标注任务&#…

网络电视盒子哪个品牌好?测评工作室深入分析电视盒子排名

电视盒子只需要联网就可以收看海量资源&#xff0c;不需要每月缴费&#xff0c;玩游戏、上网课、K歌都不在话下&#xff0c;对新手来说电视盒子如何选择&#xff1f;网络电视盒子哪个品牌好&#xff1f;工作室购入了最热销的15款电视盒子经过多角度对比后整理了电视盒子排名&am…

Linux内核源码分析 (B.x)Linux页表的映射

Linux内核源码分析 (B.x)Linux页表的映射 文章目录 Linux内核源码分析 (B.x)Linux页表的映射一、ARM32页表1、页表术语2、虚拟地址到物理地址转换3、一级页表项4、二级页表项 二、ARM64页表1、ARMv8-A架构2、4KB大小页4级映射 三、Linux内核中关于页表的函数和宏1、查询页表2、…

第三方ipad笔哪个牌子好用?开学季比较好用的电容笔

新学期有什么电容笔值得入手&#xff1f;这款平替电容笔&#xff0c;名为Apple Pencil&#xff0c;唯一的区别就是它的压力感应功能&#xff0c;同时拥有重力压感以及倾斜压感&#xff0c;而平替电容笔仅只拥有倾斜压感一种功能&#xff0c;不过它的压力感应能力很强&#xff0…

034:vue项目利用qrcodejs2生成二维码示例

第034个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

无涯教程-JavaScript - IF函数

描述 如果条件为TRUE,则IF函数返回一个值,如果条件为FALSE,则返回另一个值。 语法 IF (logical_test, value_if_true, [value_if_false]) 争论 Argument描述Required/Optionallogical_testThe condition you want to test.Requiredvalue_if_trueThe value that you want re…

藿香正气水泡脚火了!谁都可以“插一脚”吗?

白露身不露&#xff0c;寒露脚不露 眼见着凉凉秋意脚步将至 不少人又把泡脚养生提上了日程 不过&#xff0c;用藿香正气水泡脚你有尝试过吗&#xff1f; 有人说泡完能祛湿 可有人居然腹泻了这是怎么回事&#xff1f; &#x1f447;&#x1f447;&#x1f447; 藿香正气水…

足不出户游登封,千里之外访嵩山

阿里元境联合河南登封文旅打造首个虚实结合的文旅元宇宙 虚实结合元宇宙成效明显 说到河南嵩山&#xff0c;很多人会想到“五岳”。作为五岳之一&#xff0c;嵩山历史悠久&#xff0c;历史人文景观众多。徐霞客曾评价&#xff1a;“嵩山天下奥&#xff0c;少室险奇特。不游三皇…

【css】能被4整除 css :class,判断一个数能否被另外一个数整除,余数

判断一个数能否被另外一个数整除 一个数能被4整除的表达式可以表示为&#xff1a;num%40&#xff0c;其中&#xff0c;num为待判断的数&#xff0c;% 为取模运算符&#xff0c;为等于运算符。这个表达式的意思是&#xff0c;如果num除以4的余数为0&#xff0c;则返回true&…

uniapp——生成一个签字板

在开发项目中有签名/签字的需求&#xff0c;以下实现&#xff1a; <template><view class"new_file" v-if"showAutograph"><view class"popupBox"><view class"popupTopBox">签字板</view><canvas c…

SpringBoot-Actuator

SpringBoot-Actuator 1 综合 Spring Boot Actuator 模块 详解&#xff1a;健康检查&#xff0c;度量&#xff0c;指标收集和监Spring boot——Actuator 详解Spring Boot Actuator官网 - 最新Spring Boot Actuator官网-2.3.x关于spring-boot-actuator的httptrace端点不生效问题…

焊接符号学习

欧美焊接符号举例 4.5------表示焊点直径 【3】------根据图示说明&#xff0c;表示此项为CC项或者SC项 6-------表示此处为第六CC项或者SC项 BETWEEN①AND②------表示①件和②件俩点之间的焊点 12X------表示俩点之间的焊点个数为12个 日本焊接符号举例 A------根据图示&…

IO和进程day08(消息队列、共享内存、信号灯集)

今日任务 1.代码 inversion.c #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include …

革命性创新:RFID技术引领汽车零部件加工新时代

革命性创新&#xff1a;RFID技术引领汽车零部件加工新时代 RFID&#xff08;Radio Frequency Identification&#xff0c;射频识别&#xff09;技术是一种利用无线电频率进行自动识别的技术&#xff0c;可以快速、准确地识别物体并获取相关数据。在汽车零部件加工中&#xff0…