Java基礎-22-基本語法-實體類

實體類(Entity Class)

1. 什么是實體類?

實體類(Entity Class) 是 Java 中用于表示數據庫表結構或業務對象的類。它通常包含屬性(字段)getter/setter 方法,用于存儲和操作數據。實體類是面向對象編程(OOP)與數據庫之間的橋梁,常用于 Java Web 開發和 ORM(對象關系映射)框架(如 Hibernate、MyBatis)中。


2. 實體類的特點

  1. 屬性私有化(使用 private 關鍵字修飾)。

  2. 提供 getter 和 setter 方法,用于外部訪問和修改屬性值。

  3. 通常包含無參構造方法,以便反射或框架使用。

  4. 可使用 toString() 方法 方便調試。

  5. 可實現 Serializable 接口,用于對象的序列化。

  6. 可能會使用注解(如 @Entity@Table@Id 等)以便與數據庫表映射。


3. 實體類的基本寫法

3.1. 標準 Java 實體類

public class User {private int id;private String name;private int age;// 無參構造方法public User() {}// 全參構造方法public User(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}// Getter 和 Setter 方法public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 重寫 toString 方法,方便輸出對象信息@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

說明:

  • private 修飾成員變量,保證封裝性。

  • 提供 gettersetter 方法,外部可以安全訪問和修改數據。

  • toString() 方法用于打印對象的詳細信息。

  • 需要時可添加構造方法,方便創建對象。


3.2. 使用實體類

public class TestUser {public static void main(String[] args) {// 使用無參構造方法創建對象User user1 = new User();user1.setId(1);user1.setName("張三");user1.setAge(25);// 使用全參構造方法創建對象User user2 = new User(2, "李四", 30);// 輸出對象信息System.out.println(user1);System.out.println(user2);}
}

運行結果:

User{id=1, name='張三', age=25}
User{id=2, name='李四', age=30}

4. 實體類與數據庫的映射(JPA 示例)

如果實體類用于數據庫存儲,可以使用 JPA(Java Persistence API) 進行映射:

import javax.persistence.*;
import java.io.Serializable;@Entity  // 指定這是一個實體類
@Table(name = "users")  // 對應數據庫表 "users"
public class User implements Serializable {@Id  // 指定主鍵@GeneratedValue(strategy = GenerationType.IDENTITY)  // 主鍵自增private int id;@Column(name = "name", nullable = false, length = 50)  // 映射字段private String name;@Column(name = "age", nullable = false)private int age;// 無參構造public User() {}// 構造方法public User(String name, int age) {this.name = name;this.age = age;}// Getter 和 Setter 方法public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

解釋:

  • @Entity:聲明這是一個 JPA 實體類。

  • @Table(name = "users"):指定映射的數據庫表名。

  • @Id:標識主鍵。

  • @GeneratedValue(strategy = GenerationType.IDENTITY):使用數據庫自增主鍵策略。

  • @Column:指定數據庫字段屬性。

  • Serializable 接口:支持對象序列化。


5. 實體類的優點

  1. 封裝數據:將數據和行為封裝在類中,符合 OOP 設計原則。

  2. 提高代碼復用性:實體類可以在多個模塊中使用。

  3. 方便 ORM 框架管理數據庫:如 Hibernate、MyBatis。

  4. 便于維護:結構清晰,易于管理。


6. 適用場景

  1. Java Web 開發:如 Spring Boot 結合 JPA、Hibernate 進行數據庫操作。

  2. 數據傳輸:實體類用于存儲和傳輸數據(如 JSON、XML 解析)。

  3. 微服務架構:用于 DTO(數據傳輸對象),實現數據封裝。

