學習記錄:DAY29

項目開發日志:技術實踐與成長之路

前言

回顧這幾天的狀態,熱情總是比我想象中更快被消耗完。比起茫然徘徊的小丑,我更希望自己是對著風車沖鋒的瘋子。
今天繼續深入項目的實際業務。
狀態好點的時候,再看自己EMO時寫的東西,尬死我了,你真的是要尬死我😰。

日程

5.11

那天忘記記錄了,不過我沒有偷懶。

5.12

寫了一個下午,不用想建表,不用想接口文檔就是爽,昨天的我,你的苦沒有白吃!十點半,把業務需求寫得七七八八了,估計后天就能開始做前端。

5.13

我就不該看別人的什么感人愛情小故事😭只有對比別人的幸福的時候才能深刻感覺到自己的破防。(還不知道把耳機丟哪里了,隔幾個月就要為藍牙耳機行業做貢獻😫)。被token驗證卡了,想用AOP,但是實際實現起來特別特別麻煩,先看看能不能弄出來吧。

5.16

有幾天沒有寫blog了,我覺得日常性的記錄最好還是寫寫吧。今天去當了一個會議的觀眾,我果然還是暈會議桌。前端在寫了,在寫了,快的話明天能寫完,然后就是修修界面。最好周日能把DOCKERFILE跑出來。

5.17

emmmmm,昨晚上又熬夜了,最近太太太懶散了。下午,前端基本跑完,然后要一個個微調了。wc,我好像有不少作業沒寫啊😰。改了一晚上,改得差不多了,明天想想數據加密的問題。

5.18

嘗試了一下做數據加密,感覺開銷很大,對原理也不是太明白,先掛到分支,把這個版本的服務器給部署了先。

5.19

昨天的部署沒有成功,今天又弄了一天,總算成功了,還是有點小成就感的。但是錯過了學科作業,還不能補交,拖延癥發力了。警鐘長鳴:能及時完成的事情要及時完成(指寫blog,今天linux部署docker的部分就沒有記到)。

學習內容

省流

  1. 表與實際業務的分析
  2. 事務中獲取自增id
  3. InvocationTargetException
  4. MySQL的tinyint(1)細節
  5. maven的聚合jar打包

1. 表與實際業務的分析

經過思考,我覺得以混合劃分法來劃分接口文檔比較合理。以下是學生和教師接口文檔的劃分:

學生接口文檔
  • 課程相關
    • 獲取課程列表
    • 獲取課程詳情
  • 練習相關
    • 獲取練習列表
    • 獲取練習詳情
    • 提交練習答案
  • 做題相關
    • 獲取題目詳情
    • 保存臨時答案
    • 提交最終答案
教師接口文檔
  • 練習管理
    • 創建練習
    • 修改練習
    • 復用練習
    • 刪除練習
    • 查詢練習列表
  • 題目管理
    • 添加新題目
    • 從題庫選擇題目
    • 刪除題目
  • 批改相關
    • 獲取待批改列表
    • 獲取學生答題詳情
    • 提交批改結果
    • 發送提醒通知

所以按照這樣的劃分來書寫接口文檔。

查詢所屬的課程

學生 -> 學生班級關聯 -> 班級 -> 練習班級關聯 -> 練習 -> 課程。這樣看起來是不是特別麻煩,但是我們可以直接生成視圖!視圖是數據庫中的一個虛擬表,不存儲實際數據,實際是一個預定義的查詢。

比如創建學生課程視圖:

CREATE VIEW v_student_courses AS
SELECT u.id AS student_id,u.name AS student_name,c.id AS course_id,c.name AS course_name,s.id AS semester_id,s.name AS semester_name,s.start_time AS semester_start,s.end_time AS semester_end,COUNT(DISTINCT e.id) AS exercise_count
FROM user u
JOIN student_class sc ON u.id = sc.student_id
JOIN exercise_class ec ON sc.class_id = ec.class_id
JOIN exercise e ON ec.exercise_id = e.id
JOIN course c ON e.course_id = c.id
JOIN semester s ON c.semester_id = s.id
WHERE u.role = 0  -- 學生角色
GROUP BY u.id, c.id, s.id;

然后就可以通過對視圖進行查詢:

-- 查詢某學生的所有課程
SELECT * FROM v_student_courses WHERE student_id = 123;

2. 事務中獲取自增id

我之前以為對事務存在一定的誤解,認為事務是同時處理sql語句,其實不是,這更像是將更改保存在了一個緩沖區。對于同一個連接,是可以獲取到上一個插入操作產生的自增id的(盡管它還沒有實際插入表中)。

