【Mybatis-plus-join】 一对一
【Mybatis-plus-join】 一对一
Metadata
title: 【Mybatis-plus-join】 一对一
date: 2023-01-22 19:33
tags:
- 行动阶段/完成
- 主题场景/组件
- 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
- 细化主题/Module/Mybatis-plus-join
categories:
- Mybatis-plus-join
keywords:
- Mybatis-plus-join
description: 【Mybatis-plus-join】 一对一
【Mybatis-plus-join】 一对一
// 很多时候连表返回的字段很多都相同,所以在每个vo里面都会出现,如果把这些重复性字段封装成一个类,会更好维护,所以说针对这个情况 版本 >= 1.0.6 即可使用oneToOneSelect 方法
JoinLambdaWrapper<Users> wrapper = joinLambdaQueryWrapper(Users.class);
wrapper.leftJoin(UsersAge.class, UsersAge::getId, Users::getAgeId)
// oneToOneSelect 第一个参数需要映射的实体类字段,第二个参数则是查询函数
.oneToOneSelect(UsersVo::getUsersAge, (cb) -> {
cb.add(UsersAge::getAgeDoc, UsersAge::getAgeName)
/*
当你出现两个实体类映射字段相同,例如 user实体中有个字段id,userAge表中也有个字段id,你 想要同时获取这两个字段,这时候则可以使用
|column : 查询字段
|alias : 别名
|fieldName : 字段名称
add(SFunction<T, ?> column, String alias, SFunction<F, ?> fieldName)
*/
.add(UsersAge::getId, "ageId", UsersAge::getId)
// 在1.3.2版本后 属性名和映射vo的属性名相同的情况下,可以不必写别名,就可以完成自动映射
.add(UsersAge::getId);
})
// 1.3.3版本之后可以 这样子查询这个类的所有查询字段并赋值到对象中
.oneToOneSelect(UsersVo::getUsersAge,UsersAge.class)
.end();
return super.joinList(wrapper, UsersVo.class);
sql
SELECT users.user_name, users.create_time, users.age_id, users.user_id, users_age.age_doc
, users_age.age_name, users_age.id AS ageId
FROM users users
LEFT JOIN users_age users_age ON users_age.id = users.age_id
返回结果
[
{
"ageId":1,
"createTime":1635416270000,
"userId":1,
"userName":"名字啊",
"usersAge":{
"ageDoc":"90",
"ageName":"90",
"id":1
}
}...
]
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 蝶梦庄生!
评论