MyBatis-Plus 本身主要關注單表操作,但可以通過幾種方式實現一對多關聯查詢:
1. 使用 XML 映射文件實現
這是最傳統的方式,通過編寫 SQL 和 ResultMap 實現:
<!-- UserMapper.xml -->
<resultMap id="userWithOrdersMap" type="com.example.User"><id property="id" column="id"/><result property="name" column="name"/><!-- 一對多關聯 --><collection property="orders" ofType="com.example.Order"><id property="id" column="order_id"/><result property="orderNo" column="order_no"/><result property="userId" column="user_id"/></collection>
</resultMap><select id="selectUserWithOrders" resultMap="userWithOrdersMap">SELECT u.*, o.id as order_id, o.order_no, o.user_idFROM user uLEFT JOIN order o ON u.id = o.user_idWHERE u.id = #{id}
</select>
2. 使用注解方式實現
MyBatis 也支持通過注解實現:
public interface UserMapper extends BaseMapper<User> {@Select("SELECT * FROM user WHERE id = #{id}")@Results({@Result(id=true, property="id", column="id"),@Result(property="name", column="name"),@Result(property="orders", column="id",many=@Many(select="com.example.mapper.OrderMapper.selectByUserId"))})User selectUserWithOrders(Long id);
}public interface OrderMapper extends BaseMapper<Order> {@Select("SELECT * FROM order WHERE user_id = #{userId}")List<Order> selectByUserId(Long userId);
}
3. 使用 MyBatis-Plus 的關聯查詢插件
可以集成第三方插件如?mybatis-plus-join
:
// 添加依賴后使用
public List<User> getUserWithOrders() {return joinLambdaWrapper(User.class).leftJoin(Order.class, Order::getUserId, User::getId).selectAll(User.class).selectAs(Order::getId, User::getOrderId).selectAs(Order::getOrderNo, User::getOrderNo).list();
}