国产中文字幕在线视频,.com久久久,亚洲免费在线播放视频,神九影院电视剧免费观看,奇米在线888,天天网综合,久久免费视频观看

在線網(wǎng)站設(shè)計工具優(yōu)惠券怎么做自己的網(wǎng)站

鶴壁市浩天電氣有限公司 2026/01/22 08:19:22
在線網(wǎng)站設(shè)計工具,優(yōu)惠券怎么做自己的網(wǎng)站,查項(xiàng)目經(jīng)理有沒有在建怎么查,梧州市建設(shè)局網(wǎng)站你希望深入了解 JPA 這個 ORM 規(guī)范#xff0c;我會從它的定義、核心設(shè)計思想、核心組件、常用注解、基本使用方式以及與 Hibernate 的關(guān)系等方面#xff0c;為你做全面且易懂的講解#xff0c;幫你徹底搞懂 JPA。 一、JPA 是什么#xff1f; JPA#xff08;Java Persisten…你希望深入了解 JPA 這個 ORM 規(guī)范我會從它的定義、核心設(shè)計思想、核心組件、常用注解、基本使用方式以及與 Hibernate 的關(guān)系等方面為你做全面且易懂的講解幫你徹底搞懂 JPA。一、JPA 是什么JPAJava Persistence APIJava 持久化 API不是一個具體的 ORM 框架而是 Java EE 官方制定的一套對象關(guān)系映射的標(biāo)準(zhǔn)規(guī)范接口 注解/XML。簡單理解JPA 是“接口/規(guī)則”定義了如何將 Java 對象映射到數(shù)據(jù)庫表、如何執(zhí)行 CRUD 操作等標(biāo)準(zhǔn)Hibernate、EclipseLink、OpenJPA 是 JPA 的實(shí)現(xiàn)具體干活的框架其中 Hibernate 是最主流、最成熟的實(shí)現(xiàn)也是 Spring Data JPA 默認(rèn)的底層實(shí)現(xiàn)。JPA 誕生的核心目的統(tǒng)一 Java 持久層的開發(fā)標(biāo)準(zhǔn)避免開發(fā)者被某一個 ORM 框架綁定比如早期只用 Hibernate 會導(dǎo)致代碼和框架強(qiáng)耦合。二、JPA 的核心設(shè)計思想JPA 遵循“面向?qū)ο蟆钡脑O(shè)計思路核心是將數(shù)據(jù)庫表與 Java 實(shí)體類Entity做映射讓你通過操作 Java 對象來完成數(shù)據(jù)庫操作無需編寫原生 SQL也支持自定義 SQL。核心目標(biāo)消除 JDBC 代碼的冗余不用手動寫Connection、PreparedStatement、結(jié)果集映射等以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫比如用entityManager.persist(user)代替INSERT語句提供統(tǒng)一的 API降低切換 ORM 實(shí)現(xiàn)的成本比如從 Hibernate 切換到 EclipseLink 只需改配置。三、JPA 的核心組件JPA 的核心由 3 部分組成也是你使用 JPA 必須掌握的核心內(nèi)容1. 核心 API接口API 接口作用EntityManagerJPA 的核心操作接口用于執(zhí)行實(shí)體的增刪改查、獲取事務(wù)、創(chuàng)建查詢等EntityManagerFactory用于創(chuàng)建EntityManager的工廠類重量級對象全局只創(chuàng)建一個EntityTransaction事務(wù)管理接口也可結(jié)合 Spring 事務(wù)使用更推薦Query/TypedQueryJPA 的查詢接口支持 JPQL/SQL 查詢2. 注解核心用于對象-表映射JPA 的核心注解都在javax.persistence包下Spring Boot 中已自動引入常用注解如下注解作用Entity標(biāo)記類為 JPA 實(shí)體類對應(yīng)數(shù)據(jù)庫中的一張表Table配置實(shí)體類對應(yīng)的數(shù)據(jù)庫表名默認(rèn)類名小寫Id標(biāo)記字段為主鍵GeneratedValue配置主鍵生成策略如自增、UUID 等Column配置字段對應(yīng)的數(shù)據(jù)庫列名、長度、非空、唯一等屬性默認(rèn)字段名Transient標(biāo)記字段不映射到數(shù)據(jù)庫僅內(nèi)存使用OneToOne一對一關(guān)聯(lián)關(guān)系OneToMany一對多關(guān)聯(lián)關(guān)系ManyToOne多對一關(guān)聯(lián)關(guān)系ManyToMany多對多關(guān)聯(lián)關(guān)系3. 查詢語言JPQLJPQLJava Persistence Query Language是 JPA 定義的面向?qū)ο蟮牟樵冋Z言基于實(shí)體類和屬性而非數(shù)據(jù)庫表和字段最終會被 JPA 實(shí)現(xiàn)如 Hibernate翻譯成原生 SQL。比如JPQLSELECT u FROM User u WHERE u.userName ?1User 是實(shí)體類名userName 是實(shí)體屬性對應(yīng)的 SQLSELECT * FROM t_user WHERE user_name ?JPQL 支持分頁、排序、聚合函數(shù)COUNT/SUM 等也支持原生 SQL 嵌入。四、JPA 的基本使用純 JPA Spring Boot 兩種方式方式 1純 JPA 原生使用理解底層原理// 1. 定義實(shí)體類importjavax.persistence.*;Entity// 標(biāo)記為實(shí)體類Table(namet_user)// 對應(yīng)數(shù)據(jù)庫表 t_userpublicclassUser{Id// 主鍵GeneratedValue(strategyGenerationType.IDENTITY)// 自增主鍵MySQL 適用privateLongid;Column(nameuser_name,length50,nullablefalse,uniquetrue)// 映射字段列名 user_name長度 50非空唯一privateStringuserName;Column(nullablefalse)// 非空privateIntegerage;Transient// 該字段不映射到數(shù)據(jù)庫privateStringtempField;// 必須有無參構(gòu)造器JPA 反射需要publicUser(){}// 有參構(gòu)造器、getter/setter 省略}// 2. 原生 JPA 操作手動管理 EntityManagerpublicclassJpaNativeDemo{publicstaticvoidmain(String[]args){// 1. 創(chuàng)建 EntityManagerFactory全局唯一重量級EntityManagerFactoryemfPersistence.createEntityManagerFactory(jpa_demo);// 2. 創(chuàng)建 EntityManager輕量級每次操作創(chuàng)建/關(guān)閉EntityManagerememf.createEntityManager();// 3. 開啟事務(wù)EntityTransactiontxem.getTransaction();tx.begin();try{// 4. 操作數(shù)據(jù)庫保存用戶UserusernewUser();user.setUserName(張三);user.setAge(25);em.persist(user);// 插入數(shù)據(jù)對應(yīng) INSERT// 5. 查詢用戶UserfindUserem.find(User.class,1L);// 根據(jù)主鍵查詢對應(yīng) SELECTSystem.out.println(查詢到用戶findUser.getUserName());// 6. 修改用戶findUser.setAge(26);em.merge(findUser);// 更新數(shù)據(jù)對應(yīng) UPDATE// 7. 刪除用戶// em.remove(findUser); // 刪除數(shù)據(jù)對應(yīng) DELETE// 8. 提交事務(wù)tx.commit();}catch(Exceptione){// 回滾事務(wù)tx.rollback();e.printStackTrace();}finally{// 關(guān)閉資源em.close();emf.close();}}}// 3. 配置文件META-INF/persistence.xml?xml version1.0encodingUTF-8?persistence xmlnshttp://java.sun.com/xml/ns/persistenceversion2.1persistence-unit namejpa_demotransaction-typeRESOURCE_LOCAL!--JPA 實(shí)現(xiàn)類Hibernate--providerorg.hibernate.jpa.HibernatePersistenceProvider/provider!--映射的實(shí)體類--classcom.example.entity.User/classproperties!--數(shù)據(jù)庫連接信息--property namejavax.persistence.jdbc.drivervaluecom.mysql.cj.jdbc.Driver/property namejavax.persistence.jdbc.urlvaluejdbc:mysql://localhost:3306/test?useSSLfalse/property namejavax.persistence.jdbc.uservalueroot/property namejavax.persistence.jdbc.passwordvalue123456/!--Hibernate配置--property namehibernate.hbm2ddl.autovalueupdate/!--自動更新表結(jié)構(gòu)--property namehibernate.show_sqlvaluetrue/!--打印 SQL--property namehibernate.format_sqlvaluetrue/!--格式化 SQL--property namehibernate.dialectvalueorg.hibernate.dialect.MySQL8Dialect/!--數(shù)據(jù)庫方言--/properties/persistence-unit/persistence方式 2Spring Boot Spring Data JPA實(shí)際開發(fā)主流Spring Data JPA 是 Spring 對 JPA 的進(jìn)一步封裝提供了通用的 CRUD 接口無需手動寫基礎(chǔ)操作代碼是實(shí)際開發(fā)中最常用的方式步驟 1引入依賴pom.xmldependencies!-- Spring Boot JPA 起步依賴自動引入 Hibernate --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependency!-- MySQL 驅(qū)動 --dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency!-- Spring Boot Web方便測試 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependencies步驟 2配置 application.ymlspring:# 數(shù)據(jù)庫連接配置datasource:url:jdbc:mysql://localhost:3306/test?useSSLfalseserverTimezoneAsia/Shanghaiusername:rootpassword:123456driver-class-name:com.mysql.cj.jdbc.Driver# JPA 配置jpa:hibernate:ddl-auto:update# 表結(jié)構(gòu)策略none(無)、create(每次創(chuàng)建)、update(更新)、validate(校驗(yàn))show-sql:true# 打印 SQLproperties:hibernate:format_sql:true# 格式化 SQLopen-in-view:false# 關(guān)閉 Open Session In View避免性能問題database-platform:org.hibernate.dialect.MySQL8Dialect# 數(shù)據(jù)庫方言步驟 3編寫 Repository 接口核心無需寫實(shí)現(xiàn)importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.data.jpa.repository.Query;importorg.springframework.data.repository.query.Param;importjava.util.List;// 繼承 JpaRepository實(shí)體類, 主鍵類型自動獲得 CRUD 方法publicinterfaceUserRepositoryextendsJpaRepositoryUser,Long{// 1. 按方法名自動生成 SQL無需寫 JPQL/SQLUserfindByUserName(StringuserName);// 根據(jù)用戶名查詢ListUserfindByAgeGreaterThan(Integerage);// 查詢年齡大于指定值的用戶// 2. 自定義 JPQL 查詢推薦Query(SELECT u FROM User u WHERE u.age BETWEEN :minAge AND :maxAge)ListUserfindByAgeRange(Param(minAge)IntegerminAge,Param(maxAge)IntegermaxAge);// 3. 自定義原生 SQL 查詢Query(valueSELECT * FROM t_user WHERE age ?1,nativeQuerytrue)ListUserfindByAge(Integerage);}步驟 4編寫 Service 和 Controller測試// Service 層整合事務(wù)importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;importjava.util.List;ServicepublicclassUserService{AutowiredprivateUserRepositoryuserRepository;// 保存用戶事務(wù)TransactionalpublicUsersaveUser(Useruser){returnuserRepository.save(user);// 內(nèi)置 save 方法}// 根據(jù) ID 查詢publicUsergetUserById(Longid){// findById 返回 Optional避免空指針returnuserRepository.findById(id).orElse(null);}// 查詢所有用戶publicListUsergetAllUsers(){returnuserRepository.findAll();}// 自定義查詢按年齡范圍publicListUsergetUsersByAgeRange(Integermin,Integermax){returnuserRepository.findByAgeRange(min,max);}// 刪除用戶TransactionalpublicvoiddeleteUser(Longid){userRepository.deleteById(id);}}// Controller 層測試接口importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;RestControllerRequestMapping(/users)publicclassUserController{AutowiredprivateUserServiceuserService;// 新增用戶PostMappingpublicUseraddUser(RequestBodyUseruser){returnuserService.saveUser(user);}// 根據(jù) ID 查詢GetMapping(/{id})publicUsergetUser(PathVariableLongid){returnuserService.getUserById(id);}// 查詢所有GetMappingpublicListUsergetAll(){returnuserService.getAllUsers();}// 按年齡范圍查詢GetMapping(/age-range)publicListUsergetByAgeRange(RequestParamIntegermin,RequestParamIntegermax){returnuserService.getUsersByAgeRange(min,max);}// 刪除用戶DeleteMapping(/{id})publicStringdelete(PathVariableLongid){userService.deleteUser(id);return刪除成功;}}五、JPA 的核心優(yōu)勢與適用場景優(yōu)勢標(biāo)準(zhǔn)化遵循 Java 官方規(guī)范不綁定具體實(shí)現(xiàn)可靈活切換 ORM 框架簡化開發(fā)無需寫基礎(chǔ) CRUD 代碼Spring Data JPA 按方法名自動生成 SQL面向?qū)ο笠圆僮?Java 對象的方式操作數(shù)據(jù)庫符合面向?qū)ο缶幊趟枷腱`活查詢支持 JPQL、原生 SQL、方法名查詢?nèi)N方式兼顧簡潔性和靈活性無縫整合 Spring與 Spring Boot/Spring 事務(wù)/AOP 等生態(tài)完美融合。適用場景中大型企業(yè)級應(yīng)用追求代碼規(guī)范、低耦合業(yè)務(wù)邏輯以簡單 CRUD 為主無需復(fù)雜 SQL希望快速開發(fā)減少重復(fù)的數(shù)據(jù)庫操作代碼需兼顧跨數(shù)據(jù)庫兼容性JPA 自動適配不同數(shù)據(jù)庫方言。局限性復(fù)雜 SQL如多表關(guān)聯(lián)、分組聚合、存儲過程不如 MyBatis 靈活自動生成的 SQL 可能存在性能問題需手動優(yōu)化學(xué)習(xí)成本略高需理解 ORM 思想、JPQL、關(guān)聯(lián)關(guān)系等。總結(jié)JPA 是ORM 規(guī)范而非具體框架Hibernate 是其最主流的實(shí)現(xiàn)Spring Data JPA 是 Spring 對 JPA 的進(jìn)一步封裝開發(fā)首選JPA 的核心是通過注解實(shí)現(xiàn) Java 實(shí)體類與數(shù)據(jù)庫表的映射通過EntityManager或 Spring Data JPA 接口完成數(shù)據(jù)庫操作Spring Boot Spring Data JPA 是實(shí)際開發(fā)的主流方式核心優(yōu)勢是簡化 CRUD 開發(fā)、統(tǒng)一規(guī)范、整合 Spring 生態(tài)適合中大型應(yīng)用的快速開發(fā)。
版權(quán)聲明: 本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請聯(lián)系我們進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

網(wǎng)站關(guān)鍵詞排名怎么優(yōu)化做網(wǎng)站 怎么選擇公司

網(wǎng)站關(guān)鍵詞排名怎么優(yōu)化,做網(wǎng)站 怎么選擇公司,營銷型定制網(wǎng)站,百度指數(shù)是啥文章目錄光電混合纜的誕生光電混合纜的使用場景光電混合纜的結(jié)構(gòu)和原理光電混合纜的演進(jìn)光電混合纜是一種集成了光纖和導(dǎo)電銅線的混合形

2026/01/21 19:11:02