mybatis-plus 如何实现多表查询
·
在MyBatis-Plus中实现多表查询通常有以下几种方法:
1. 使用注解进行多表查询
你可以在 Mapper 接口中使用 @Select 注解来编写SQL查询语句,实现多表查询。例如,如果你想根据用户ID查询用户信息和对应的区域名称,可以这样写:
java
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
@Select("select user.* ,area.area_name from user,area " +
"where user.area_id = area.id and user.id = #{id}")
User getUserById(int id);
}
2. 使用MyBatis-Plus Join扩展
MyBatis-Plus Join是一个扩展库,它提供了多表联查的能力。你可以通过添加依赖来使用它:
xml
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join</artifactId>
<version>1.4.5</version>
</dependency>
然后,你可以使用JoinLambdaQueryWrapper来构建多表联查的条件。例如,查询每个订单的用户信息:
java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.github.yulichang.toolkit.MPJQueryWrapper;
public class OrderService {
@Autowired
private OrderMapper orderMapper;
public List<UserOrderDTO> getOrderWithUser() {
MPJLambdaWrapper<Order> wrapper = new MPJLambdaWrapper<>();
wrapper.selectAll(Order.class) // 查询Order表所有字段
.select(User::getName) // 查询User表的Name字段
.leftJoin(User.class, User::getId, Order::getUserId); // 使用left join连接
return orderMapper.selectJoinList(UserOrderDTO.class, wrapper);
}
}
3. 使用XML配置文件进行多表查询
另一种方法是在Mapper的XML配置文件中定义多表查询的SQL语句。例如:
xml
<mapper namespace="com.quanxiaoha.mybatisplusdemo.mapper.UserMapper">
<resultMap id="orderMap" type="com.quanxiaoha.mybatisplusdemo.model.OrderVO">
<result property="userName" column="name"/>
<result property="userAge" column="age"/>
<!-- 其他字段映射 -->
</resultMap>
<select id="selectOrders" resultMap="orderMap">
select o.order_id, o.user_id, o.goods_name, o.goods_price, u.name, u.age
from t_order as o left join t_user as u on o.user_id = u.id
</select>
</mapper>
这些方法提供了灵活的方式来实现多表查询,你可以根据项目的具体需求选择合适的实现方式。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)