日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

spring boot参数为日期的查询

發(fā)布時(shí)間:2025/3/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring boot参数为日期的查询 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

早先做參數(shù)傳遞實(shí)驗(yàn)的時(shí)候忽略了日期類(lèi)型,導(dǎo)致要用的時(shí)候踩坑不斷。因?yàn)槭菍W(xué)習(xí)筆記的關(guān)系,所以里面都只是截取關(guān)鍵的代碼進(jìn)行記錄。

準(zhǔn)備階段

因?yàn)橐玫?#64;JsonFormat注解和工具類(lèi)DateUtils,所以先在pom.xml中添加相關(guān)包的依賴(lài):

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.6</version> </dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version> </dependency>

我們平時(shí)建項(xiàng)目的時(shí)候,最好是建帶Maven的項(xiàng)目。這樣我們?cè)谟玫奖镜貨](méi)有的包的時(shí)候,只需要在pom.xml文件中添加一句依賴(lài)就可以了,否則就需要自己到網(wǎng)上去下載再手動(dòng)導(dǎo)入。添加依賴(lài)可以理解為在項(xiàng)目中導(dǎo)入相關(guān)的包,可以為了我們節(jié)省大量的開(kāi)發(fā)時(shí)間。

核心部分

1. Entity層

在實(shí)體類(lèi)的日期屬性上,我們需要加上@JsonFormat注解,利用它的pattern屬性來(lái)進(jìn)行時(shí)間的格式化,利用timezone屬性來(lái)解決時(shí)差問(wèn)題。“GMT+8”表示我們?cè)跂|八區(qū),不然我們收到前端傳來(lái)的時(shí)間有可能相差8個(gè)小時(shí)。

@Column(name = "drop_date") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date dropDate;

2. dao層

不得不說(shuō),這個(gè)自動(dòng)生成SQL語(yǔ)句是真的方便,不僅日期類(lèi)型也能操作(好吧,數(shù)據(jù)庫(kù)中存在的字段類(lèi)型都可以),還不會(huì)因?yàn)閿?shù)據(jù)庫(kù)的不同而出現(xiàn)問(wèn)題(支持跨平臺(tái))。
至于生成SQL語(yǔ)句的規(guī)則,再掛一波文檔:官方文檔

public interface MessageRepository extends JpaRepository<MessageAlarmRecord, Long> {// where dropDate <= startDatepublic List<Message> findByDropDateLessThanEqual(Date startDate); // where dropDate >= startDatepublic List<Message> findByDropDateGreaterThanEqual(Date statDate);// where startDate <= dropDate and dropDate <= endDatepublic List<Message> findByDropDateBetween(Date startDate, Date endDate); //功能同上,可以用And關(guān)鍵字來(lái)進(jìn)行其他查詢(xún)條件的拼接public List<Message> findByDropDateGreaterThanEqualAndDropDateLessThanEqual(Date startDate, Date endDate); }

3. controller層

以為到這里就沒(méi)什么問(wèn)題了,其實(shí)坑才剛開(kāi)始……

  • 不能用Date類(lèi)型直接去接參數(shù),必須先用String類(lèi)對(duì)象去接到參數(shù) ,然后再用DateUtils的pasteDate函數(shù)將其轉(zhuǎn)換為Date類(lèi)對(duì)象。
  • 因?yàn)閷?shí)體類(lèi)中包含日期屬性,所以在添加數(shù)據(jù)的時(shí)候也不能直接用實(shí)體類(lèi)去獲取前端傳過(guò)來(lái)的參數(shù)
  • 一般做項(xiàng)目的時(shí)候需要規(guī)定前端以什么方式給后端傳參,比如說(shuō)json、form表單,url等,因?yàn)椴煌膫鲄⒎绞綍?huì)對(duì)應(yīng)不同的注解。

  • 本次是以json方式傳參,這里用@RequestBody + Map接收前端傳過(guò)來(lái)的鍵值對(duì)。里面用到的DateUtils.parseDate()函數(shù)的第一個(gè)參數(shù)是表示時(shí)間的字符串,第二個(gè)參數(shù)是時(shí)間的格式(詳情可以參照SimpleDateFormat類(lèi)時(shí)間格式的寫(xiě)法)。

    @RequestMapping(path = "/find3")public List<Message> findBetween(@RequestBody Map<String, Object> params) {Date startDate = null;Date endDate = null;try {//第一個(gè)參數(shù)是表示時(shí)間的字符串,第二個(gè)參數(shù)是時(shí)間的格式startDate = DateUtils.parseDate((String)params.get("startDate"), "yyyy-MM-dd HH:mm:ss");endDate = DateUtils.parseDate((String)params.get("endDate"), "yyyy-MM-dd HH:mm:ss");} catch (ParseException e) {e.printStackTrace();}return marRepository.findByDropDateBetween(startDate, endDate);}

    測(cè)試時(shí)傳遞的數(shù)據(jù):

    {"startDate":"2019-05-23 14:35:12","endDate":"2019-08-12 11:02:00" }

    參考資料

  • https://www.sojson.com/blog/246.html (關(guān)于@JsonFormat)
  • https://blog.csdn.net/yaomingyang/article/details/79142201 (關(guān)于DateUtils,湊合看)
  • 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的spring boot参数为日期的查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。