mybatis 1 対多マッピング処理

1 対多: 会社は複数の従業員に対応するため、会社オブジェクトである必要があり、その中には複数の従業員オブジェクト (リストまたはマップのいずれか) である属性があり、次の会社クラスと従業員クラスが存在します。

@Data
public class Com {
    public  int comId;
    public  String comName;
    public List<Worker> workers;
}
@Data
public class Worker {
    public String workerName;
    public int WorkerId;
    public  int comId;
}

処理方法1:収集

会社テーブルと人事テーブルの結合クエリは次のようになります。

select * from fix inner join fix_pic where fix.fix_id =fix_pic.fix_id;

消す

 これらの結果を会社オブジェクトに入れる必要がありますが、会社オブジェクトには list 属性があり、従業員情報が順番に格納されます。

したがって、コレクションを使用する必要があります

   <!--      id  被调用时的名字   type   对应的实体类-->
    <resultMap id="querycom" type="com">
        <!--  com实体类的属性   ,对应的数据库中的字段名      -->
        <result property="comId" column="com_id"></result>
        <result property="comName" column="com_name"></result>
        <!--   property实体类的属性  ofType内层类-->
        <collection property="workers" ofType="worker" javaType="list">
            <result property="workerName" column="worker_name"></result>
            <result property="workerId" column="worker_id"></result>
        </collection>
    </resultMap>

    <select id="query" resultMap="querycom">
        select *
        from com
                 inner join worker
        where worker.com_id = com.com_id
    </select>

学生クラスの特定の属性のみが必要な場合は、ofType="string" で十分です。

処理方法2:関連付け多テーブル結合クエリ

従業員テーブルと会社テーブルの結合クエリなので会社IDが紐付けられているので、会社IDを見つけたら従業員テーブルに行って会社IDを確認し、従業員テーブルのクエリ結果を入れます。会社クラスの属性に組み込みます。

<!--      id  被调用时的名字   type   对应的实体类-->
    <resultMap id="commap" type="com">
        <!--  com实体类的属性   ,对应的数据库中的字段名      -->
        <result property="comId" column="com_id"></result>
        <result property="comName" column="com_name"></result>
        <!--   property  com实体类的属性  select第二步要执行的查询语句的id  cloumn 给第二步传的值-->
        <association property="workers" select="queryworkers" column="com_id"></association>
    </resultMap>
<!--   第一步查询  ,需要mapper调用-->
    <select id="qerucom" resultMap="commap">
        select *
        from com
    </select>
<!--    第二步查询 ,程序自己调用-->
     <select id="queryworkers"  resultType="worker" parameterType="string">
        select * from worker where com_id=#{com_id}
     </select>

 

おすすめ

転載: blog.csdn.net/sharesb/article/details/127932028