国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

用Java 17的Records加速Spring Boot開發(fā)

開發(fā) 項目管理
record是一種特殊類型的類聲明,目的是為了減少樣板代碼。record引入的主要目的是快速創(chuàng)建數(shù)據(jù)載體類。

在《??Spring Boot 2.6新特性:使用Java 17的Record作為配置屬性??》,我們提到了使用Java Records來作為Spring Boot的配置屬性(configuration properties),從而減少了大量樣板代碼的編寫,我們本篇將進一步拓展Records在Spring Boot下的應(yīng)用場景,從而進一步減少我們的樣板代碼,使代碼看上去更簡潔清晰。

1、什么是Records

record是一種特殊類型的類聲明,目的是為了減少樣板代碼。record引入的主要目的是快速創(chuàng)建數(shù)據(jù)載體類。

這種類的主要目的就是在不同的模塊或者層之間包含并傳遞數(shù)據(jù),它們表現(xiàn)為POJO(Plain Old Java Objects)和DTO(Data Transfer Objects)。

record聲明有專門的的關(guān)鍵字record,我們比較下一個簡單的POJO類和record上語法的區(qū)別:

POJO類:

@Data
public class Point {
private String x;
private String y;
}

record:

public record Point(String x, String y) {
}

我們創(chuàng)建一個簡單的演示項目,依賴如圖所示:

2、使用record替代普通DTO

我們在Spring MVC的控制器中可以用一個record的DTO來接受前端傳遞來的數(shù)據(jù):

@RestController
@RequestMapping("/people")
public class PersonController {

private final PersonService personService;

public PersonController(PersonService personService) {
this.personService = personService;
}

@PostMapping
public ResponseEntity<Person> save(@RequestBody PersonDto personDto){
return ResponseEntity.ok(personService.save(personDto));
}

@GetMapping("/findByLastName")
public ResponseEntity<List<PersonOnlyWithName>> findByLastName(String lastName){
return ResponseEntity.ok(personService.findByLastName(lastName));
}
}

上面的PersonDto是一個record:

public record PersonDto(String firstName, String lastName,Integer age) {
}

3、使用record作為Spring的Bean

上面注入的PersonService,是一個Spring的Bean,它同樣可以是一個record,我們只需要在record的參數(shù)里寫上要被注入的bean,這個bean就會自動被注入:

@Service
public record PersonService(PersonRepository personRepository){

//保存person
public Person save(PersonDto personDto){
Person person = new Person(personDto.firstName(), personDto.lastName(), personDto.age());
return personRepository.save(person);
}

//按照lastName查詢people,返回值只有firstName和lastName
public List<PersonOnlyWithName> findByLastName(String lastName){
return personRepository.findByLastName(lastName);
}
}

在這里的PersonRepository的bean可以自動被注入,代碼上比屬性@Autowired注入,甚至構(gòu)造器注入代碼更簡潔。

Spring Data JPA用作數(shù)據(jù)訪問的Repository:

public interface PersonRepository extends JpaRepository<Person, Long> {

List<PersonOnlyWithName> findByLastName(String lastName);
}

使用record來聲明bean,有一些潛在的問題:

1、record中,被注入的對象在當(dāng)前對象里其實是有一個隱藏的get方法:“personService.personRepository()”,這違反了信息隱藏的封裝原則。

2、record定義了equals和hasCode方法,作為service并不需要。

3、service的變量屬性一般都是final。

如果上述的東西對你并沒有什么影響,你可以自由決定是否使用。

3、使用record作為Spring Data JPA的projection

Spring Data JPA的projection目的是定制查詢的數(shù)據(jù)返回,而不是返回整個實體。一般情況下都是使用接口或者dto類,現(xiàn)在支持使用record。

定制的返回的record內(nèi)容為:

public record PersonOnlyWithName(String firstName, String lastName) {
}

即我們查詢返回的結(jié)果,不需要id和age,只需要firstName和lastName。

4、演示應(yīng)用

啟動程序,保存Person,插入兩條數(shù)據(jù):

按照lastName查詢,查看我們projection的效果:

用record改造Controller控制器

