日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
【方向盤】版本歷史&代碼示例之:Bean Validation、JPA

本文轉(zhuǎn)載自微信公眾號(hào)「Java方向盤」,作者方向盤 。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java方向盤公眾號(hào)。

10年積累的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有東風(fēng)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

正文

Bean Validation

數(shù)據(jù)校驗(yàn):在任何時(shí)候,當(dāng)你想要處理一個(gè)應(yīng)用程序的邏輯時(shí),確保數(shù)據(jù)的正確性是你必須要考慮和面對(duì)的事情。也就說(shuō)我們必須通過(guò)某種手段,確保輸入進(jìn)來(lái)的數(shù)據(jù)是正確的。

然而,應(yīng)用程序一般是分層的,同樣的驗(yàn)證邏輯往往會(huì)出現(xiàn)在不同的層,這樣就會(huì)給代碼組織管理上帶來(lái)冗余負(fù)擔(dān)。為了避免這類情況的發(fā)生,最好就是做一層抽象:將驗(yàn)證邏輯與響應(yīng)的模型進(jìn)行綁定,這就是Bean Validation。

Bean Validation簡(jiǎn)直就是業(yè)務(wù)開發(fā)中祛掉壞味道代碼的利器,完美的實(shí)現(xiàn)契約式編程,大大提高開發(fā)效率,降低出錯(cuò)概率。

注意:Bean Validation它是一種通用規(guī)范,并不只屬于Web層技術(shù),即使大概率你可能只在Spring MVC中使用過(guò)它~

 
 
 
 
  1.  
  2.  
  3.     javax.validation 
  4.     validation-api 
  5.     2.0.1.Final 
  6.  
  7.  
  8.  
  9.  
  10.     jakarta.validation 
  11.     jakarta.validation-api 
  12.     3.0.0 
  13.      
  14.  

版本歷程

版本發(fā)布日期JSR版本對(duì)應(yīng)Java EE版本主要特性
1.02009.11JSR 303Java EE 6對(duì)JavaBean進(jìn)行驗(yàn)證,提供13個(gè)注解
1.12013.05JSR 349Java EE 7新增方法級(jí)驗(yàn)證(參數(shù)、返回值)
2.02017.08JSR 380Java EE 8新增9個(gè)注解達(dá)到22個(gè)。支持容器元素驗(yàn)證
3.02020.07Jakarta管理Jakarta EE 9同上

截止到2.0/3.0版本,共計(jì)13 + 9 = 22個(gè)內(nèi)建標(biāo)準(zhǔn)的注解:

序號(hào)注解支持類型含義null值是否校驗(yàn)
01@AssertFalsebool元素必須是false
02@AssertTruebool元素必須是true
03@DecimalMaxNumber的子類型(浮點(diǎn)數(shù)除外)以及String元素必須是一個(gè)數(shù)字,且值必須<=最大值
04@DecimalMin同上元素必須是一個(gè)數(shù)字,且值必須>=最大值
05@Max同上同上
06@Min同上同上
07@Digits同上元素構(gòu)成是否合法(整數(shù)部分和小數(shù)部分)
08@Future時(shí)間類型(包括JSR310)元素必須為一個(gè)將來(lái)(不包含相等)的日期(比較精確到毫秒)
09@Past同上元素必須為一個(gè)過(guò)去(不包含相等)的日期(比較精確到毫秒)
10@NotNullany元素不能為null
11@Nullany元素必須為null
12@Pattern字符串元素需符合指定的正則表達(dá)式
13@SizeString/Collection/Map/Array元素大小需在指定范圍中
----2.0版本新增了9個(gè)注解,如下----
14@Email字符串元素必須為電子郵箱地址
15@NotEmpty容器類型集合的Size必須大于0
16@NotBlank字符串字符串必須包含至少一個(gè)非空白的字符
17@Positive數(shù)字類型元素必須為正數(shù)(不包括0)
18@PositiveOrZero同上同上(包括0)
19@Negative同上元素必須為負(fù)數(shù)(不包括0)
20@NegativeOrZero同上同上(包括0)
21@PastOrPresent時(shí)間類型在@Past基礎(chǔ)上包括相等
22@FutureOrPresent時(shí)間類型在@Futrue基礎(chǔ)上包括相等

