mybatisplus多表关联查询的示例
时间: 2023-07-22 10:03:01 浏览: 127
Mybatis框架(多表查询典型案例)
当使用MyBatis Plus进行多表关联查询时,可以借助MyBatis Plus的Wrapper对象来构建查询条件。下面是一个示例,假设有两张表:user和order,user表中有id和name字段,order表中有id、user_id和order_no字段。
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> getUsersAndOrders() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.id", "user.name", "order.order_no")
.eq("user.id", "order.user_id")
.orderByDesc("user.id");
return userMapper.getUsersAndOrders(wrapper);
}
}
```
在上述示例中,我们通过QueryWrapper对象构建了一个查询条件。通过select方法指定了需要查询的字段,可以使用表别名来区分不同的表。eq方法用于指定关联条件,这里我们使用了user.id与order.user_id进行关联。orderByDesc方法用于指定结果按照user.id进行降序排序。
接下来,我们需要在Mapper中编写对应的SQL语句。假设UserMapper中已经定义了getUsersAndOrders方法:
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT ${ew.sqlSelect} FROM user, `order` ${ew.customSqlSegment}")
List<User> getUsersAndOrders(@Param("ew") QueryWrapper<User> queryWrapper);
}
```
在UserMapper中,我们使用了@Select注解来指定SQL语句。`${ew.sqlSelect}`用于动态插入select后面的字段部分,`${ew.customSqlSegment}`用于动态插入where后面的条件部分。
通过调用getUsersAndOrders方法,即可获得关联查询的结果列表。
以上示例演示了使用MyBatis Plus进行多表关联查询的方法,你可以根据实际情况进行调整和扩展。
阅读全文