在上面我們的Controller用的還是普通的class,既然record可以聲明為bean并注入bean,那我們改造一下上面的Controller。

@RestController
@RequestMapping("/people")
public record PersonController(PersonService personService) {

@PostMapping
public ResponseEntity<Person> save(@RequestBody PersonDto personDto){
return ResponseEntity.ok(personService.save(personDto));
}

@GetMapping("/findByLastName")
public ResponseEntity<List<PersonOnlyWithName>> findByLastName(String lastName){
return ResponseEntity.ok(personService.findByLastName(lastName));
}
}

代碼比構(gòu)造器注入更精簡。

文章出自:??愛科學(xué)的衛(wèi)斯理??,如有轉(zhuǎn)載本文請聯(lián)系愛科學(xué)的衛(wèi)斯理今日頭條號。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2016-10-14 14:16:28

Spring BootJava應(yīng)用

2018-05-25 16:32:45

Spring BootJava開發(fā)

2019-01-15 11:40:14

開發(fā)技能代碼

2023-05-29 08:43:46

SpringJava

2022-11-08 07:46:28

record類聲明代碼

2025-02-05 12:28:44

2018-05-31 15:30:11

JavaSpring Boot應(yīng)用開發(fā)

2013-07-01 10:07:44

JavaSpringHibernate

2019-04-15 08:32:25

Spring Boot日志門面模式

2019-01-31 13:43:48

Spring BootStarter開發(fā)

2025-07-02 10:06:32

2017-08-02 14:44:06

Spring Boot開發(fā)注解

2013-07-04 13:19:24

Java開發(fā)速度

2024-10-18 11:32:15

2023-10-31 07:48:22

QuarkusJava

2016-11-03 09:59:38

kotlinjavaspring

2017-03-06 15:43:33

Springboot啟動

2019-03-28 11:07:56

Spring BootRedis緩存

2013-07-04 13:37:23

Java開發(fā)速度

2013-07-03 09:52:13

熱部署熱替換
點贊
收藏

51CTO技術(shù)棧公眾號

