@accessors(chain = true)这个为什么一般加在实体类上
时间: 2023-09-20 16:00:53 浏览: 66
@accessors(chain = true)是一个注解,一般加在实体类上的目的是为了提供链式调用的语法。
在一些特定的场景下,我们经常需要对实体类的属性进行多次赋值操作,例如:
```java
Person person = new Person();
person.setName("张三");
person.setAge(18);
person.setGender("男");
```
使用@accessors(chain = true)注解可以使代码更加简洁,可以链式地进行属性赋值操作,例如:
```java
Person person = new Person()
.setName("张三")
.setAge(18)
.setGender("男");
```
通过链式调用,可以一行代码完成多个属性的赋值操作,提高了代码的可读性和简洁性。这在一些需要频繁操作实体类的属性时,特别有用。
除了@accessors(chain = true),还有一些其他的注解也可以实现链式调用的效果,例如:@Builder、@AllArgsConstructor等。不过@accessors(chain = true)注解是通过改变getter和setter的生成策略来实现链式调用的效果。
总之,@accessors(chain = true)注解在实体类上的添加,可以简化属性赋值操作,提高代码的可读性和简洁性。
相关问题
SpringBoot中的@Accessors(chain = true)注解的作用
@Accessors(chain = true)注解是Lombok框架中的一种注解,在使用该注解后,Lombok会自动生成setter方法,并且这些setter方法的返回值类型是当前对象本身,即返回this,从而实现了链式调用。
在SpringBoot中,我们可以在实体类中使用@Accessors(chain = true)注解来简化代码,例如:
```
@Data
@Accessors(chain = true)
public class User {
private Long id;
private String name;
private Integer age;
}
```
在上面的代码中,我们使用了@Data和@Accessors(chain = true)注解来生成getter和setter方法,并且设置了chain属性为true,表示生成的setter方法返回当前对象本身。
使用@Accessors(chain = true)注解后,我们可以通过链式调用来设置实体类的属性值,例如:
```
User user = new User();
user.setId(1L).setName("张三").setAge(20);
```
这样,我们就可以通过链式调用来设置实体类的属性值,代码更加简洁,可读性和可维护性都得到了提高。
现有如下要求,模拟博客系统中展示本周热议文章;现实体类、数据层、控制层都已书写完毕,需将业务补全。 文章Post实体如下: @Data @Accessors(chain = true) @TableName("m_post") public class Post implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.A
假设本周热议文章需要满足以下条件:
1. 文章发布时间在本周内;
2. 文章被阅读的次数较多;
则可以按照以下步骤实现:
1. 在数据层(DAO)中编写查询方法,筛选出本周发布的文章,并按照阅读次数降序排序。例如:
```java
@Mapper
public interface PostMapper extends BaseMapper<Post> {
// 查询本周热议文章
List<Post> listHotPostsOfWeek(
@Param("startTime") Date startTime,
@Param("endTime") Date endTime
);
}
```
2. 在控制层(Controller)中调用数据层的查询方法,将查询结果传递给视图层(View)进行展示。例如:
```java
@RestController
public class PostController {
@Autowired
private PostMapper postMapper;
@GetMapping("/hot-posts-of-week")
public List<Post> listHotPostsOfWeek() {
// 计算本周起始时间和结束时间
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Date startTime = calendar.getTime();
calendar.add(Calendar.DAY_OF_WEEK, 6);
Date endTime = calendar.getTime();
// 调用数据层的查询方法
List<Post> hotPostsOfWeek = postMapper.listHotPostsOfWeek(startTime, endTime);
return hotPostsOfWeek;
}
}
```
3. 在视图层(View)中展示查询结果,例如通过前端页面展示文章列表。可以使用模板引擎(如Thymeleaf)或前后端分离的方式进行展示。例如:
```html
<div th:each="post : ${hotPostsOfWeek}">
<h2 th:text="${post.title}"></h2>
<p th:text="${post.content}"></p>
<p>阅读次数: <span th:text="${post.readCount}"></span></p>
</div>
```