mybatisplus多表查询有必要将用到的数据封装在vo里吗
时间: 2024-03-14 09:28:09 浏览: 22
在使用MyBatisPlus进行多表查询时,将用到的数据封装在VO(View Object)中是一种常见的做法。这么做的好处是可以将多个表中的数据进行组合,形成一个新的数据结构,方便后续的业务处理。同时,使用VO可以将查询结果与业务逻辑分离,使代码更加清晰易懂。
虽然使用VO会增加一定的代码量,但是这是值得的。因为如果不使用VO,我们将不得不在业务逻辑中处理多个表中的数据,这样会让代码变得混乱不堪。同时,如果我们需要修改查询结果的数据结构,那么不使用VO的代码将会更难维护。
因此,使用VO封装多表查询结果是值得推荐的做法。
相关问题
mybatis 多表查询怎么将用到的字段封装成vo
要将多表查询中用到的字段封装成VO,可以按照以下步骤进行:
1. 定义VO类,命名为xxxVO(xxx代表业务模块名),在类中定义与查询结果对应的属性,属性名可以与表的列名相同,也可以自定义。
2. 在MyBatis的Mapper XML文件中,使用<resultMap>标签定义结果集映射规则,将查询结果集中的列与VO类中的属性进行映射。例如:
```
<resultMap id="xxxResultMap" type="com.xxx.xxxVO">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="dept_name" property="deptName"/>
<result column="job_title" property="jobTitle"/>
</resultMap>
```
其中,column属性表示查询结果集中的列名,property属性表示VO类中对应的属性名。
3. 在Mapper XML文件中编写多表查询的SQL语句,并在<resultMap>标签中引用定义的结果集映射规则。例如:
```
<select id="queryXXX" resultMap="xxxResultMap">
SELECT t1.id, t1.name, t1.age, t2.dept_name, t2.job_title
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
</select>
```
4. 在Java代码中调用Mapper接口的方法执行多表查询,并将查询结果封装为VO对象。
```
@Autowired
private XxxMapper xxxMapper;
public XxxVO queryXXX() {
return xxxMapper.queryXXX();
}
```
其中,XxxMapper是Mapper接口,queryXXX是定义在接口中的方法。执行该方法后,MyBatis会自动将查询结果封装为XxxVO对象并返回。
mybatisplus 多表查询数据分页
在 Mybatis-Plus 中,多表查询数据分页可以通过使用 Wrapper 来实现。Wrapper 是 Mybatis-Plus 中一个用于条件构造的接口,它提供了多种条件构造方法,可以根据不同的需求来进行组合。
下面是一个示例代码,演示了如何使用 Mybatis-Plus 进行多表查询并分页:
```java
// 创建分页对象
Page<UserVO> page = new Page<>(1, 10);
// 创建查询条件构造器
QueryWrapper<UserVO> wrapper = new QueryWrapper<>();
// 设置关联查询条件
wrapper.eq("t1.dept_id", deptId);
// 设置排序规则
wrapper.orderByDesc("t1.create_time");
// 执行查询
List<UserVO> userList = userMapper.selectUserPage(page, wrapper);
// 封装分页结果
PageResult<UserVO> result = new PageResult<>();
result.setList(userList);
result.setTotal(page.getTotal());
result.setPages(page.getPages());
result.setCurrent(page.getCurrent());
result.setSize(page.getSize());
return result;
```
在上面的代码中,我们首先创建了一个分页对象 `Page<UserVO>`,然后创建了一个查询条件构造器 `QueryWrapper<UserVO>`。接着,我们设置了关联查询条件和排序规则,并调用了 `userMapper.selectUserPage(page, wrapper)` 方法执行查询。
最后,我们将查询结果封装到了一个自定义的分页结果对象 `PageResult<UserVO>` 中,该对象包含了查询结果列表、总记录数、总页数、当前页码和每页显示数量等信息。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)