mybatisplus mapper关联多表查询
时间: 2024-09-13 18:17:35 浏览: 59
MyBatis-Plus 是对 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。在使用 MyBatis-Plus 进行多表关联查询时,通常可以利用 MyBatis-Plus 提供的丰富接口和注解来简化操作。
1. 使用@Select注解编写原生SQL查询语句
如果你的查询逻辑较为复杂,可以使用@Select注解直接编写原生SQL语句,MyBatis-Plus会根据提供的SQL语句进行查询。例如:
```java
@Select("SELECT a.*, b.* FROM table_a a INNER JOIN table_b b ON a.id = b.a_id")
@Results({
@Result(property = "field1", column = "column1"),
@Result(property = "field2", column = "column2"),
// ... 映射其他字段
})
List<MyResultDto> selectJoin();
```
2. 使用MyBatis-Plus内置的LambdaQueryWrapper或QueryWrapper
对于一些简单的关联查询,可以使用MyBatis-Plus提供的LambdaQueryWrapper或QueryWrapper进行链式查询。例如:
```java
LambdaQueryWrapper<Entity> queryWrapper = new QueryWrapper<Entity>()
.lambda()
.select(Entity.class, tableA -> "a.*, b.*")
.join("INNER JOIN table_b b ON a.id = b.a_id");
List<Entity> results = baseMapper.selectList(queryWrapper);
```
3. 实体类关联
如果你使用的是MyBatis-Plus的代码生成器,那么实体类中可能会包含与关联表相对应的实体。在这种情况下,你可以直接操作这些实体类的属性来完成关联查询。
```java
// 假设EntityA和EntityB分别对应两个表,并且EntityA中有一个实体类属性与EntityB关联
List<EntityA> list = baseMapper.selectList(null);
for (EntityA a : list) {
EntityB b = a.getAssociatedEntityB();
// 这里可以直接使用a和b对象中的数据
}
```
阅读全文