Spring boot构造数据库Dao层查询对象实体逻辑
项目中涉及到多表查询时,通常会先传入一个表对应的查询实体,拿到某个关联字段后再利用该关联字段去另一个表中查询,那么如何利用这个关联字段构建另一张表对应的查询实体来查询另一张表呢。
话不多说,直接上代码。
所有的表(PO)类加上Builder以及两个衍生注解,写法如下
@Builder //很重要
@AllArgsConstructor//衍生
@NoArgsConstructor//衍生
@Entity //Po固定写法
@Data //Po固定写法
@Table(name = "数据库表名")
public class TabScore {
@Id //标识这是数据库主键
@Column(name = "S_ID", unique = true, nullable = false, length = 100) //对应字段的数据库名字和属性
private Integer sId;
}
在需要构造Dao层表实体的时候,就可以直接这样写:
情境是给了表一的Vo实体,入参要写成表二的Po实体
@Override
public RestApiResultVo<ScoreVo> getScore(ScoreVo scoreVo) {
if (StringUtils.isEmpty(scoreVo.getStuId())||StringUtils.isEmpty(scoreVo.getSubject()))
{
return RestApiResultVo.paramError();
}
TabScore score = TabScore.builder().sId(scoreVo.getScoreId()).sStudentId(scoreVo.getStuId()).sSubjectName(scoreVo.getSubject()).sSubjectScore(scoreVo.getScore()).sStudentName(scoreVo.getName()).build();//利用Builder()构造TabScore实体。
List<TabScore> list= scoreDao.getScore(score);//构造好去第二张表查
if (list.size() == 0){
return RestApiResultVo.error(API_DOMAINLINK_SETUP_ERR_DOMAIN_NOT_EXISTS.getStatusCode());//结果为空处理
}
ScoreVo Vo = createStudentVoFromList(list);//将Dao层查出的Po对象转为供前端使用的Vo对象返回
return RestApiResultVo.success(Vo,1);
}