SpringBoot2.0實戰(zhàn) | 第七章:SpringBoot集成Lombok讓項目更簡潔

Lombok 可以通過簡單的注解來簡化 Java 代碼,提高開發(fā)效率

相關知識

Lombok官網(wǎng):https://projectlombok.org/

常用注解

  • @Setter | @Getter

提供無參構(gòu)造方法以及 getter、setter 方法

@Getter
@Setter
public class User {
    private Long id;
    private String username;
}
  • @EqualsAndHashCode

提供無參構(gòu)造方法以及 equals、hashCode 方法

includeFieldNames 是否包含屬性名
exclude 排除指定屬性
callSuper 是否包含父類屬性

@EqualsAndHashCode
public class User {
    private Long id;
    private String username;
}
  • @AllArgsConstructor

提供一個全參數(shù)的構(gòu)造方法,默認不提供無參構(gòu)造

@AllArgsConstructor
public class User {
    private Long id;
    private String username;
}
  • @NoArgsConstructor

提供一個無參構(gòu)造

@NoArgsConstructor
public class User {
    private Long id;
    private String username;
}
  • @Data

結(jié)合了@ToString,@EqualsAndHashCode,@Getter、@Setter、@NoArgsConstructor

staticConstructor 生成靜態(tài)工廠方法的方法名,如果設置了該參數(shù),則生成的無參構(gòu)造方法將被置為私有的。

@Data
public class User {
    private Long id;
    private String username;
}
  • @Slf4j

提供 org.slf4j.Logger 變量,變量名為 log

@Slf4j
@RestController
public class UserController {

    @GetMapping("/listUser")
    public List<User1> listUser() {
        log.error("log with lombok");
        return null;
    }

}

本章目標

本章將在 SpringBoot集成SpringBootJPA完成CURD 的基礎上,整合 lombok,實現(xiàn)對數(shù)據(jù)庫表的操作。 熟悉并學會使用 lombok,簡化項目代碼

操作步驟

本文使用 Idea 集成開發(fā)環(huán)境

環(huán)境準備

安裝 lombok 插件

File -> settings,打開 Idea 的設置界面,從左側(cè)欄選擇 Plugins 選項,再在右側(cè)查詢 lombok,點擊安裝。

添加依賴

引入 Spring Boot Starter 父工程

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
</parent>

添加 lombok 的依賴

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>

同時添加對 spring-boot-starter-test 的依賴,用于進行單元測試,完整依賴如下

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

編碼

改寫實體類

將 User 類的 get / set 方法全部刪除,在類上添加注解 @Data,修改后的 User 類代碼如下,可以看到整個類的代碼變得非常清爽。

@Data
@Entity
public class User {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer sex;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthday;

}

驗證結(jié)果
編寫測試用例

@RunWith(SpringRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = Application.class)
public class UserTest {

    private MockMvc mvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Autowired
    private UserRepository userRepository;

    @Before
    public void setUp() {
        mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void testInsert() throws Exception {
        MvcResult mvcResult = mvc.perform(
                MockMvcRequestBuilders
                .post("/user/add")
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .content("{\"name\":\"user1\",\"sex\":1,\"birthday\":\"2000-05-21\"}")
        )
//        .andExpect(status().isOk());
//        .andExpect(content().string("hello"))
        .andDo(MockMvcResultHandlers.print())
        .andReturn();

        Assert.assertEquals(200, mvcResult.getResponse().getStatus());
    }

}

可以看到,改變后的實體類跟改變前的實體可以達到同樣的效果。

源碼地址

本章源碼 : https://gitee.com/gongm_24/spring-boot-tutorial.git

總結(jié)

Lombok 只是為了減少一些無關緊要的代碼,減少編碼的工作量,并不會減少程序的復雜度,這部分代碼會在項目編譯期間自動生成。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Lombok有什么用 在我們實體Bean中有大量的Getter/Setter方法以及toString, hashC...
    逆天子陸離閱讀 702評論 0 1
  • Lombok介紹: Lombok其實就是取名自龍目島(Pulau Lombok),龍目島是印度尼西亞西努沙登加拉(...
    端碗吹水閱讀 1,162評論 0 6
  • 1. 簡介 ??Project Lombok makes java a spicier language by a...
    RabbitsInGrass閱讀 462評論 0 0
  • 恐龍先生: 我們這兒感覺都要入冬了,你那里呢?過得怎么樣,用不用屯糧食什么的。我們這里是不用的,每個人都能吃飽穿...
    辰月涼秋閱讀 157評論 0 0
  • 一大早就看到鳳凰竹子給我發(fā)來的信息,說簡書可以發(fā)文了!這真是個好消息。感謝竹子的善良熱心。 簡書的放...
    紫蘇的葉子閱讀 2,101評論 65 60

友情鏈接更多精彩內(nèi)容