  4. 緩存管理:實體類可存入 Redis 進行緩存管理。


7. 總結

實體類是 Java 開發中的重要組成部分,它用于表示數據庫中的數據結構,并與 ORM 框架配合,實現對象與數據庫表的映射。通過封裝屬性、提供 getter/setter 方法,我們可以更好地管理數據,提高代碼的安全性和可維護性。

掌握實體類的設計原則,在實際項目中正確使用,可以讓你的代碼更加規范、高效!

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

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

相關文章

Android 系統ContentProvider流程

一、ContentProvider初始化注冊流程 源碼查看路徑:http://xrefandroid.com/android-11.0.0_r48/ 涉及到源碼文件: /frameworks/base/core/java/android/content/ContentProvider.java 自定義ContentProvider需要繼承該類,內部類Transport繼承關系如下,實…

爬蟲工程師分享自動批量化獲取商品評論數據的方法有哪些?

在電商領域,商品評論數據對于商家了解產品口碑、洞悉用戶需求,以及開展競品分析等工作具有極其重要的價值。作為爬蟲工程師,掌握自動批量化獲取商品評論數據的方法,能極大提升數據收集效率。下面,我將分享一些實用的操…

Vue3組件事件用戶信息卡練習

用戶信息卡 題目要求 實現一個用戶信息卡系統&#xff0c;包含以下功能&#xff1a; 1.父組件收集用戶信息&#xff08;姓名、年齡、班級&#xff09; 2.子組件接收并展示用戶信息卡片 3.添加基本的數據驗證 <!DOCTYPE html> <html lang"en"> <h…

SpringBean模塊(二)bean初始化(2)和容器初始化順序的比較--引入ApplicationContextInitializer

前面介紹了獲取容器可以讓spring bean實現ApplicationContextAware&#xff0c;實際也是初始化執行了setApplicationContext接口&#xff0c; 初始化接口還可以借助一些注解或者spring bean的初始化方法&#xff0c;那么他們的執行順序是什么樣的呢&#xff1f; 一、驗證&…

中小型企業網絡的搭建

1.1 網絡邏輯拓撲、布線方案的設計 1.1.1 網絡設計依據 網絡設計應遵循以下基本原則&#xff1a; 高效性&#xff1a;確保網絡架構能夠支持企業日常業務的高效運行。 可靠性&#xff1a;采用冗余設計&#xff0c;確保網絡的高可用性&#xff0c;避免單點故障。 可擴展性…

angr基礎學習

參考&#xff1a;angr AngrCTF_FITM/筆記/03/Angr_CTF從入門到精通&#xff08;三&#xff09;.md at master ZERO-A-ONE/AngrCTF_FITM angr_explore 00_angr_find IDA分析結果&#xff1a; 邏輯簡單&#xff0c;輸入&#xff0c;complex_function進行加密&#xff0c;加密…

軟考-高級-系統架構設計師【考試備考資料下載】

計算機技術與軟件專業技術資格&#xff08;水平&#xff09;考試是原中國計算機軟件專業技術資格和水平考試的完善與發展。計算機技術與軟件專業技術資格&#xff08;水平&#xff09;考試是由國家人力資源和社會保障部、工業和信息化部領導下的國家級考試。 計算機技術與軟件專…

3. 第三放平臺部署deepseek

有時候我們會發現使用deepseek服務器&#xff0c;異常卡頓&#xff0c;這是由于多方面原因造成的&#xff0c;比如說訪問人數過多等。想要解決這個問題&#xff0c;我們可以選擇第三方平臺進行部署 第三方平臺 我們可以選擇的第三方平臺很多&#xff0c;比如硅基流動、秘塔搜索…

1.4-蜜罐\堡壘機\API接口

1.4-蜜罐\堡壘機\API接口 蜜罐&#xff1a;用來釣魚或誘惑測試人員的防護系統 bash <(curl -sS -L https://hfish.net/webinstall.sh) # 安裝HFISH蜜罐堡壘機&#xff1a; 運維用的&#xff0c;統一管理運維平臺;拿下堡壘機就很有可能等于拿下了多個平臺 jumpServer一鍵安…

知識圖引導的檢索增強生成

摘要 檢索增強生成&#xff08;RAG&#xff09;已經成為一種很有前途的技術&#xff0c;用于解決大型語言模型&#xff08;LLM&#xff09;生成的響應中的幻覺問題。現有的RAG研究主要集中在應用基于語義的方法來提取孤立的相關組塊&#xff0c;忽略了它們之間的內在關系。在本…

【機器學習】imagenet2012 數據預處理數據預處理

【機器學習】數據預處理 1. 下載/解壓數據2. 數據預處理3. 加載以及訓練代碼3.1 使用PIL等加載代碼3.2 使用OpenCV的方式來一張張加載代碼3.3 h5的方式來加載大文件 最后總結 這個數據大約 140個G,128w的訓練集 1. 下載/解壓數據 首先需要下載數據&#xff1a; 數據最后處理…

質量工程:數字化轉型時代的質量體系重構

前言&#xff1a;質量理念的范式轉移閱讀原文 如果把軟件開發比作建造摩天大樓&#xff1a; 傳統測試 竣工后檢查裂縫&#xff08;高成本返工&#xff09; 質量工程 從地基開始的全流程監理體系&#xff08;設計圖紙→施工工藝→建材選擇→竣工驗收&#xff09; IEEE研究…

【全棧開發】—— Paddle OCR 文字識別 + deepseek接入(基于python 最新!!!)

所有源碼都在文章中&#xff0c;大家不要私信來要源碼&#xff0c;當然&#xff0c;評論區歡迎交流技術 目錄 Paddle OCR 配置環境 示例 deepseek接入 環境配置 api 調用代碼 sliconflow Paddle OCR 配置環境 清華源下載 paddlepaddle&#xff1a; pip install paddlepaddle …

SAIL-RK3588J 核心板技術方案——高精度裝配式建筑機器人控制?

&#xff08;本方案契合《建筑機器人產業目錄》政策要求&#xff09; 一、方案背景與政策支持? ?政策驅動? 2025年2月《建筑機器人產業目錄》明確將?“高精度建筑機器人控制設備”?納入重點補貼范圍&#xff0c;要求定位精度≤0.5mm、支持實時質檢與多機協同&#xff0c…

OpenAI API - 快速入門開發

文章目錄 開發者快速入門分析圖像輸入使用工具擴展模型提供閃電般的 AI 體驗構建代理進一步探索 模型精選模型推理模型旗艦聊天模型成本優化模型實時模型舊版 GPT 模型DALLE文本轉語音轉寫嵌入調度工具特定模型GPT 基礎模型 Libraries創建和導出 API 密鑰安裝官方 SDKJavaScrip…

藍橋杯省賽 棋盤 3533 二維差分+二維前綴和

傳送門 0棋盤 - 藍橋云課 const int N 2e3 10;int n,m; int a[N][N];void insert(int x11,int y11,int x22,int y22) {a[x11][y11] ;a[x11][y22 1] --;a[x22 1][y11] --;a[x22 1][y22 1] ; }void solve() {cin >> n >> m;for (int i 1;i < m;i ){int x11…

《C++Linux編程進階:從0實現muduo 》-第6講.C++死鎖問題如何分析調試-原子操作,互斥量,條件變量的封裝

重點內容 視頻講解&#xff1a;《CLinux編程進階&#xff1a;從0實現muduo C網絡框架系列》-第6講.C死鎖問題如何分析調試-原子操作,互斥量,條件變量的封裝 代碼改動 lesson6代碼 實現&#xff1a;base/Atomic.h 實現&#xff1a;base/Mutex.h 實現&#xff1a;base/Condit…

洛谷題單1-P5708 【深基2.習2】三角形面積-python-流程圖重構

題目描述 一個三角形的三邊長分別是 a a a、 b b b、 c c c&#xff0c;那么它的面積為 p ( p ? a ) ( p ? b ) ( p ? c ) \sqrt{p(p-a)(p-b)(p-c)} p(p?a)(p?b)(p?c) ?&#xff0c;其中 p 1 2 ( a b c ) p\frac{1}{2}(abc) p21?(abc)。輸入這三個數字&#xff…

matplotlib標題比x,y軸字體大,明明標題字體更大?

原始代碼&#xff1a; plt.xlabel(訓練輪次&#xff08;Epochs&#xff09;, fontsize14, fontweightbold, fontpropertieschinese_font) # 設置中文字體、加大、加粗 plt.ylabel(R值, fontsize14, fontweightbold, fontpropertieschinese_font) # 設置中文字體、加大、加粗…

Baklib內容中臺的核心優勢是什么?

智能化知識管理引擎 Baklib的智能化知識管理引擎通過多源數據整合與智能分類技術&#xff0c;實現企業知識資產的自動化歸集與動態更新。系統內置的語義分析算法可自動識別文檔主題&#xff0c;結合自然語言處理技術生成結構化標簽體系&#xff0c;大幅降低人工標注成本。針對…