MyBatisでの一対多のネストされたクエリの実現方法は何ですか?

MyBatisでは、ネストされたクエリ(Nested Query)を使って、1対多の関係をクエリすることができます。

最初に、2つのエンティティクラスを定義する必要があります:一方向のエンティティクラスと多方向のエンティティクラス。たとえば、UserクラスとOrderクラスを定義し、1人のユーザーが複数の注文を持つことができるようにします。

public class User {
    private Integer id;
    private String username;
    private List<Order> orders;
    // 省略getter和setter方法
}

public class Order {
    private Integer id;
    private String orderNo;
    private Integer userId;
    // 省略getter和setter方法
}

その後、Mapperインターフェース内で2つのメソッドを定義します。1つはユーザ情報を検索するメソッドであり、もう1つはユーザに関連する注文情報を検索するメソッドです。

public interface UserMapper {
    User getUser(Integer id);
    List<Order> getOrdersByUserId(Integer userId);
}

次に、これらの2つのメソッドをMapper.xmlファイルで実装します。

最初にgetUserメソッドを実装します。

<select id="getUser" parameterType="Integer" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

その後、getOrdersByUserIdメソッドを実装してください。

<select id="getOrdersByUserId" parameterType="Integer" resultType="Order">
    SELECT * FROM orders WHERE userId = #{userId}
</select>

最終的に、ネストされたクエリを使用して、1対多の関係を検索します。 getUserメソッドで注文情報をネストしたクエリとして取得します。

<select id="getUser" parameterType="Integer" resultType="User">
    SELECT * FROM user WHERE id = #{id}
    <collection property="orders" ofType="Order" select="getOrdersByUserId">
        <id property="userId" column="id"/>
    </collection>
</select>

このようにして、getUserメソッドを使用してユーザーとそのユーザーに関連するすべての注文情報を取得することができます。

User user = userMapper.getUser(1);
System.out.println(user.getUsername());
for (Order order : user.getOrders()) {
    System.out.println(order.getOrderNo());
}

MyBatisを使用して、一対多のネストされたクエリを実装する方法を説明しました。ネストされたクエリを使用することで、一対多の関係を持つデータを簡単に取得できます。

bannerAds