私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
MyBatis Plus をデータベース操作に使用する場合、複数のテーブルからデータを取得する必要がある場合があります。この記事では、MyBatis Plus で左結合クエリを実装する方法を紹介します。例として 2 つのテーブルを取り上げます。1 つは部門長テーブル (system_dept_leader
)、もう 1 つはユーザー テーブル (system_user
)、左結合を通じて、ユーザーのニックネームや勤務先番号などの部門リーダーの詳細情報を取得する方法を示します。
次の 2 つのデータ テーブルがあるとします。
system_dept_leader
)フィールド名 | タイプ | 説明する |
---|---|---|
id | 長さ | 主キー |
部門ID | 長さ | 部門ID |
ユーザーID | 長さ | ユーザーID |
プライマリ | 整数 | 大切ですか |
system_user
)フィールド名 | タイプ | 説明する |
---|---|---|
id | 長さ | 主キー |
ニックネーム | 弦 | ニックネーム |
ワーカーコード | 弦 | ジョブ番号 |
次の手順で左結合クエリを実装します。
まず、クエリ結果を保存するためのクエリ結果クラスを定義する必要があります。ここで定義します DeptLeaderDORespVO
基本クラスから継承されたクラスDeptLeaderDOBaseVO
、ユーザーのニックネームと勤務先番号のフィールドが含まれます。
- @Data
- @EqualsAndHashCode(callSuper = true)
- @ToString(callSuper = true)
- public class DeptLeaderDORespVO extends DeptLeaderDOBaseVO {
-
- private Long id;
-
- @NotNull(message = "Department不能为空")
- private Long deptId;
-
- @NotNull(message = "User不能为空")
- private Long userId;
-
- @NotNull(message = "Is Primary不能为空")
- private Integer isPrimary;
-
- private String nickname;
- private String workerCode;
- }
次に、SQL クエリを動的に生成するための SQL プロバイダー クラスを作成します。ここで使われている SelectProvider
カスタム SQL を指定するためのアノテーション。
- public class DeptLeaderSqlProvider {
-
- public String selectDeptLeaderWithUserDetails(Map<String, Object> params) {
- Long deptId = (Long) params.get("deptId");
- Long userId = (Long) params.get("userId");
- Integer isPrimary = (Integer) params.get("isPrimary");
-
- StringBuilder sql = new StringBuilder();
- sql.append("SELECT dl.*, su.nickname, su.worker_code AS workerCode ");
- sql.append("FROM system_dept_leader dl ");
- sql.append("LEFT JOIN system_user su ON dl.user_id = su.id ");
- sql.append("WHERE 1=1 ");
- if (deptId != null) {
- sql.append("AND dl.dept_id = #{deptId} ");
- }
- if (userId != null) {
- sql.append("AND dl.user_id = #{userId} ");
- }
- if (isPrimary != null) {
- sql.append("AND dl.is_primary = #{isPrimary} ");
- }
- sql.append("ORDER BY dl.id DESC");
- return sql.toString();
- }
- }
最後に、Mapper インターフェイスでクエリ メソッドを定義し、次を使用します。 SelectProvider
注釈は SQL プロバイダーを指定します。
- @Mapper
- public interface DeptLeaderMapper extends BaseMapperX<DeptLeaderDO> {
-
- @SelectProvider(type = DeptLeaderSqlProvider.class, method = "selectDeptLeaderWithUserDetails")
- List<DeptLeaderDORespVO> selectDeptLeaderWithUserDetails(@Param("deptId") Long deptId,
- @Param("userId") Long userId,
- @Param("isPrimary") Integer isPrimary);
- }
クエリ メソッドはサービス層で呼び出され、結果はフロントエンドに返されるか、さらに処理されます。
- @Service
- public class DeptLeaderService {
-
- @Autowired
- private DeptLeaderMapper deptLeaderMapper;
-
- public List<DeptLeaderDORespVO> getDeptLeaders(Long deptId, Long userId, Integer isPrimary) {
- return deptLeaderMapper.selectDeptLeaderWithUserDetails(deptId, userId, isPrimary);
- }
- }
以上の手順で、MyBatis Plus の部門リーダーの詳細情報を左結合で問い合わせる方法が実装できました。この方法では、受信条件に基づいて SQL クエリを動的に生成し、部門リーダーとその関連ユーザーに関する情報を取得できます。この方法は、複数のテーブルにわたってデータ クエリを実行する必要がある場合に非常に役立ち、データ クエリの柔軟性と効率を確保します。
この記事が、MyBatis Plus をよりよく理解し、複雑なクエリに使用するのに役立つことを願っています。ご質問やさらなるニーズがございましたら、お気軽にご相談ください。