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>