解决实体类中对象的问题
在之前的学习过程中,如果要想实现多表的联合查询功能,就需要在实体类中添加另一个实体类。
比如说,有两张表,一张User表,存放用户的基本信息,一张Account表,存放用户的银行卡信息。这时如果要将用户对应的所有银行卡都查询出来,就要在User类中定义一个Account属性,这样从数据库中查询出来数据之后才可以进行封装。
public class User implements Serializable {
private Integer id;
private String AccountId;
private String name;
private String token;
private Long gmtCreate;
private Long gmtModified;
private List<Account> accList;
}
public class Account{
private String account_id;
private String account_name;
}
今天学到了一个新的方法,比如说还是两张表,一张User表,一张Question表,分别用于存放用户的信息和问题的信息。
需要查询出来问题提出的User用户,比较简单的一个需求,之前可以直接两张表关联一下就出来了。
今天学到了一个不一样的方法。
使用一张新的表,可以理解为中间表,原来两张表的属性不变,还是基本属性。
public class User {
private Integer id;
private String AccountId;
private String name;
private String token;
private Long gmtCreate;
private Long gmtModified;
}
public class Question implements Serializable {
private Integer id;
private String title;
private String description;
private Long gmtCreate;
private Long GmtModified;
private Integer creator;
private Integer attentionCount;
private Integer viewCount;
private Integer likeCount;
private String tag;
}
这是我的两张基础表,在这两张表不做出修改的情况下,添加一个中间表,在中间表中添加User对象属性。
private Integer id;
private String title;
private String description;
private Long gmtCreate;
private Long GmtModified;
private Integer creator;
private Integer attentionCount;
private Integer viewCount;
private Integer likeCount;
private String tag;
private User user;
}
controller:
List<QuestionDTO> quesLists = questionService.questionList();
service:
需要在service处理业务,将user查询出来,同时查询出相应的question,在将在两条数据合并到QuestionDTO的对象中,并返回。
public List<QuestionDTO> questionList() {
List<Question> questions = questionMapper.questionList();
List<QuestionDTO> list = new ArrayList<>();
for(Question question : questions){
User user = userMapper.findById(question.getCreator());
QuestionDTO questionDTO = new QuestionDTO();
BeanUtils.copyProperties(question,questionDTO);
questionDTO.setUser(user);
list.add(questionDTO);
}
return list;
}
听说这是工作中常用的方式,咱也不知道,学着玩呗。