問題の説明:
データベースには、従業員テーブルと部門テーブルの2つのテーブルがあり、2つのエンティティクラスEmployeeとDepartmentに対応しています。各従業員には部門が必要であるため、その部門は従業員で参照される必要があります。
MyBatisでは、データベーステーブルのフィールドに対応するエンティティクラスの属性が必要だと最初は思いました。従業員は部門のIDを使用しますが、これにより、フロントエンドディスプレイには部門IDのみが表示されます(背面の場合) -endはidを使用して部門名をチェックします)達成することもできますが、より面倒です)。
その後、EmployeeでDepartmentオブジェクトを直接使用するように切り替えましたが、EmployeeMapper.xmlでSQLを記述する方法がわからず、さまざまな検索の結果、答えが見つかりました。
解決
まず、結合テーブルのクエリを使用して、departmentテーブルとemployeeテーブルの必要な情報をクエリし、次にエイリアスを使用して、departmentテーブルにあるフィールド名をDepartmentクラスの属性名に変更します。
エンティティクラス
社員
package com.zcy.pojo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
public class Employee {
private int id;
private String name;
private String email;
private int gender;//女0,男1
private Department department;
private Date birthday;
}
部門
package com.zcy.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Department {
private int id;//部门ID
private String name;//部门名称
}
MyBatisのSQL
<select id="queryAllEmployee" resultType="employee">
select
a.id, a.name, a.email, a.gender,
b.id "department.id",
b.name "department.name",
birthday
from employee a
inner join department b
where a.department_id = b.id;
</select>
結果: