mybatisplus怎么多表查询
时间: 2023-09-28 12:11:32 浏览: 71
关于多表查询可以通过MyBatis-Plus的Wrapper来实现,可以使用Join方式或者子查询方式查询。其中Join方式可以使用左连接、右连接、内连接和全连接等不同的连接方式,而子查询方式只需要在where条件中嵌套SQL语句即可。具体实现可以参考MyBatis-Plus官方文档中的Wrapper使用章节。
相关问题
mybatisplus 多表查询
MybatisPlus支持多种多表查询方式:
1.嵌套查询
使用MybatisPlus的wrapper构建多层嵌套查询,例如:
```java
QueryWrapper<User> userWrapper = new QueryWrapper<>();
userWrapper.lambda().eq(User::getUsername, "admin");
QueryWrapper<Role> roleWrapper = new QueryWrapper<>();
roleWrapper.lambda().inSql(Role::getId, "select role_id from t_user_role where user_id = (select id from t_user where username = 'admin')");
List<Role> roles = roleMapper.selectList(roleWrapper);
```
这里使用了两个wrapper,分别查询了用户和用户对应的角色,其中用户ID作为角色查询的条件。使用inSql将子查询的结果作为in条件。
2.联表查询
使用MybatisPlus的wrapper构建多表联合查询,例如:
```java
QueryWrapper<User> userWrapper = new QueryWrapper<>();
userWrapper.lambda().eq(User::getUsername, "admin");
QueryWrapper<Role> roleWrapper = new QueryWrapper<>();
roleWrapper.lambda().eq(Role::getRoleName, "admin");
List<UserRoleVO> userRoleVOS = userMapper.selectUserRoleVOList(userWrapper, roleWrapper);
```
这里使用了两个wrapper,分别查询了用户和角色,使用自定义的mapper方法selectUserRoleVOList完成联表查询。
3.使用@Sql注解
使用MybatisPlus的@Sql注解,直接在mapper接口中编写SQL语句,例如:
```java
@Sql("select u.*, r.role_name from t_user u left join t_user_role ur on u.id = ur.user_id left join t_role r on ur.role_id = r.id where u.username = #{username} and r.role_name = #{roleName}")
List<UserRoleVO> selectUserRoleVOList(@Param("username") String username, @Param("roleName") String roleName);
```
这里使用了@Sql注解,编写了多表联合查询的SQL语句,直接在mapper接口中使用。
mybatisplus多表查询
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上进行了扩展和功能增强,其中包括了多表查询的支持。下面介绍一些常见的多表查询方法。
1. 基于注解的多表查询
MyBatis-Plus 支持使用注解的方式进行多表查询,具体的实现方法可以参考 MyBatis-Plus 的文档。例如,可以使用 @Sql 注解,配合 SQL 语句进行多表查询。示例代码如下:
```java
@Sql("select u.*, o.* from user u left join order o on u.id = o.user_id where u.id = #{userId}")
UserOrderVo getUserOrder(@Param("userId") Long userId);
```
2. 基于 XML 配置的多表查询
MyBatis-Plus 还支持通过 XML 配置文件进行多表查询。在 XML 配置文件中,可以使用 <select> 标签进行多表查询的定义。例如,可以使用 <include> 标签引入其他 SQL 片段,从而组合成复杂的多表查询。示例代码如下:
```xml
<select id="getUserOrder" resultType="com.example.vo.UserOrderVo">
select u.*, o.*
from user u
left join order o on u.id = o.user_id
where u.id = #{userId}
</select>
```
3. 使用 MyBatis-Plus 提供的方法进行多表查询
MyBatis-Plus 还提供了一些方法来简化多表查询的操作,例如 selectJoinPage()、leftJoin()、rightJoin() 等。这些方法可以直接在 Service 类中调用,从而避免手写 SQL 语句。
例如,可以使用 selectJoinPage() 方法进行多表查询并分页:
```java
IPage<UserOrderVo> page = userMapper.selectJoinPage(new Page<>(pageNum, pageSize), userId);
```
其中,selectJoinPage() 方法的第一个参数是一个分页对象,第二个参数是查询条件。返回结果为一个 IPage 对象,其中包含了查询结果的分页信息和数据。
以上是一些 MyBatis-Plus 多表查询的常用方法,根据具体的业务需求选择合适的方法即可。
阅读全文