值得注意的是,還有些比較常用的注解如@DurationMin、@DurationMax、@Length、@ScriptAssert、@ParameterScriptAssert、@Range、@UniqueElements等,它們不屬于標(biāo)準(zhǔn)注解,而屬于Hibernate的。但正如上面所說(shuō),Hibernate Validator它幾乎就是標(biāo)準(zhǔn),所以在開發(fā)中使用也是沒(méi)有任何問(wèn)題的。

生存現(xiàn)狀

Spring在數(shù)據(jù)驗(yàn)證這塊的API設(shè)計(jì)得比較失敗,Bean Validation很好的彌補(bǔ)了其不足。

雖然Bean Validation存在時(shí)間已經(jīng)很長(zhǎng)了,但很多程序員對(duì)其依舊“無(wú)感”。隨著DDD領(lǐng)域驅(qū)動(dòng)模型的流行和普及,它的重要性日趨凸顯,畢竟它的設(shè)計(jì)思想和域模型是一致的,能起到很好的“化學(xué)反應(yīng)”,從而事半功倍。

簡(jiǎn)單的講,若你是一個(gè)模塊化設(shè)計(jì)愛好者、優(yōu)雅代碼的擁護(hù)者、聲明式編程的追求者,那么Bean Validation對(duì)你的幫助絕非一點(diǎn)點(diǎn)。

實(shí)現(xiàn)(框架)

雖說(shuō)BV規(guī)范的實(shí)現(xiàn)框架一般有兩種:Hibernate Validator和Apache BVal,但實(shí)際上基本可認(rèn)為前者是唯一實(shí)現(xiàn),它就等同于標(biāo)準(zhǔn),版本對(duì)應(yīng)關(guān)系如下:

BV版本HV實(shí)現(xiàn)版本
1.04.x
1.15.x
2.06.x
3.07.x

說(shuō)明:Hibernate Validator 7.x專為Jakarta Bean Validation 3.0打造,適配jakarta.*命名空間

代碼示例

導(dǎo)入BV的實(shí)現(xiàn)框架:

 
 
 
 
  1.  
  2.     org.hibernate.validator 
  3.     hibernate-validator 
  4.  