国产成人一区二区三区别| 国产精品日韩久久久| 神马国产精品影院av| 四虎影视精品永久在线观看| www.欧美精品一二三区| 97久久亚洲| 日韩免费高清在线观看| 欧美69视频| 亚欧精品在线| 91污在线观看| 免费在线看污| 欧美一区二区三区四区高清| 色是在线视频| 欧美极品在线视频| 外国成人激情视频| 久久久久久a亚洲欧洲aⅴ| 精久久久久久久久久久| 免费观看精品视频| 狠狠做深爱婷婷久久综合一区 | 亚洲精品人成| 久久亚洲综合av| 最新二区三区av| 欧美精品一区男女天堂| 视频欧美一区| 国产综合精品一区二区三区| 高清在线观看日韩| 深夜福利在线视频| 亚洲视频在线观看视频| av一区二区高清| 五月天男人天堂| 亚洲精品成人少妇| av今日在线| 国产91色在线免费| 国产乱对白刺激视频不卡| 亚欧精品一区| 亚洲人成在线电影| 久久久久久久久久久妇女| 91免费国产精品| 色综合夜色一区| 国产剧情一区二区在线观看| 国产精品国产三级欧美二区| 91理论电影在线观看| 毛片av在线| 欧美在线视频导航| 国产高清亚洲一区| 最新电影电视剧在线观看免费观看| 欧美xxxx做受欧美| 国产精品亚洲产品| 色老板在线视频| 久色乳综合思思在线视频| 国产精品日韩精品欧美精品| 黄a免费视频| 久久精品国产99国产精品澳门| 亚洲免费激情| 一级特黄特色的免费大片| 色婷婷综合成人av| 亚洲资源av| 天堂av在线播放| 欧美精品国产精品日韩精品| 久久99精品久久只有精品| 高清美女视频一区| 国产国语videosex另类| 成人一道本在线| 日本在线观看大片免费视频| 欧美一二三区在线观看| 欧美精三区欧美精三区| 91精品一久久香蕉国产线看观看| 国产传媒一区二区三区| 欧美国产一区二区| 久久不射影院| 91高跟黑色丝袜呻吟在线观看| 久久久久久免费毛片精品| 7777kkk亚洲综合欧美网站| 成人午夜两性视频| 国产精品私人影院| 国产精品久久久久久久久免费高清| 看欧美日韩国产| 色婷婷综合久色| 国产亚洲电影| 亚洲精品成人| 婷婷丁香激情网| 国产一区二区三区在线观看视频| 一区二区高清| 国产中文字幕在线播放| 国产69久久精品成人| 成人av高清在线| 欧美三级网站| 水蜜桃亚洲精品| 欧美福利视频导航| 欧美日韩一视频区二区| 免费国产视频| 日本欧美爱爱爱| 中文字幕日韩av资源站| 天堂精品久久久久| 久操网在线观看| 日韩精品极品在线观看| 99精品免费视频| 国产在线观看高清视频| 91豆花视频在线播放| 欧美中文字幕在线观看| 精品成a人在线观看| 国产999精品在线观看| 成人午夜免费在线视频| 亚洲精品国产电影| 日韩成人精品在线| 日韩av官网| 国产精品一区二区三区精品| 在线这里只有精品| 亚洲精品影视| 永久免费av在线| 久久精品国产综合精品| 欧美精品日韩一区| 99视频精品免费观看| 精品视频在线一区二区| 日本欧美色综合网站免费| 亚洲福利视频在线| 国产成人av一区二区三区在线| 日韩漫画puputoon| wwwwww.色| 国产精品一区二区三区免费视频| 精品magnet| 国产精品三上| 僵尸再翻生在线观看| 亚洲自拍偷拍一区二区三区| 在线成人激情视频| 中文字幕第一区二区| 欧美1级片网站| 欧美激情二区| 欧美美女黄色网| 欧美精品福利在线| 欧美日在线观看| 日日夜夜精品视频免费| 91p九色成人| 免费观影入口看日本视频| 国产精品一区二区欧美黑人喷潮水 | 成人啊v在线| 日韩免费毛片视频| 国产97色在线| 91久久精品一区二区| 日韩中文字幕av电影| 天天免费亚洲黑人免费| 杨幂毛片午夜性生毛片| 91色在线观看| 亚洲男人天堂视频| 亚洲一区二区精品久久av| 亚洲一区久久| 8x国产一区二区三区精品推荐| 亚洲热app| 免费观看亚洲视频| 国产精品旅馆在线| 亚洲国产精品高清久久久| 中文字幕一区二区三区精华液 | 色婷婷精品久久二区二区蜜臀av | 亚洲国产欧美一区二区三区久久| 91玉足脚交白嫩脚丫在线播放| 精品成av人一区二区三区| 91精品久久| 羞羞网站在线观看入口免费| 国模精品娜娜一二三区| 久久天天躁狠狠躁夜夜躁| 在线一区二区观看| 久久综合九色综合欧美98| 亚洲国产婷婷| 超碰cao国产精品一区二区| 国产鲁鲁视频在线观看特色| 午夜免费一区二区| 欧美重口乱码一区二区| 69av在线播放| 亚洲国产精品久久| 亚洲va天堂va国产va久| 成人激情小说乱人伦| 最新国产拍偷乱拍精品| 久久视频在线观看| 91九色porn在线资源| 午夜成在线www| 国产又黄又大又粗视频| 狠狠色综合欧美激情| 91成人在线视频| 国产一区二区三区在线观看视频| 欧美午夜精品免费| 亚洲精品乱码久久久久久| 国产麻豆9l精品三级站| 影音先锋中文字幕一区| 亚洲另类春色校园小说| 国产精品第一国产精品| 在线免费观看a视频| 四虎影视2018在线播放alocalhost| 国产在线观看福利| 中文字幕一区二区三区四区五区六区| 亚洲一区二区自拍| 人人做人人澡人人爽欧美| 色综合亚洲精品激情狠狠| 欧美变态凌虐bdsm| 日韩欧美久久| 91麻豆精品秘密| 亚洲精品免费在线观看| 日韩免费电影一区二区| 九色成人国产蝌蚪91| 网站一区二区| 一区二区三区日韩精品视频|