public static Integer getLastInsertId() throws SQLException, FileNotFoundException {Connection conn = getConnection();boolean isTxActive = ConnectionContext.isActive();try (Statement stmt = conn.createStatement()){ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");if (rs.next()) {return rs.getInt(1);}}catch (SQLException e){throw new SQLException("無法獲取最后插入ID");}finally {if (conn != null && !isTxActive) {conn.close();}}return null;
}

3. InvocationTargetException

InvocationTargetException是反射調用時的“包裝異常”。在通過反射調用方法時,目標方法內部拋出了異常,反射機制會將這個異常封裝成InvocationTargetException拋出。

private Throwable extractRootCause(Throwable e) {Throwable rootCause = e;while (rootCause instanceof InvocationTargetException && rootCause.getCause() != null) {rootCause = rootCause.getCause();}return rootCause;
}

4. MySQL的tinyint(1)細節

MySQL 驅動(如 mysql-connector-java)會將 tinyint(1) 自動映射為 Boolean。這是 JDBC 的默認行為,tinyint(1) 被識別為“類似布爾值”的類型(0 → false,非 0 → true)。

5. maven的聚合jar打包

配置maven-shade-plugin插件,將項目及其所有依賴打包成一個單獨的JAR文件。

<build><resources> <!-- 資源文件  默認復制到target/classes --><resource><directory>src/main/resources</directory> </resource><resource><directory>src/main/webapp</directory><targetPath>webapp</targetPath> <!-- 指定復制到webapp --></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.4</version><executions><execution><phase>package</phase><goals><goal>shade</goal> <!-- 打包所有依賴 --></goals><configuration><transformers> <!-- 設置 JAR 文件的入口 --><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.anyview.xiazihao.TomcatApplication</mainClass></transformer></transformers><filters> <!-- 過濾簽名 --><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin></plugins>
</build>

結語

這是一個時間跨度非常長的blog(已經算是半個日記了)。以后就算沒有實際內容,也盡量保持這種形式的更新吧。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83723.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83723.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kotlin Android AccessibilityService 無障礙入門

安卓的無障礙模式可以很好的進行自動化操作以幫助視障人士自動化完成一些任務。 無障礙可以做到&#xff0c;監聽屏幕變化&#xff0c;朗讀文本&#xff0c;定位以及操作控件等。 以下從配置到代碼依次進行無障礙設置與教程。 一、配置 AndroidManifest.xml 無障礙是個服務…

【Vue篇】數據秘語:從watch源碼看響應式宇宙的蝴蝶效應

目錄 引言 一、watch偵聽器&#xff08;監視器&#xff09; 1.作用&#xff1a; 2.語法&#xff1a; 3.偵聽器代碼準備 4. 配置項 5.總結 二、翻譯案例-代碼實現 1.需求 2.代碼實現 三、綜合案例——購物車案例 1. 需求 2. 代碼 引言 &#x1f4ac; 歡迎討論&#…

WPS中代碼段的識別方法及JS宏實現

在WPS中&#xff0c;文檔的基本結構可以通過對象模型來理解&#xff1a; &#xff08;1&#xff09;Document對象&#xff1a;表示整個文檔 &#xff08;2&#xff09;Range對象&#xff1a;表示文檔中的一段連續區域&#xff0c;可以是一個字符、一個句子或整個文檔 &#…

el-tree結合el-tree-transfer實現穿梭框里展示樹形數據

參考文章&#xff1a;我把他的彈框單拉出來一個獨立文件作為組件方便使用&#xff0c;遇到一些問題記錄一下。 testComponet.vue <template><div class"per_container"><div class"per_con_left"><div class"per_con_title&q…

Go 后端中雙 token 的實現模板

下面是一個典型的 Go 后端雙 Token 認證機制 實現模板&#xff0c;使用 Gin 框架 JWT Redis&#xff0c;結構清晰、可拓展&#xff0c;適合實戰開發。 項目結構建議 /utils├── jwt.go // Access & Refresh token 的生成和解析├── claims.go // 從請求…

Typescript學習教程,從入門到精通,TypeScript 對象語法知識點及案例代碼(7)

TypeScript 對象語法知識點及案例代碼 TypeScript 是 JavaScript 的超集&#xff0c;提供了靜態類型檢查和其他增強功能。在 TypeScript 中&#xff0c;對象是面向對象編程&#xff08;OOP&#xff09;的基礎。 一、對象概述 在 TypeScript 中&#xff0c;對象是屬性的集合&a…

應用BERT-GCN跨模態情緒分析:貿易緩和與金價波動的AI歸因

本文運用AI量化分析框架&#xff0c;結合市場情緒因子、宏觀經濟指標及技術面信號&#xff0c;對黃金與美元指數的聯動關系進行解析&#xff0c;揭示本輪貴金屬回調的深層驅動因素。 周三&#xff0c;現貨黃金價格單日跌幅達2.1%&#xff0c;盤中觸及3167.94美元/盎司關鍵價位&…

命令行登錄 MySQL 報 Segmentation fault 故障解決

問題描述&#xff1a;對 mysql8.0.35 源碼進行 make&#xff0c;由于一開始因為yum源問題少安裝依賴庫 庫&#xff0c;在鏈接時遇到錯誤 undefined reference to&#xff0c;后來安裝了相關依賴庫&#xff0c;再次 make 成功。于是將 mysqld 啟動&#xff0c;再用 mysql -u roo…

Axure設計數字鄉村可視化大屏:構建鄉村數據全景圖

今天&#xff0c;讓我們一同深入了解由Axure設計的數字鄉村可視化大屏&#xff0c;看看它如何通過精心的布局和多樣化的圖表類型&#xff0c;將鄉村的各類數據以直觀、易懂的方式呈現出來&#xff0c;為鄉村管理者提供有力的數據支持。 原型效果預覽鏈接&#xff1a;Axure數字鄉…

3D個人簡歷網站 4.小島

1.模型素材 在Sketchfab上下載狐貍島模型&#xff0c;然后轉換為素材資源asset&#xff0c;嫌麻煩直接在網盤鏈接下載素材&#xff0c; Fox’s islandshttps://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907https://gltf.pmnd.rs/ 素材夸克網盤&a…

智能開發工具PhpStorm v2025.1——增強AI輔助編碼功能

PhpStorm是一個輕量級且便捷的PHP IDE&#xff0c;其旨在提高用戶效率&#xff0c;可深刻理解用戶的編碼&#xff0c;提供智能代碼補全&#xff0c;快速導航以及即時錯誤檢查。可隨時幫助用戶對其編碼進行調整&#xff0c;運行單元測試或者提供可視化debug功能。 立即獲取PhpS…

Spark 的運行模式(--master) 和 部署方式(--deploy-mode)

Spark 的 運行模式&#xff08;--master&#xff09; 和 部署方式&#xff08;--deploy-mode&#xff09;&#xff0c;兩者的核心區別在于 資源調度范圍 和 Driver 進程的位置。 一、核心概念對比 維度--master&#xff08;運行模式&#xff09;--deploy-mode&#xff08;部署…

sqli—labs第八關——布爾盲注

一&#xff1a;確定注入類型 按照我們之前的步驟來 輸入 ?id1 and 11-- ?id1 and 12-- 界面正常 第二行界面異常空白 所以注入類型為單引號閉合型 二&#xff1a; 布爾盲注 1.判斷是否使用條件 &#xff08;1&#xff09;&#xff1a;存在注入但不會直接顯示查詢結果 …

ARP 原理總結

&#x1f310; 一、ARP 原理總結 ARP&#xff08;Address Resolution Protocol&#xff09;是用于通過 IP 地址解析 MAC 地址的協議&#xff0c;工作在 鏈路層 與 網絡層之間&#xff08;OSI 模型的第三層與第二層之間&#xff09;。 &#x1f501; ARP通信過程&#xff1a; …

SpringCloud——EureKa

目錄 1.前言 1.微服務拆分及遠程調用 3.EureKa注冊中心 遠程調用的問題 eureka原理 搭建EureKaServer 服務注冊 服務發現 1.前言 分布式架構&#xff1a;根據業務功能對系統進行拆分&#xff0c;每個業務模塊作為獨立項目開發&#xff0c;稱為服務。 優點&#xff1a; 降…

機頂盒刷機筆記

疑難雜癥解決 hitool線刷網口不通tftp超時--》關閉防火墻cm201-2卡刷所有包提示失敗abort install--》找個卡刷包只刷fastboot分區再卡刷就能通過了&#xff08;cm201救磚包 (M8273版子&#xff09;&#xff09; 刷機工具 海兔燒錄工具HiTool-STB-5.3.12工具&#xff0c;需要…

Linux動靜態庫制作與原理

什么是庫 庫是寫好的現有的&#xff0c;成熟的&#xff0c;可以復用的代碼。現實中每個程序都要依賴很多基礎的底層庫&#xff0c;不可能每個人的代碼都從零開始&#xff0c;因此庫的存在意義非同尋常。 本質上來說庫是一種可執行代碼的二進制形式&#xff0c;可以被操作系統…

如何通過小智AI制作會說話的機器人玩具?

一、硬件準備與組裝 1. 核心硬件選擇 主控芯片&#xff1a;選擇支持無線網絡連接、音頻處理和可編程接口的嵌入式開發板 音頻模塊&#xff1a;配備拾音麥克風與小型揚聲器&#xff0c;確保語音輸入/輸出功能 顯示模塊&#xff1a;選擇適配的交互顯示屏用于可視化反饋 擴展模…

如何控制郵件發送頻率避免打擾用戶

一、用戶行為 監測用戶與郵件的互動數據&#xff0c;如打開率、點擊率下滑或退訂申請增多&#xff0c;可能是發送頻率過高的警示信號。利用郵件營銷平臺的分析工具&#xff0c;識別這些指標的變動趨勢&#xff0c;為調整提供依據。 二、行業特性與受眾差異 不同行業用戶對郵…

定積分的“偶倍奇零”性質及其使用條件

定積分的“偶倍奇零”性質是針對對稱區間上的奇偶函數積分的重要簡化方法。以下是其核心內容和應用要點&#xff1a; ?一、基本性質 ?偶函數&#xff08;偶倍&#xff09;? 若 f(x) 在 [?a,a] 上為偶函數&#xff08;即 f(?x)f(x)&#xff09;&#xff0c;則&#xff1a; …