準(zhǔn)備一個(gè)Java Bean,并通過(guò)注解聲明規(guī)則:

 
 
 
 
  1. /** 
  2.  * 在此處添加備注信息 
  3.  * 
  4.  * @author YourBatman. Send email to me 
  5.  * @site https://yourbatman.cn 
  6.  * @date 2021/10/6 10:16 
  7.  * @since 0.0.1 
  8.  */ 
  9. @Data 
  10. public class Person { 
  11.  
  12.     @Positive 
  13.     private long id; 
  14.     @NotBlank 
  15.     private String name; 
  16.     @NotNull 
  17.     @PositiveOrZero 
  18.     private Integer age; 
  19.  

書寫驗(yàn)證代碼:

 
 
 
 
  1. @Test 
  2. public void validBean() { 
  3.     // 使用默認(rèn)配置獲得驗(yàn)證器 
  4.     Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); 
  5.  
  6.     // 準(zhǔn)備(待校驗(yàn)的)Bean 
  7.     Person person = new Person(); 
  8.     person.setId(-1); 
  9.     person.setName("YourBatman"); 
  10.     person.setAge(18); 
  11.  
  12.     // 使用校驗(yàn)器對(duì)其執(zhí)行校驗(yàn) 
  13.     Set> violations = validator.validate(person); 
  14.     // 打印校驗(yàn)結(jié)果 
  15.     if (violations.isEmpty()) { 
  16.         System.out.println("校驗(yàn)通過(guò)!"); 
  17.     } else { 
  18.         System.out.println("校驗(yàn)不通過(guò)!錯(cuò)誤詳情如下:"); 
  19.         violations.forEach(v -> System.out.println("\t" + v.getPropertyPath() + v.getMessage() + ",但你的值是:" + v.getInvalidValue())); 
  20.     } 

運(yùn)行程序,輸出為:

 
 
 
 
  1. 校驗(yàn)不通過(guò)!錯(cuò)誤詳情如下: 
  2.  id必須是正數(shù),但你的值是:-1 

若運(yùn)行時(shí)碰到這個(gè)類找不著:

不要“害怕”,這不正是上篇文章提到內(nèi)容嗎:EL表達(dá)式用于數(shù)據(jù)校驗(yàn),加入進(jìn)來(lái)即可。

 
 
 
 
  1.  
  2.     org.glassfish 
  3.     jakarta.el 
  4.  

為了加強(qiáng)理解,再來(lái)一個(gè)方法級(jí)的校驗(yàn)示例(參數(shù)、返回值):

 
 
 
 
  1. public @Positive int toInt(@NotNull String numStr) { 
  2.     int result = Integer.parseInt(numStr); 
  3.     return result; 

不同于Java Bean表示狀態(tài)(靜態(tài)的),方法/構(gòu)造器是執(zhí)行期(動(dòng)態(tài)的)才能進(jìn)行校驗(yàn),所以執(zhí)行校驗(yàn)的代碼可以這么做:

 
 
 
 
  1. public @Positive int toInt(@NotNull String numStr) throws NoSuchMethodException { 
  2.     // 使用默認(rèn)配置獲得驗(yàn)證器(用于方法、構(gòu)造器的校驗(yàn)器) 
  3.     ExecutableValidator executableValidator = Validation.buildDefaultValidatorFactory().getValidator().forExecutables(); 
  4.     // 執(zhí)行參數(shù)校驗(yàn)邏輯start... 
  5.     Method currMethod = BeanValidationDemo.class.getMethod("toInt", String.class); 
  6.     Set> violations = executableValidator.validateParameters(this, currMethod, new Object[]{numStr}); 
  7.     // 打印校驗(yàn)結(jié)果 
  8.     if (violations.isEmpty()) { 
  9.         System.out.println("校驗(yàn)通過(guò)!"); 
  10.     } else { 
  11.         System.out.println("校驗(yàn)不通過(guò)!錯(cuò)誤詳情如下:"); 
  12.         violations.forEach(v -> System.out.println("\t" + v.getPropertyPath() + v.getMessage() + ",但你的值是:" + v.getInvalidValue())); 
  13.         throw new IllegalArgumentException("校驗(yàn)不通過(guò)!"); //拋出異常,終止此方法 
  14.     } 
  15.     // 執(zhí)行參數(shù)校驗(yàn)邏輯end... 
  16.  
  17.     int result = Integer.parseInt(numStr); 
  18.     // 執(zhí)行返回值校驗(yàn)邏輯start 
  19.     // executableValidator.validateReturnValue(); 
  20.     // 執(zhí)行返回值校驗(yàn)邏輯end 
  21.     return result; 

這樣每次方法運(yùn)行時(shí)就能觸發(fā)校驗(yàn)邏輯了。也許,你會(huì)覺得這么做不算完美:侵入性太強(qiáng)了。

是的,不夠優(yōu)雅。但有經(jīng)驗(yàn)的小伙伴似乎一眼就能看出來(lái)如何優(yōu)化:

沒(méi)錯(cuò),就是用AOP來(lái)改善壞味道的代碼,讓校驗(yàn)邏輯和業(yè)務(wù)邏輯完全分離。

至于如何使用AOP,額,筆者就不用再貼代碼示例了吧,給你點(diǎn)提示:

在非Spring場(chǎng)景下,可基于Java EE的@Inteceptors實(shí)現(xiàn)

在Spring場(chǎng)景下,你熟悉的場(chǎng)景

本專欄源代碼:https://github.com/yourbatman/FXP-java-ee

JPA

Java Persistence API:通過(guò)注解或者XML描述【對(duì)象-關(guān)系表】之間的映射關(guān)系,并將實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)中。JPA規(guī)范給開發(fā)者帶來(lái)了福音:開發(fā)者面向JPA規(guī)范的接口,但底層的JPA實(shí)現(xiàn)可以任意切換:覺得Hibernate好的,可以選擇Hibernate JPA實(shí)現(xiàn);覺得TopLink好的,可以選擇TopLink JPA實(shí)現(xiàn)……這樣開發(fā)者可以避免為使用Hibernate學(xué)習(xí)一套ORM框架,為使用TopLink又要再學(xué)習(xí)一套ORM框架。

如圖亦可見,JPA是Java EE的野心:Sun公司希望通過(guò)JPA整合ORM技術(shù),實(shí)現(xiàn)天下歸一。實(shí)際情況是,它做到了,除了天朝鐘愛更輕量級(jí)的MyBatis外,海外依舊是使用JPA居多。

學(xué)習(xí)過(guò)Hibernate的應(yīng)當(dāng)可以很輕易的上手Java persistence,因?yàn)镴ava persistence的開發(fā)者其實(shí)就是原h(huán)ibernate的開發(fā)者。再配合以annotation,可以很輕易的開發(fā)出Entity Bean。

注意:是先有Hibernate、TopLink等ORM框架,后才有的JPA來(lái)統(tǒng)一天下的

 
 
 
 
  1.  
  2.  
  3.     javax.persistence 
  4.     javax.persistence-api 
  5.     2.2 
  6.  
  7.  
  8.  
  9.  
  10.     jakarta.persistence 
  11.     jakarta.persistence-api 
  12.     3.0.0 
  13.      
  14.  

版本歷程

版本發(fā)布日期JSR版本對(duì)應(yīng)Java EE版本
1.02006.05--Java EE 5
2.02009.12JSR 317Java EE 6
2.22017.08JSR 338Java EE 8
3.02020.11Jakarta管理Jakarta EE 9

JPA 2.1已經(jīng)是一個(gè)非常成熟的規(guī)范,提供了現(xiàn)代應(yīng)用程序所需的大部分功能。2017年夏天發(fā)布的2.2版本(規(guī)范內(nèi)容和2.1規(guī)范差不多),新增了對(duì)Java 8更好的支持,如它的日期時(shí)間Date/Time、重復(fù)注解@Repeatable、Stream形式等等,大大增加了其易用性。

下面列出JPA最常用的一些注解:

序號(hào)注解標(biāo)注在哪釋義
01@Entity標(biāo)識(shí)實(shí)體類是JPA實(shí)體,告訴JPA在程序運(yùn)行時(shí)生成實(shí)體類對(duì)應(yīng)表
02@Table定義entity主表的name,catalog,schema等屬性。也就是說(shuō)ORM規(guī)則自定義
03@Id屬性標(biāo)注此屬性為主鍵
04@GeneratedValue屬性JPA通用主鍵策略生成器,此方式依賴具體數(shù)據(jù)庫(kù)(和@Id聯(lián)用)
05@Column屬性定義了映射到數(shù)據(jù)庫(kù)的列的所有屬性:列名,是否唯一,是否允許為空,是否允許更新等
06@Transient屬性該屬性并不是一個(gè)到數(shù)據(jù)庫(kù)表的字段的映射,指定的這些屬性不會(huì)被持久化,ORM框架將忽略該屬性
07@Temporal屬性當(dāng)為java.util中的日期/時(shí)間類型時(shí),通過(guò)它來(lái)指定格式
08@Enumerated屬性標(biāo)注枚舉類型如何存庫(kù)
09@TableGenerator類/屬性定義一個(gè)主鍵值生成器,在Id這個(gè)元數(shù)據(jù)的generate=TABLE時(shí),generator屬性中可以使用生成器的名字
10@SequenceGenerator類/屬性定義一個(gè)主鍵值生成器,在Id這個(gè)元數(shù)據(jù)的generator屬性中可以使用生成器的名字
11@SecondaryTable一個(gè)entity class可以映射到多表,SecondaryTable用來(lái)定義單個(gè)從表的名字,主鍵名字等屬性
12@UniqueConstraint注解元數(shù)據(jù)定義在Table或SecondaryTable元數(shù)據(jù)里,用來(lái)指定建表時(shí)需要建唯一約束的列
13@OneToOne一對(duì)一的關(guān)聯(lián)??膳渲米ト〔呗?、級(jí)聯(lián)操作等
14@ManyToOne多對(duì)一的映射,該注解標(biāo)注的屬性通常是數(shù)據(jù)庫(kù)表的外鍵
15@OneToMany一對(duì)多的關(guān)聯(lián),該屬性應(yīng)該為集體類型,在數(shù)據(jù)庫(kù)中并沒(méi)有實(shí)際字段
16@ManyToMany多對(duì)多的關(guān)聯(lián).多對(duì)多關(guān)聯(lián)上是兩個(gè)一對(duì)多關(guān)聯(lián),但是在ManyToMany描述中,中間表是由ORM框架自動(dòng)處理
17@JoinColumn屬性如果在entity class的field上定義了關(guān)系(one2one或one2many等),通過(guò)JoinColumn來(lái)定義關(guān)系的屬性
18@IdClass當(dāng)entity class使用復(fù)合主鍵時(shí),需要定義一個(gè)類作為id class
19@MapKey屬性在一對(duì)多,多對(duì)多關(guān)系中,我們可以用Map來(lái)保存集合對(duì)象。默認(rèn)用主鍵值做key,如果使用復(fù)合主鍵,則用id class的實(shí)例做key,如果指定了name屬性,就用指定的field的值做key
20@OrderBy屬性在一對(duì)多,多對(duì)多關(guān)系中,有時(shí)希望從數(shù)據(jù)庫(kù)加載出來(lái)的集合對(duì)象是按一定方式排序的,這可以通過(guò)OrderBy來(lái)實(shí)現(xiàn),默認(rèn)是按對(duì)象的主鍵升序排列
21@Version屬性實(shí)體類在樂(lè)觀事務(wù)中的version屬性
22@Lob屬性指定一個(gè)屬性作為數(shù)據(jù)庫(kù)支持的大對(duì)象類型在數(shù)據(jù)庫(kù)中存儲(chǔ)。使用LobType這個(gè)枚舉來(lái)定義Lob是二進(jìn)制類型還是字符類型
23@DiscriminatorColumn屬性定義在使用SINGLE_TABLE或JOINED繼承策略的表中區(qū)別不繼承層次的列

@Entity和@Table有何區(qū)別?答:@Entity表示這個(gè)class是實(shí)體類,并且使用 默認(rèn)的 orm規(guī)則,即class名即數(shù)據(jù)庫(kù)表中表名,class字段名即表中的字段名。若想自定義規(guī)則,就要使用@Table來(lái)改變包括表名、schema等,且輔助@Column來(lái)改變class中字段名與db中表的字段名的映射規(guī)則。很明顯,@Table + @Column組合方式更靈活和更常用。

典型示例:

 
 
 
 
  1. @Entity  //聲明該類是和數(shù)據(jù)庫(kù)表映射的實(shí)體類 
  2. @Table(name="t_user")  //建立實(shí)體類與表的映射關(guān)系 
  3. public class User implements Serializable { 
  4.  
  5.  @Id  //聲明當(dāng)前私有屬性為主鍵 
  6.  @GeneratedValue(strategy=GenerationType.IDENTITY)  //配置主鍵的生成策略,為自增主鍵 
  7.  @Column(name = "user_id") 
  8.  private Long userId; 
  9.  @Column(name="user_name")   
  10.  private String userName; 
  11.  @Column(name="user_source") 
  12.  private String userSource; 
  13.   

生存現(xiàn)狀

國(guó)內(nèi)不樂(lè)觀,海外堅(jiān)挺。

實(shí)現(xiàn)(框架)

雖說(shuō)ORM框架較多,但Hibernate的市占率獨(dú)步天下,幾乎能等同于JPA規(guī)范。畢竟制定JPA規(guī)范的人之前在Hibernate上班呢~

Hibernate 從3.2開始,開始兼容JPA。

版本日期JPA版本info
5.02015.082.1兼容到JDK 6,提供hibernate-java8兼容到JDK 8
5.12016.022.1小版本迭代逐步放棄6、7,最低要求8
5.22016.062.1最低要求JDK 8
5.32018.052.2最低要求JDK 8,全面使用maven管理器所有的模塊artifacts
5.42018.122.2EntityGraph增強(qiáng)。最低要求8,支持11和17
5.52021.062.2/3.0同上。額外通過(guò)hibernate-core-jakarta增加了對(duì)JPA 3.0規(guī)范的支持
5.6開發(fā)中2.2/3.0開發(fā)中
6.0開發(fā)中2.2/3.0開發(fā)中

值得注意的是,Hibernate采用模塊化管理,其中最重要的當(dāng)屬hibernate-core,還有hibernate-tools、hibernate-jcache、hibernate-hikaricp、hibernate-ehcache等等

代碼示例

在classpath下準(zhǔn)備一個(gè)hibernate.cfg.xml標(biāo)準(zhǔn)文件(亦可不使用xml文件,完全采用編程方式設(shè)置configuration):

 
 
 
 
  1.  
  2.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
  3.         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
  4.  
  5.  
  6.      
  7.      
  8.         com.mysql.cj.jdbc.Driver 
  9.         jdbc:mysql://localhost:3306/demo 
  10.         root 
  11.         root 
  12.         org.hibernate.dialect.MySQLDialect 
  13.          
  14.         com.zaxxer.hikari.hibernate.HikariConnectionProvider 
  15.  
  16.          
  17.         true 
  18.         true 
  19.  
  20.          
  21.         validate 
  22.      
  23.  

準(zhǔn)備一個(gè)entity(并在數(shù)據(jù)庫(kù)創(chuàng)建好表結(jié)構(gòu)):

 
 
 
 
  1. /** 
  2.  * 在此處添加備注信息 
  3.  * 
  4.  * @author YourBatman. Send email to me 
  5.  * @site https://yourbatman.cn 
  6.  * @date 2021/10/6 16:11 
  7.  * @since 0.0.1 
  8.  */ 
  9. @Data 
  10. @Entity 
  11. @Table(name = "user") 
  12. public class User { 
  13.  
  14.     @Id 
  15.     @GeneratedValue(strategy = GenerationType.IDENTITY) 
  16.     private Long id; 
  17.  
  18.     @Column(name = "name") 
  19.     private String name; 
  20.     @Column(name = "age") 
  21.     private Integer age; 
  22.  

啟動(dòng)Hibernate:

 
 
 
 
  1. /** 
  2.  * 在此處添加備注信息 
  3.  * 
  4.  * @author YourBatman. Send email to me 
  5.  * @site https://yourbatman.cn 
  6.  * @date 2021/10/6 16:06 
  7.  * @since 0.0.1 
  8.  */ 
  9. public class JPADemo { 
  10.  
  11.     @Test 
  12.     public void fun1() { 
  13.         // 準(zhǔn)備Hibernate的Session 
  14.         Configuration configure = new Configuration().configure(); 
  15.         SessionFactory sessionFactory = configure.buildSessionFactory(); 
  16.         Session session = sessionFactory.openSession(); 
  17.         Transaction transaction = session.beginTransaction(); 
  18.  
  19.         // 業(yè)務(wù)邏輯start 
  20.         User user = new User(); 
  21.         user.setName("YourBatman"); 
  22.         user.setAge(10); 
  23.         session.save(user); 
  24.         System.out.println("保存成功,id為:" + user.getId()); 
  25.         // 業(yè)務(wù)邏輯end 
  26.  
  27.         transaction.commit(); 
  28.         session.close(); 
  29.         sessionFactory.close(); 
  30.     } 
  31.  

大功告成。

在國(guó)內(nèi),即使使用JPA,大都是使用Spring Data JPA,可大大簡(jiǎn)化開發(fā)。當(dāng)然嘍,企業(yè)級(jí)項(xiàng)目使用MyBatis還是居多~

工程源代碼:https://github.com/yourbatman/FXP-java-ee

總結(jié)

本文拉齊了Java EE的兩項(xiàng)熱門技術(shù):Bean Validation和JPA,它倆的實(shí)現(xiàn)恰巧都是Hibernate,所以放在本篇一起毫無(wú)違和感。


本文標(biāo)題:【方向盤】版本歷史&代碼示例之:Bean Validation、JPA
文章來(lái)源:http://www.5511xx.com/article/dhgjocs.html