主頁 > 資料庫 > Thymeleaf spring保存新物件而不是更新

Thymeleaf spring保存新物件而不是更新

2022-05-09 03:46:12 資料庫

我要求一個提示。我在互聯網上搜索了很長時間的問題的解決方案,但我已經絕望了。我希望更新操作更新表中的記錄,而不是撰寫新記錄。對不起我的代碼我是初學者。

這是我的代碼:

  @Entity
public class Job {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @NotEmpty(message = "You must enter the title.")
    @Size(min=2, max = 30, message = "You must add a description with length beetwen 2 and 30 letters.")
    @Column(name = "title")
    private String title;

    @NotEmpty(message = "You must enter the description.")
    @Size(min=10, max = 150, message = "You must add a description with length beetwen 10 and 150 letters.")
    @Column(name = "description")
    private String description;

    @NotEmpty(message = "You must select profession")
    @Column(name = "profession")
    private String profession;

    @NotEmpty(message = "You must select status")
    @Column(name = "status")
    private String status;

    @NotEmpty(message = "You must select location")
    @Column(name = "location")
    private String location;

    @CreationTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "publishDate")
    private Date publishDate;
  • getter 設定器和構造器

服務層:

@Service
public class JobServiceImpl implements JobService {

    @Autowired
    private JobRepository repository;

    @Override
    public Job saveJob(Job job) {

        return repository.save(job);
    }


    @Override
    public Job getJobById(Long id) throws JobNotFoundException {

        Optional<Job> optional = repository.findById(id);

        if (optional.isPresent()) {
            return optional.get();
        } else {
            throw new JobNotFoundException("Job with id: "   id   " not found ");
        }

    }

    @Override
    public void deleteJobById(Long id) throws JobNotFoundException {
        repository.delete(getJobById(id));

    }

    @Override
    public void updateJob(Job job) {

        repository.save(job);
    }

控制器方法:

@GetMapping("/edit")
    public String getEditPage(Model model, RedirectAttributes attributes, @RequestParam Long id) {
        String page = null;
        initModel(model);
        try {
            Job job = service.getJobById(id);
            model.addAttribute("job", job);
            page = "editJobPage";
        } catch (JobNotFoundException e) {
            e.printStackTrace();
            attributes.addAttribute("message", e.getMessage());
            page = "redirect:getAllJobs";
        }
        return page;
    }

    @PostMapping("/edit")
    public String updateJob(@ModelAttribute Job job, Model model, RedirectAttributes attributes) {
        initModel(model);
        service.updateJob(job);
        Long id = job.getId();
        attributes.addAttribute("message", "Job advertisement with id: '"   id   "' is updated successfully !");
        return "redirect:getAllJobs";
    }

和視圖層:

<html xmlns:th="https://www.thymeleaf.org">
<head>
<link rel="stylesheet"
    href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" />
<script
    src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet"
    href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" />
</head>
<body>
    <div class="col-md-12">
        <div class="container">

            <div class="card">
                <div class="card-header text-center text-black">
                    <h3>Edit advertisement</h3>
                </div>
                <div class="card-body">
                    <form action="/job/edit" th:action="@{/job/edit}" th:object="${job}"
                        method="POST" id="editJobPage">
                        <div class="row">
                            <div class="col-2">
                                <label for="title"><b>Title</b></label>
                                
                            </div>
                            <div class="col-6">
                                <input type="text" class="form-control"
                                    name="title" th:field="*{title}"><br />
                            
                            </div>
                        </div>
                        <br />
                        <div class="row">
                            <div class="col-2">
                                <label for="location"><b>Location</b></label>
                            </div>
                            <select id="location" name="location">
                                <option value="" disabled selected>Select location</option>
                                <option th:each="location : ${locationsList}"
                                    th:text="${location}" />
                            </select> 
                            

                        </div>
                        <br />
                        <div class="row">
                            <div class="col-2">
                                <label for="description"><b>Description</b></label>
                            </div>
                            <div class="col-6">
                                <textarea class="form-control" rows="3" 
                                     name="description"
                                    th:field="*{description}"></textarea>
                                <br />
                    
                            </div>
                        </div>
                        <br />
                        <div class="row">
                            <div class="col-2">
                                <label for="profession"><b>Profession</b></label>
                            </div>
                            <select name="profession">
                                <option value="" disabled selected>Select profession</option>
                                <option th:each="profession : ${professionsList}"
                                    th:text="${profession}" />

