多表联合查询看到的感觉比较有意思的实现

java / 2023-02-09
0 1,250

解决实体类中对象的问题

在之前的学习过程中,如果要想实现多表的联合查询功能,就需要在实体类中添加另一个实体类。
比如说,有两张表,一张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;
    }

听说这是工作中常用的方式,咱也不知道,学着玩呗。