Spring筆記06-數據持久化

在 Spring 中,數據持久化是將應用程序中的數據保存到持久化存儲(如數據庫)中的過程 ,主要通過以下幾種方式實現:

1. JDBC(Java Database Connectivity)

  • 原理:JDBC 是 Java 訪問關系型數據庫的標準 API,提供了與數據庫建立連接、執行 SQL 語句、處理結果集等功能。Spring 對 JDBC 進行了封裝,通過JdbcTemplate等工具類簡化數據庫操作,降低了使用原生 JDBC 時繁瑣的資源管理(如連接的獲取、關閉等)和異常處理工作。
  • 示例:配置數據源后,注入JdbcTemplate,使用query方法查詢數據,update方法執行增刪改操作 。比如jdbcTemplate.query("SELECT * FROM users", new BeanPropertyRowMapper<>(User.class));可將查詢結果映射為User對象列表。
  • 適用場景:適用于對數據庫操作性能要求較高,希望直接控制 SQL 語句,且數據庫操作相對簡單的場景。

2. JPA(Java Persistence API)

  • 原理:JPA 是 Java EE 規范,定義了對象與關系數據庫之間的映射規則,以及對實體對象進行持久化操作的標準方式。它不是具體框架,而是一種規范,Hibernate 等是其常見實現。Spring Boot 可集成 JPA 實現,通過注解(如@Entity定義實體類、@Column定義列等 )來映射實體和數據庫表結構。
  • 示例:定義實體類@Entity @Table(name = "user") public class User { @Id @GeneratedValue private Long id; @Column private String name; // 省略getter和setter }?,然后創建繼承JpaRepository的接口UserRepository extends JpaRepository<User, Long>,即可利用其提供的 CRUD 方法操作數據庫。
  • 適用場景:適用于關系型數據庫場景,尤其在業務邏輯復雜、對象關系映射較多,希望以面向對象方式操作數據庫,減少 SQL 編寫量時使用。

3. Spring Data JPA

  • 原理:是 Spring 提供的基于 JPA 的模塊,進一步簡化 JPA 使用。它基于約定優于配置原則,根據方法命名規則可自動生成查詢方法,還提供了分頁、排序等高級功能,以及復雜查詢 DSL(Domain-Specific Language) 。
  • 示例:除上述UserRepository繼承JpaRepository使用默認方法外,還可自定義方法,如List<User> findByNameContaining(String name);,框架會自動生成相應 SQL 實現按名字模糊查詢用戶。
  • 適用場景:在使用 JPA 的基礎上,進一步追求開發效率,減少樣板代碼編寫,適用于大多數關系型數據庫的 CRUD 操作及復雜查詢場景。

4. MyBatis

  • 原理:是流行的持久化框架,支持自定義 SQL、存儲過程及高級映射。MyBatis 使用 XML 或注解配置 SQL 語句與對象的映射關系,靈活控制 SQL 執行,可手動編寫復雜 SQL 滿足特定業務需求。
  • 示例:在 XML 中配置<select id="selectUser" parameterType="long" resultType="User"> SELECT * FROM user WHERE id = #{id} </select>?,然后在 Mapper 接口中定義User selectUser(Long id);?,通過 MyBatis 的 SqlSessionFactory 獲取 SqlSession 執行方法。
  • 適用場景:當對 SQL 語句的靈活性和性能優化有較高要求,如復雜的多表關聯查詢、存儲過程調用等場景時適用。

此外,Spring 還提供事務管理機制來保證數據一致性,包括基于注解(@Transactional?)的聲明式事務管理和編程式事務管理;同時也支持多種數據庫連接池技術,提升數據庫連接的管理效率 。

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

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

相關文章

spring boot集成reids的 RedisTemplate 序列化器詳細對比(官方及非官方)

RedisTemplate 序列化器詳細對比&#xff08;官方及非官方&#xff09; 1. 官方序列化器 (1) JdkSerializationRedisSerializer 特點&#xff1a; 基于 Java 原生序列化&#xff08;Serializable&#xff09;。支持復雜對象&#xff08;需實現 Serializable 接口&#xff09;…

ssh私鑰文件登錄問題:Load key invalid format

問題 在mac上面使用私鑰文件登錄時候&#xff0c;出現了如下錯誤&#xff1a; Load key “xxx.pem”: invalid format 但是&#xff0c;這個私鑰文件在win上面能夠正常使用ssh進行遠程登錄。在mac上面不能。而且&#xff0c;分別在win和mac上面分別查看了這兩個私鑰文件的md5…

AI戰略群與星際之門:軟銀AI投資版圖計劃深度解析

一、星際之門:萬億美元級 AI 基礎設施革命 1.1 項目背景與戰略定位 在 AI 技術迅猛發展的今天,算力已成為推動其前進的核心動力。軟銀聯合 OpenAI、甲骨文、英偉達、微軟、arm推出的 “星際之門”(Stargate)計劃,無疑是 AI 領域的一顆重磅炸彈。作為 AI 領域史上最大單筆…

教務系統ER圖

實體 1. 學生&#xff1a;具有姓名、學號、性別、系編號、電話、出生年月等屬性。學號通常是學生的唯一標識。 2. 課程&#xff1a;包含課程編號、課程名稱、課程學分、課程學時等屬性。課程編號一般用于唯一標識一門課程。 3. 教師&#xff1a;屬性有教師編號、教師名字、性別…

大數據(4.4)Hive多表JOIN終極指南:7大關聯類型與性能優化實戰解析

目錄 背景一、Hive JOIN類型與語法詳解1. 基礎JOIN類型2. 高級JOIN類型 二、JOIN實戰案例與調優案例1&#xff1a;兩表內連接&#xff08;訂單與用戶關聯&#xff09;案例2&#xff1a;多表鏈式JOIN&#xff08;用戶-訂單-商品&#xff09;案例3&#xff1a;處理數據傾斜&#…

【28BYJ-48】STM32同時驅動4個步進電機,支持調速與正反轉

資料下載&#xff1a;待更新。。。。 先驅動起來再說&#xff0c;干中學&#xff01;&#xff01;&#xff01; 1、實現功能 STM32同時驅動4個步進電機&#xff0c;支持單獨調速與正反轉控制 需要資源&#xff1a;16個任意IO口1ms定時器中斷 目錄 資料下載&#xff1a;待更…

[Lc6_記憶化搜索] 不同路徑 | 解決智力問題 | 有序三元組中的最大值

目錄 1.不同路徑 題解 2140. 解決智力問題 題解 2873. 有序三元組中的最大值 題解 1.不同路徑 鏈接&#xff1a;62. 不同路徑 一個機器人位于一個 m x n 網格的左上角 &#xff08;起始點在下圖中標記為 “Start” &#xff09;。 機器人每次只能向下或者向右移動一步…

軟件重構與項目進度的矛盾如何解決

軟件重構與項目進度之間的矛盾可以通過明確重構目標與范圍、采用漸進式重構策略、優化項目管理流程、提高團隊溝通效率、建立重構意識文化等方式解決。其中&#xff0c;采用漸進式重構策略尤為關鍵。漸進式重構是指在日常開發過程中&#xff0c;以小步驟持續進行重構&#xff0…

多臺服務器上docker部署 Redis 集群

規劃集群節點 確保你的服務器有固定 IP&#xff0c;比如&#xff1a; 172.16.17.100 172.16.17.101 172.16.17.102 每臺服務器運行 2 個 Redis 節點&#xff0c;總共 6 個節點&#xff0c;滿足 Redis Cluster 最小節點數要求。 2. 在每臺服務器上運行 Redis 在每臺服務器上執行…

【Pandas】pandas DataFrame dtypes

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于獲取 DataFrame 的行索引DataFrame.columns用于獲取 DataFrame 的列標簽DataFrame.dtypes用于獲取 DataFrame 中每一列的數據類型 pandas.DataFrame.dtypes pandas.DataFrame.dtypes 屬性用…

如何實現局域網內無痛訪問Jupyter Notebook?

Jupyter Notebook是數據科學和機器學習領域非常常用的交互式開發環境。默認情況下&#xff0c;Jupyter Notebook啟動后只能本地訪問&#xff0c;并且會自動生成一個token用于身份驗證。當需要從其他電腦遠程訪問時&#xff0c;往往需要對配置進行修改。 本文將詳細介紹如何通過…

[Windows] eDiary 4.3.6 日記軟件

[Windows] eDiary 鏈接&#xff1a;https://pan.xunlei.com/s/VOMq6xmKTbEJtNaW-BXZ7KKSA1?pwdcrvu# 【應用功能】 加密 無論本地還是云端&#xff0c;都可以選擇高強度加密。系統以用戶密碼為種子&#xff0c;對數據進行…

掌握 Flexbox 布局:為容器添加豎向滾動條的完美方案

掌握 Flexbox 布局&#xff1a;為容器添加豎向滾動條的完美方案 前言 在現代網頁設計中&#xff0c;Flexbox 布局因其靈活性和強大的對齊功能而備受歡迎。然而&#xff0c;在實際開發過程中&#xff0c;我們有時會遇到需要在一個具有最小高度的 Flex 容器中實現內容溢出時顯示…

Node.js v22.14.0 多平臺安裝指南:Windows、Linux 和 macOS 詳細教程

Node.js作為現代Web開發的基石&#xff0c;持續為開發者帶來性能提升和新特性支持。本文將詳細介紹在Windows、macOS和Linux系統上安裝最新Node.js的多種方法&#xff0c;助您快速搭建高效的JavaScript開發環境。 &#x1f4e6; 當前最新版本 截至2025年4月&#xff0c;Node.…

動態規劃學習——回文子串系列問題【C++】

一&#xff0c;回文子串 題目鏈接&#xff1a;LCR 020. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 【問題描述】 求一個字符串中有多少個回文子串&#xff0c;其中一個字符也算是一個回文子串。 【解法】 動態規劃 求一個字符串中回文子串的個數&#xff0c;我么可…

My first day in QT programming

My first QT code this->setWindowTitle("HelloWorld"); //設置窗口名稱 this->resize(400, 300); //設置窗口大小 QPushButton* btn new QPushButton; //新建按鈕組件 btn->setParent(this); //為按鈕指定父對象 …

基于python開發的郵箱合并群發工具

智能郵件群發系統 一個基于Python和PyQt5開發的智能郵件群發工具&#xff0c;支持Word模板和Excel數據源的自動匹配&#xff0c;具有現代化UI界面和友好的用戶體驗。 Github項目地址&#xff1a;https://github.com/liugang926/Auto-mail-sent.git dist目錄有編譯好的exe程序&…

大模型-提示詞(Prompt)技巧

1、什么是提示詞&#xff1f; 提示詞&#xff08;Prompt&#xff09;是用戶發送給大語言模型的問題、指令或請求&#xff0c;用來明確地告訴模型用戶想要解決的問題或完成的任務&#xff0c;是大語言模型理解用戶需求并據此生成相關、準確回答或內容的基礎。對于大語言模型來說…

Android開發:support.v4包與AndroidX

Android中的support.v4包與AndroidX support.v4包概述 Android Support Library中的android.support.v4包是Google為保持Android應用向后兼容而提供的重要支持庫集合。它主要解決以下問題&#xff1a; API版本兼容&#xff1a;讓新版API能在舊版Android系統上使用功能增強&a…

TCP-IP模型

書接上回&#xff08;OSI通信模型&#xff09; TCP-IP協議結構 &#xff08;略講&#xff09; ARP&#xff1a;IP-->MAC RARP&#xff1a;MAC-->IP ICMP&#xff1a;控制報文信息協議&#xff0c;主要是涉及到主機就去連接路由器時控制傳輸報文&#xff08…