                            </select>
                    

                        </div>
                        <br />
                        <div class="row">
                            <div class="col-2">
                                <label for="status"><b>Status</b></label>
                            </div>
                            <select name="status">
                                <option value="" disabled selected>Select status</option>
                                <option th:each="status : ${statusList}" th:text="${status}" />

                            </select>
                    

                        </div>
                        <br />

                        <button type="submit" class="btn btn-success">
                            Update Advertisement <i class="fa fa-plus-square"
                                aria-hidden="true"></i>
                        </button>
                        
                    </form>
                </div>
                <div th:if="${message!=null}" class="card-footer bg-white text-info">
                    <span th:text="${message}"></span>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

新錯誤:

2022-05-07 15:51:48.027 DEBUG 29284 --- [nio-8080-exec-7] org.hibernate.SQL                        : select job0_.id as id1_0_0_, job0_.description as descript2_0_0_, job0_.location as location3_0_0_, job0_.profession as professi4_0_0_, job0_.publish_date as publish_5_0_0_, job0_.status as status6_0_0_, job0_.title as title7_0_0_ from job job0_ where job0_.id=?
2022-05-07 15:51:48.027 TRACE 29284 --- [nio-8080-exec-7] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [BIGINT] - [0]
com.example.job.advertisements.web.app.exceptionHandler.JobNotFoundException: Job with id: 0 not found 
    at com.example.job.advertisements.web.app.service.JobServiceImpl.getJobById(JobServiceImpl.java:39)
    at com.example.job.advertisements.web.app.service.JobServiceImpl.updateJob(JobServiceImpl.java:53)
    at com.example.job.advertisements.web.app.controller.JobController.updateJob(JobController.java:132)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:67)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:829)
2022-05-07 15:51:48.049 DEBUG 29284 --- [nio-8080-exec-8] org.hibernate.SQL                        : select job0_.id as id1_0_, job0_.description as descript2_0_, job0_.location as location3_0_, job0_.profession as professi4_0_, job0_.publish_date as publish_5_0_, job0_.status as status6_0_, job0_.title as title7_0_ from job job0_
2022-05-07 15:51:48.050 TRACE 29284 --- [nio-8080-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_0_] : [BIGINT]) - [1]

uj5u.com熱心網友回復:

一種方法是首先從存盤庫中獲取與您的作業引數匹配的作業,然后在將其保存(更新)到資料庫之前對其應用必要的更改。

@Override
public void updateJob(Job job) {
    //I assume  job.getId() returns an integer here, otherwise use another field that uniquely identifies a job
    Job dbJob = getJobById(job.getId());
    if(dbJob != null){
      
       dbJob.setStatus(job.getStatus());
       dbJob.setTitle(job.getTitle());
       //set all the other fields except id
       
     repository.save(dbJob);//this updates an existing job record
    }else{
      repository.save(job);//this inserts a new job 
    }
   
}

更新:該錯誤是由您的方法 getJobById 引發的。當然,您可以更改該方法,以便在存盤庫中找不到記錄時回傳 null(而不是像現在這樣拋出例外)。請注意,本例中的作業 ID 為 0,并且存盤庫中不存在具有該 ID (0) 的記錄。如果要更新記錄,則必須提供資料庫中已經存在的唯一 ID(無論是 id 還是其他)。我猜您沒有將 Job.id 顯式設定為 0,而是將 id 初始化為其默認值,即 0。

uj5u.com熱心網友回復:

你看到這個的原因是你的持久化提供者(大概是休眠)不知道你想更新哪個版本,所以它把它當作一個新物件。

對于您的模型,只需添加

@Version
private Long version;

你有什么應該作業。該版本現在將成為物件的一部分,當您的更新請求回傳時,如果填充了版本欄位,休眠將知道它需要更新哪一行。

此外,您需要將 id 和版本添加到您的視圖層(它們可以是隱藏欄位),它們在您的視圖中看起來像這樣

<input type="hidden" name="id" th:field="*{id}">
<input type="hidden" name="version" th:field="*{version}">

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470359.html

標籤:爪哇 mysql 春天 百里香叶

上一篇:在javaspring中,如何最好地“改變生產中的秘密”?

下一篇:轉向SpringBoot。從舊的主類遷移邏輯

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more