




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第SpringBoot分頁的實現(xiàn)與long型id精度丟失問題的解決方案介紹目錄一.分頁查詢的實現(xiàn)二.禁/啟用員工賬號三.數(shù)值轉(zhuǎn)換器的使用
一.分頁查詢的實現(xiàn)
在做分頁查詢時流程如下:
頁面發(fā)送ajax請求,將分頁查詢參數(shù)(page、pageSize、name)提交到服務(wù)端,服務(wù)端Controller層接收頁面提交的數(shù)據(jù)并調(diào)用Service層查詢數(shù)據(jù),Service調(diào)用Mapper操作數(shù)據(jù)庫,查詢分頁數(shù)據(jù),Controller層將查詢到的分頁數(shù)據(jù)響應(yīng)給頁面
具體實現(xiàn):
1.設(shè)置分頁攔截器,拿到對象當(dāng)作Bean交給Spring管理
@Configuration
publicclassMyBatisPlusConfig{
@Bean
publicMybatisPlusInterceptormybatisPlusInterceptor(){
MybatisPlusInterceptormybatisPlusInterceptor=newMybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(newPaginationInnerInterceptor());
returnmybatisPlusInterceptor;
2.Controller層中創(chuàng)建分頁對象,編寫分頁條件
@GetMapping("/page")
publicRPagepage(intpage,intpageSize,Stringname){
("page={},pageSize={},name={}",page,pageSize,name);
//構(gòu)造分頁構(gòu)造器
Pagepage1=newPage(page,pageSize);
//構(gòu)造條件構(gòu)造器
LambdaQueryWrapperEmployeelqw=newLambdaQueryWrapper();
//分頁條件
lqw.like(StringUtils.isNotEmpty(name),Employee::getName,name);
//添加排序
lqw.orderByDesc(Employee::getUpdateTime);
//執(zhí)行查詢
employeeService.page(page1,lqw);
//返回分頁頁面信息
returnR.success(page1);
}
返回的分頁信息響應(yīng)結(jié)果(response)如下:
推薦一個json格式轉(zhuǎn)換神器:JSON轉(zhuǎn)換神器
{!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E--"code":1,"msg":null,"data":{!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E--"records":[{!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E--"id":"1576900298836086785","username":,"name":"懶羊羊","passsword":"e10adc3949ba59abbe56e057f20f883e","phone":,"sex":"1","idNumber":,"status":0,"createTime":"2025-10-0319:41:43","updateTime":"2025-10-0623:01:27","createUser":"1","updateUser":"1"},{!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E--"id":"1576934844579266561","username":"24553880","name":"懶羊羊","passsword":"e10adc3949ba59abbe56e057f20f883e","phone":,"sex":"1","idNumber":,"status":1,"createTime":"2025-10-0321:59:00","updateTime":"2025-10-0623:01:17","createUser":"1","updateUser":"1"}],"total":4,"size":2,"current":1,"orders":[],"optimizeCountSql":true,"hitCount":false,"countId":null,"maxLimit":null,"searchCount":true,"pages":2},"map":{!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E--}}
二.禁/啟用員工賬號
在員工管理列表頁面,可以對某個員工賬號進行啟用或者禁用操作。賬號禁用的員工不能登錄系統(tǒng),啟用后的員工可以正常登錄,只有管理員(admin用戶)可以對其他普通用戶進行啟用、禁用操作,所以普通用戶登錄系統(tǒng)后啟用、禁用按鈕不顯示。
分析流程不難發(fā)現(xiàn),修改員工狀態(tài)是管理員的權(quán)限,對狀態(tài)的操作實際就是對employee表中的status字段進行update操作,在Controller層中我們需要編寫相關(guān)的方法來處理來自前端的這一請求,就像這樣:
@PutMapping
publicRStringupdate(HttpServletRequestrequest,@RequestBodyEmployeeemployee){
(employee.toString());
employee.setUpdateTime(LocalDateTime.now());
LongempID=(Long)request.getSession().getAttribute("employee");
employee.setUpdateUser(empID);
employeeService.updateById(employee);
returnR.success("員工信息修改成功");
Controller層中的update方法處理了請求,但是當(dāng)我再次刷新頁面發(fā)現(xiàn)其狀態(tài)并沒有改變!
通過Debug一步一步調(diào)試時,發(fā)現(xiàn)從Session里拿到的empID和數(shù)據(jù)庫里的字段id并不對應(yīng)分別是(15769348445792665611576934844579266600),而二者對應(yīng)起來才是能夠準確執(zhí)行update方法的關(guān)鍵
于是,進行排查,查看后端給頁面響應(yīng)的數(shù)據(jù)(response),發(fā)現(xiàn)與表中的id是對應(yīng)的,這說明后端沒問題
總的來說,后端傳給前端的id沒問題且與表中對應(yīng),但是前端返回給后端的id卻與之不一致了,問題出在哪?肯定是前端啊
原來啊我們傳提的是一個Long型的數(shù)值(19位),JS接收數(shù)據(jù)并進行處理后發(fā)生了精度丟失!JS只能精確處理前16位,后面的數(shù)字做了四舍五入處理
而把后端響應(yīng)的數(shù)值轉(zhuǎn)換成字符串即可避免這種現(xiàn)象,具體則是通過數(shù)值轉(zhuǎn)換器來實現(xiàn)!
三.數(shù)值轉(zhuǎn)換器的使用
提供對象轉(zhuǎn)換器JacksonobjectMapper,基于Jackson進行Java對象到j(luò)son數(shù)據(jù)的轉(zhuǎn)換,在此消息轉(zhuǎn)換器中使用提供的對象轉(zhuǎn)換器進行java對象到j(luò)son數(shù)據(jù)之間的相互轉(zhuǎn)換(序列化與反序列化)
publicclassJacksonObjectMapperextendsObjectMapper{
publicstaticfinalStringDEFAULT_DATE_FORMAT="yyyy-MM-dd";
publicstaticfinalStringDEFAULT_DATE_TIME_FORMAT="yyyy-MM-ddHH:mm:ss";
publicstaticfinalStringDEFAULT_TIME_FORMAT="HH:mm:ss";
publicJacksonObjectMapper(){
super();
//收到未知屬性時不報異常
this.configure(FAIL_ON_UNKNOWN_PROPERTIES,false);
//反序列化時,屬性不存在的兼容處理
this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
SimpleModulesimpleModule=newSimpleModule()
.addDeserializer(LocalDateTime.class,newLocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
.addDeserializer(LocalDate.class,newLocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
.addDeserializer(LocalTime.class,newLocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
.addSerializer(BigInteger.class,ToStringSerializer.instance)
.addSerializer(Long.class,ToStringSerializer.instance)//將Long轉(zhuǎn)換成String
.addSerializer(LocalDateTime.class,newLocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
.addSerializer(LocalDate.class,newLocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
.addSerializer(LocalTime.class,newLocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
//注冊功能模塊例如,可以添加自定義序列化器和反序列化器
this.registerModule(simpleModule);
}
而我們要做的就是要把他寫到配置類里,擴展mvc框架的消息轉(zhuǎn)換器組件,用來將方法中返回的R對象結(jié)果轉(zhuǎn)換成字符串,以輸出流的方式返回給頁面
在配置類中確定好自己使用的轉(zhuǎn)換器類型并設(shè)置順序:
/**
*擴展mvc框架的消息轉(zhuǎn)換器組件
@Override
protectedvoidextendMessageConverters(ListHttpMessageConverterconverters){
//創(chuàng)建消息轉(zhuǎn)換器對象
MappingJackson2HttpMessageConvertermj2mc=newMappingJackson2HttpMessag
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋪裝材料試驗相關(guān)試題及答案
- 信息摘錄三級數(shù)據(jù)庫考試試題及答案
- 公司行為規(guī)范管理制度
- 臺燈廠家儲存管理制度
- 工作職責(zé)授權(quán)管理制度
- 行政管理與智能化應(yīng)用的結(jié)合試題及答案
- 衛(wèi)生系統(tǒng)項目管理制度
- 發(fā)票系統(tǒng)單據(jù)管理制度
- 小區(qū)魚塘養(yǎng)護管理制度
- 工程公司公司管理制度
- CDFI醫(yī)師、技師彩超上崗證-單項選擇題(試題)
- 病理檢驗技術(shù)課程設(shè)計
- 世界歷史第二冊全部教案
- 市政道路及設(shè)施零星養(yǎng)護服務(wù)技術(shù)方案(技術(shù)標)
- 山東省青島市市北區(qū)2025屆數(shù)學(xué)七年級第一學(xué)期期末監(jiān)測試題含解析
- 《中國心力衰竭診斷和治療指南2024》解讀(總)
- 北京市通州區(qū)2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題(無答案)
- 2024年江蘇省南京市玄武區(qū)玄武外國語學(xué)校八年級下學(xué)期物理期末模擬卷1
- 河砂、碎石組織供應(yīng)、運輸、售后服務(wù)方案
- 華為企業(yè)架構(gòu)設(shè)計方法及實例
- 免疫學(xué)實驗技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年哈爾濱醫(yī)科大學(xué)大慶校區(qū)
評論
0/150
提交評論