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