コンテンツにスキップ

条件ビルダー

MyBatis-Plus は、複雑なデータベースクエリ条件を構築するための強力な条件ビルダー(Wrapper)を提供しています。Wrapper クラスを使用することで、開発者はメソッドチェーンの形式でクエリ条件を構築でき、煩雑なSQL文を書く必要がなく、開発効率を向上させ、SQLインジェクションのリスクを軽減できます。

MyBatis-Plus では、Wrapper クラスはクエリと更新条件を構築するためのコアツールです。以下が主要な Wrapper クラスとその機能です:

  • AbstractWrapper:これは抽象基底クラスで、すべての Wrapper クラスに共通するメソッドとプロパティを提供します。フィールド(column)、値(value)、演算子(condition)などの条件構築の基本ロジックを定義しています。すべての QueryWrapper、UpdateWrapper、LambdaQueryWrapper、LambdaUpdateWrapper は AbstractWrapper を継承しています。

  • QueryWrapper:クエリ条件の構築に特化しており、基本的な等価、不等価、大なり、小なりなどの一般的な操作をサポートしています。メソッドチェーンの形式で複数のクエリ条件を追加でき、andor ロジックを組み合わせて使用できます。

  • UpdateWrapper:更新条件の構築に使用され、データ更新時に条件を指定できます。QueryWrapper と同様に、メソッドチェーンとロジックの組み合わせをサポートしています。UpdateWrapper を使用すると、エンティティオブジェクトを作成せずに、直接更新フィールドと条件を設定できます。

  • LambdaQueryWrapper:これはラムダ式に基づくクエリ条件ビルダーで、ラムダ式を使用してエンティティクラスのプロパティを参照することで、フィールド名のハードコーディングを避けることができます。この方法は、特にフィールド名が変更される可能性がある場合に、コードの可読性と保守性を向上させます。

  • LambdaUpdateWrapper:LambdaQueryWrapper と同様に、LambdaUpdateWrapper はラムダ式に基づく更新条件ビルダーです。ラムダ式を使用して更新フィールドと条件を指定でき、同様にフィールド名のハードコーディング問題を回避できます。

機能の詳細

MyBatis-Plus の Wrapper クラスは、複雑なクエリと更新条件を構築するための重要なツールです。メソッドチェーンの形式でSQLの WHERE 句を構築でき、非常に高い柔軟性と利便性を提供します。

以下は Wrapper 機能に関するヒントと注意事項です。

allEq

allEq メソッドは、MyBatis-Plus でクエリ条件を構築するためのメソッドの1つで、Map を使用して複数のフィールドの等価条件を設定することができます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// すべてのフィールドの等価条件を設定し、フィールド値がnullの場合、null2IsNullパラメータに基づいてIS NULLを設定するかどうかを決定します
allEq(Map<String, Object> params)
allEq(Map<String, Object> params, boolean null2IsNull)
allEq(boolean condition, Map<String, Object> params, boolean null2IsNull)
// すべてのフィールドの等価条件を設定し、filterフィルターを通じてどのフィールドを含めるべきかを決定し、フィールド値がnullの場合、null2IsNullパラメータに基づいてIS NULLを設定するかどうかを決定します
allEq(BiPredicate<String, Object> filter, Map<String, Object> params)
allEq(BiPredicate<String, Object> filter, Map<String, Object> params, boolean null2IsNull)
allEq(boolean condition, BiPredicate<String, Object> filter, Map<String, Object> params, boolean null2IsNull)

パラメータの説明

  • paramsMapで、key はデータベースのフィールド名、value は対応するフィールド値です。
  • null2IsNulltrue に設定すると、Mapvaluenull の場合、isNull メソッドが呼び出されます;false に設定すると、valuenull のキーと値のペアは無視されます。
  • filterBiPredicate で、どのフィールドをクエリ条件に含めるべきかをフィルタリングするために使用されます。
  • condition:これらの条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.allEq(Map.of("id", 1, "name", "老王", "age", null));

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.allEq(Map.of("id", 1, "name", "老王", "age", null));

フィルター付きの通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.allEq((field, value) -> field.contains("a"), Map.of("id", 1, "name", "老王", "age", null));

フィルター付きの Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.allEq((field, value) -> field.contains("a"), Map.of("id", 1, "name", "老王", "age", null));

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE id = 1 AND name = '老王' AND age IS NULL
-- フィルター付きの通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name = '老王' AND age IS NULL

eq

eq メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの等価条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの等価条件を設定します
eq(R column, Object val)
// 条件に基づいて指定されたフィールドの等価条件を設定します
eq(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値。
  • condition:この等価条件を適用するかどうかを制御するためのブール値。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "老王");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "老王");

生成される SQL

-- 通常の Wrapper とLambda Wrapper が生成する SQL は同じです
SELECT * FROM user WHERE name = '老王'

ne

ne メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの不等価条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの不等価条件を設定します
ne(R column, Object val)
// 条件に基づいて指定されたフィールドの不等価条件を設定します
ne(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値。
  • condition:この不等価条件を適用するかどうかを制御するためのブール値。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ne("name", "老王");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ne(User::getName, "老王");

生成される SQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name <> '老王'

gt

gt メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの大なり条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの大なり条件を設定します
gt(R column, Object val)
// 条件に基づいて指定されたフィールドの大なり条件を設定します
gt(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値。
  • condition:この大なり条件を適用するかどうかを制御するためのブール値。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18);

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.gt(User::getAge, 18);

生成される SQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age > 18

ge

ge メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの大なりイコール条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの大なりイコール条件を設定します
ge(R column, Object val)
// 条件に基づいて指定されたフィールドの大なりイコール条件を設定します
ge(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値。
  • condition:この大なりイコール条件を適用するかどうかを制御するためのブール値。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 18);

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ge(User::getAge, 18);

生成される SQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age >= 18

lt

lt メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの小なり条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの小なり条件を設定します
lt(R column, Object val)
// 条件に基づいて指定されたフィールドの小なり条件を設定します
lt(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値。
  • condition:この小なり条件を適用するかどうかを制御するためのブール値。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 18);

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.lt(User::getAge, 18);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age < 18

le

le メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの小なりイコール条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの小なりイコール条件を設定します
le(R column, Object val)
// 条件に基づいて指定されたフィールドの小なりイコール条件を設定します
le(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値。
  • condition:この小なりイコール条件を適用するかどうかを制御するためのブール値。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.le("age", 18);

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.le(User::getAge, 18);

生成される SQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age <= 18

between

between メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの BETWEEN 条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの BETWEEN 条件を設定します
between(R column, Object val1, Object val2)
// 条件に基づいて指定されたフィールドの BETWEEN 条件を設定します
between(boolean condition, R column, Object val1, Object val2)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val1:フィールド名に対応する最初の値で、BETWEEN 条件の開始値を表します。
  • val2:フィールド名に対応する2番目の値で、BETWEEN 条件の終了値を表します。
  • condition:この BETWEEN 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 30);

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.between(User::getAge, 18, 30);

生成される SQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age BETWEEN 18 AND 30

notBetween

notBetween メソッドは、MyBatis-Plus でクエリ条件を構築するためのもう1つの基本的なメソッドで、単一のフィールドの NOT BETWEEN 条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの NOT BETWEEN 条件を設定します
notBetween(R column, Object val1, Object val2)
// 条件に基づいて指定されたフィールドの NOT BETWEEN 条件を設定します
notBetween(boolean condition, R column, Object val1, Object val2)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val1:フィールド名に対応する最初の値で、NOT BETWEEN 条件の開始値を表します。
  • val2:フィールド名に対応する2番目の値で、NOT BETWEEN 条件の終了値を表します。
  • condition:この NOT BETWEEN 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notBetween("age", 18, 30);

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.notBetween(User::getAge, 18, 30);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age NOT BETWEEN 18 AND 30

like

like メソッドは、MyBatis-Plus であいまい検索を構築するための基本的なメソッドの1つで、単一のフィールドの LIKE 条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドのLIKE条件を設定します
like(R column, Object val)
// 条件に基づいて指定されたフィールドのLIKE条件を設定します
like(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値で、LIKE 条件の検索値を表します。
  • condition:この LIKE 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(User::getName, "");

生成される SQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name LIKE '%王%'

notLike

notLike メソッドは、MyBatis-Plus であいまい検索を構築するためのもう1つの基本的なメソッドで、単一のフィールドの NOT LIKE 条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの NOT LIKE 条件を設定します
notLike(R column, Object val)
// 条件に基づいて指定されたフィールドの NOT LIKE 条件を設定します
notLike(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値、NOT LIKE 条件の検索値を表します。
  • condition:この NOT LIKE 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notLike("name", "");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.notLike(User::getName, "");

生成される SQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name NOT LIKE '%王%'

likeLeft

likeLeft メソッドは、MyBatis-Plus であいまい検索を構築するための基本的なメソッドの1つで、単一のフィールドの右ワイルドカードマッチング条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの右ワイルドカードマッチング条件を設定します
likeLeft(R column, Object val)
// 条件に基づいて指定されたフィールドの右ワイルドカードマッチング条件を設定します
likeLeft(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値で、右ワイルドカードマッチング条件の検索値を表します。
  • condition:この右ワイルドカードマッチング条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeLeft("name", "");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.likeLeft(User::getName, "");

生成される SQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name LIKE '%王'

上記の最適化により、likeLeft メソッドのドキュメントは、その使用方法、パラメータの説明、使用例、および注意点をより明確に示すようになり、開発者がこのメソッドを理解し、正しく活用しやすくなりました。

likeRight

likeRight メソッドは、MyBatis-Plus であいまい検索を構築するための基本的なメソッドの1つで、単一のフィールドの左ワイルドカードマッチング条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの左ワイルドカードマッチング条件を設定します
likeRight(R column, Object val)
// 条件に基づいて指定されたフィールドの左ワイルドカードマッチング条件を設定します
likeRight(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値、左ワイルドカードマッチング条件の検索値を表します。
  • condition:この左ワイルドカードマッチング条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("name", "");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.likeRight(User::getName, "");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name LIKE '王%'

notLikeLeft

notLikeLeft メソッドは、MyBatis-Plus でクエリ条件を構築するためのもう1つの基本的なメソッドで、単一のフィールドの非右ワイルドカードマッチング条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの非右ワイルドカードマッチング条件を設定します
notLikeLeft(R column, Object val)
// 条件に基づいて指定されたフィールドの非右ワイルドカードマッチング条件を設定します
notLikeLeft(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値で、非右ワイルドカードマッチング条件の検索値を表します。
  • condition:この非右ワイルドカードマッチング条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notLikeLeft("name", "");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.notLikeLeft(User::getName, "");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name NOT LIKE '%王'

notLikeRight

notLikeRight メソッドは、MyBatis-Plus でクエリ条件を構築するためのもう1つの基本的なメソッドで、単一のフィールドの非左ワイルドカードマッチング条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの非左ワイルドカードマッチング条件を設定します
notLikeRight(R column, Object val)
// 条件に基づいて指定されたフィールドの非左ワイルドカードマッチング条件を設定します
notLikeRight(boolean condition, R column, Object val)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • val:フィールド名に対応する値で、非左ワイルドカードマッチング条件の検索値を表します。
  • condition:この非左ワイルドカードマッチング条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notLikeRight("name", "");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.notLikeRight(User::getName, "");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name NOT LIKE '王%'

上記の最適化により、notLikeRight メソッドのドキュメントは、その使用方法、パラメータの説明、使用例、および注意点をより明確に示すようになり、開発者がこのメソッドを理解し、正しく活用しやすくなりました。

isNull

isNull メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの IS NULL 条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドのIS NULL条件を設定します
isNull(R column)
// 条件に基づいて指定されたフィールドのIS NULL条件を設定します
isNull(boolean condition, R column)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • condition:この IS NULL 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("name");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.isNull(User::getName);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE name IS NULL

in

in メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドのIN条件(指定されたコレクション内の値に一致)を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの IN 条件を設定し、コレクションを使用します
in(R column, Collection<?> value)
in(boolean condition, R column, Collection<?> value)
// 指定されたフィールド のIN 条件を設定し、可変引数を使用します
in(R column, Object... values)
in(boolean condition, R column, Object... values)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • value:IN条件に含める可能な値を含む集合。
  • values:IN条件に含める可能な値を含む可変引数リスト。
  • condition:この IN 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("age", Arrays.asList(1, 2, 3));

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(User::getAge, Arrays.asList(1, 2, 3));

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age IN (1, 2, 3)

notIn

notIn メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、単一のフィールドの NOT IN 条件を設定するために使用されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの NOT IN 条件を設定し、コレクションを使用します
notIn(R column, Collection<?> value)
notIn(boolean condition, R column, Collection<?> value)
// 指定されたフィールドのNOT IN条件を設定し、可変引数を使用します
notIn(R column, Object... values)
notIn(boolean condition, R column, Object... values)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • value:NOT IN 条件に含める可能な値を含む集合。
  • values:NOT IN 条件に含める可能な値を含む可変引数リスト。
  • condition:この NOT IN 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notIn("age", Arrays.asList(1, 2, 3));

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.notIn(User::getAge, Arrays.asList(1, 2, 3));

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age NOT IN (1, 2, 3)

inSql

inSql メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、単一のフィールドの IN 条件を設定するために使用されますが、in メソッドとは異なり、inSql はSQL文を直接使用して IN 句の値集合 を生成できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの IN 条件を設定し、SQL文を使用します
inSql(R column, String sqlValue)
inSql(boolean condition, R column, String sqlValue)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • sqlValue:IN 句の値集合を生成するために使用されるSQL文を含む文字列。
  • condition:この IN 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("age", "1,2,3,4,5,6");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.inSql(User::getAge, "1,2,3,4,5,6");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age IN (1, 2, 3, 4, 5, 6)

サブクエリを使用する例

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("id", "select id from other_table where id < 3");

生成されるSQL

SELECT * FROM user WHERE id IN (select id from other_table where id < 3)

notInSql

notInSql メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、単一のフィールドの NOT IN 条件を設定するために使用されますが、notIn メソッドとは異なり、notInSql はSQL文を直接使用して NOT IN 句の値集合を生成できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 指定されたフィールドの NOT IN 条件を設定し、SQL文を使用します
notInSql(R column, String sqlValue)
notInSql(boolean condition, R column, String sqlValue)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • sqlValue:NOT IN 句の値集合を生成するために使用されるSQL文を含む文字列。
  • condition:この NOT IN 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notInSql("age", "1,2,3,4,5,6");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.notInSql(User::getAge, "1,2,3,4,5,6");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE age NOT IN (1, 2, 3, 4, 5, 6)

サブクエリを使用する例

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notInSql("id", "select id from other_table where id < 3");

生成されるSQL

SELECT * FROM user WHERE id NOT IN (select id from other_table where id < 3)

eqSql Since 3.5.6

eqSql メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、指定されたフィールドの値とSQL文の結果が等しいか比較するために使用されます。このメソッドは、特定の条件に基づいてフィールド値をサブクエリの結果と比較する必要がある場合に特に便利です。

メソッドシグネチャ

// 指定されたフィールドの値をSQL文の結果と等価比較します
eqSql(R column, String inValue)
// 条件が満たされる場合、指定されたフィールドの値をSQL文の結果と比較します
eqSql(boolean condition, R column, String inValue)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • inValue:等価条件を生成するために使用されるSQL文を含む文字列。
  • condition:この等価条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eqSql("id", "select MAX(id) from table");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eqSql(User::getId, "select MAX(id) from table");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE id = (select MAX(id) from table)

gtSql Since 3.4.3.2

gtSql メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、指定されたフィールドの値をSQL文の結果と大なり比較するために使用されます。

メソッドシグネチャ

// 指定されたフィールドの値をSQL文の結果と大なり比較します
gtSql(R column, String inValue)
// 条件が満たされる場合、指定されたフィールドの値をSQL文の結果と大なり比較します
gtSql(boolean condition, R column, String inValue)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • inValue:大なり条件を生成するために使用されるSQL文を含む文字列。
  • condition:この大なり条件を適用するかどうかを制御するためのブール値です。

通常のWrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gtSql("id", "select id from table where name = 'xx'");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.gtSql(User::getId, "select id from table where name = 'xx'");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE id > (select id from table where name = 'xx')

geSql Since 3.4.3.2

geSql メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、指定されたフィールドの値をSQL文の結果と大なりイコール比較するために使用されます。

メソッドシグネチャ

// 指定されたフィールドの値をSQL文の結果と大なりイコール比較します
geSql(R column, String inValue)
// 条件が満たされる場合、指定されたフィールドの値をSQL文の結果と大なりイコール比較します
geSql(boolean condition, R column, String inValue)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • inValue:大なりイコール条件を生成するために使用されるSQL文を含む文字列。
  • condition:この大なりイコール条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.geSql("id", "select id from table where name = 'xx'");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.geSql(User::getId, "select id from table where name = 'xx'");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE id >= (select id from table where name = 'xx')

ltSql Since 3.4.3.2

ltSql メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、指定されたフィールドの値をSQL文の結果と小なり比較するために使用されます。

メソッドシグネチャ

// 指定されたフィールドの値をSQL文の結果と比較します
ltSql(R column, String inValue)
// 条件が満たされる場合、指定されたフィールドの値をSQL文の結果と小なり比較します
ltSql(boolean condition, R column, String inValue)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • inValue:小なり条件を生成するために使用されるSQL文を含む文字列。
  • condition:この小なり条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ltSql("id", "select id from table where name = 'xx'");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ltSql(User::getId, "select id from table where name = 'xx'");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE id < (select id from table where name = 'xx')

leSql Since 3.4.3.2

leSql メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、指定されたフィールドの値をSQL文の結果と小なりイコール比較するために使用されます。

メソッドシグネチャ

// 指定されたフィールドの値をSQL文の結果と小なりイコール比較します
leSql(R column, String inValue)
// 条件が満たされる場合、指定されたフィールドの値をSQL文の結果と小なりイコール比較します
leSql(boolean condition, R column, String inValue)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • inValue:小なりイコール条件を生成するために使用されるSQL文を含む文字列。
  • condition:この小なりイコール条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.leSql("id", "select id from table where name = 'xx'");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.leSql(User::getId, "select id from table where name = 'xx'");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE id <= (select id from table where name = 'xx')

groupBy

groupBy メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、クエリ結果のグループ化条件を設定するために使用されます。指定された1つ以上のフィールドを使用して、groupBy メソッドはSQL文の GROUP BY 句を生成できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// グループ化条件を設定し、フィールド名を使用します
groupBy(R... columns)
groupBy(boolean condition, R... columns)

パラメータの説明

  • columns:グループ化に使用するフィールド名を含む可変引数リスト。
  • condition:このグループ化条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.groupBy("id", "name");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.groupBy(User::getId, User::getName);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user GROUP BY id, name

orderByAsc

orderByAsc メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、クエリ結果の昇順ソート条件を設定するために使用されます。指定された1つ以上のフィールドを使用して、orderByAsc メソッドはSQL文の ORDER BY 句を生成でき、昇順ソートを指定できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 昇順ソート条件を設定し、フィールド名を使用します
orderByAsc(R... columns)
orderByAsc(boolean condition, R... columns)

パラメータの説明

  • columns:ソートに使用するフィールド名を含む可変引数リスト。
  • condition:このソート条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("id", "name");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.orderByAsc(User::getId, User::getName);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user ORDER BY id ASC, name ASC

orderByDesc

orderByDesc メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、クエリ結果の降順ソート条件を設定するために使用されます。指定された1つ以上のフィールドを使用して、orderByDesc メソッドはSQL文の ORDER BY 句を生成でき、降順ソートを指定できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 降順ソート条件を設定し、フィールド名を使用します
orderByDesc(R... columns)
orderByDesc(boolean condition, R... columns)

パラメータの説明

  • columns:ソートに使用するフィールド名を含む可変引数リスト。
  • condition:このソート条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("id", "name");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.orderByDesc(User::getId, User::getName);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user ORDER BY id DESC, name DESC

orderBy

orderBy メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、クエリ結果のソート条件を設定するために使用されます。指定された1つ以上のフィールドとソート方向(昇順または降順)を使用して、orderBy メソッドはSQL文の ORDER BY 句を生成できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// ソート条件を設定し、フィールド名とソート方向を使用します
orderBy(boolean condition, boolean isAsc, R... columns)

パラメータの説明

  • condition:このソート条件を適用するかどうかを制御するためのブール値です。
  • isAsc:ブール値、昇順(ASC)を表します。false は降順(DESC)を表します。
  • columns:ソートに使用するフィールド名を含む可変引数リスト。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderBy(true, true, "id", "name");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.orderBy(true, true, User::getId, User::getName);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user ORDER BY id ASC, name ASC

having

having メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、HAVING 句を設定するために使用されます。通常、GROUP BY 句と一緒に使用され、グループ化されたデータに条件を適用します。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// HAVING 句を設定し、SQL文とパラメータを使用します
having(String sqlHaving, Object... params)
having(boolean condition, String sqlHaving, Object... params)

パラメータの説明

  • sqlHaving:HAVING 句を生成するために使用されるSQL文を含む文字列。
  • params:SQL文中のプレースホルダーを置き換えるために使用される可変引数リスト。
  • condition:この HAVING 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.groupBy("age").having("sum(age) > 10");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.groupBy(User::getAge).having("sum(age) > {0}", 10);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user GROUP BY age HAVING sum(age) > 10

func

func メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、条件に基づいて異なるクエリ操作を実行するためのメカニズムを提供します。Consumer 関数型インターフェースを使用して、メソッドチェーンを中断せずに、条件に基づいて異なるクエリ構築ロジックを実行できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 条件に基づいて異なるクエリ構築ロジックを実行します
func(Consumer<Children> consumer)
func(boolean condition, Consumer<Children> consumer)

パラメータの説明

  • consumerConsumer 関数型インターフェース。Children 型のパラメータを受け取り、Children オブジェクト上のメソッドを呼び出すことができます。
  • condition:この Consumer ロジックを適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.func(i -> {
if (true) {
i.eq("id", 1);
} else {
i.ne("id", 1);
}
});

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.func(i -> {
if (true) {
i.eq(User::getId, 1);
} else {
i.ne(User::getId, 1);
}
});

生成されるSQL

-- 条件に基づいて生成されるSQLは異なります
-- 条件が true の場合、生成されるSQLは:
SELECT * FROM user WHERE id = 1
-- 条件が false の場合、生成されるSQLは:
SELECT * FROM user WHERE id != 1

or

or メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、クエリ条件に OR 論理を追加するために使用されます。or メソッドを呼び出すことで、後続のクエリ条件の接続方法を変更できます。デフォルトの AND 接続から OR 接続に変更されます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 後続のクエリ条件の接続方法を OR に変更します
or()
or(boolean condition)
// OR 埋め込み条件を追加します
or(Consumer<Param> consumer)
or(boolean condition, Consumer<Param> consumer)

パラメータの説明

  • condition:この OR 論理を適用するかどうかを制御するためのブール値です。
  • consumerConsumer 関数型インターフェース。Param 型のパラメータを受け取り、OR 埋め込み条件を構築するために使用されます。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", 1).or().eq("name", "老王");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getId, 1).or().eq(User::getName, "老王");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE id = 1 OR name = '老王'

OR 埋め込み例

// 通常の Wrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.or(i -> i.and(j -> j.eq("name", "李白").eq("status", "alive"))
.or(j -> j.eq("name", "杜甫").eq("status", "alive")));
// Lambda Wrapper
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.or(i -> i.and(j -> j.eq(User::getName, "李白").eq(User::getStatus, "alive"))
.or(j -> j.eq(User::getName, "杜甫").eq(User::getStatus, "alive")));

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE (name = '李白' AND status = 'alive') OR (name = '杜甫' AND status = 'alive')

and

and メソッドは、MyBatis-Plus でクエリ条件を構築するための基本的なメソッドの1つで、クエリ条件に AND 論理を追加するために使用されます。and メソッドを呼び出すことで、AND ネスト条件を作成できます。つまり、1つの AND 論理ブロック内に複数のクエリ条件を含めることができます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// AND ネスト条件を追加します
and(Consumer<Param> consumer)
and(boolean condition, Consumer<Param> consumer)

パラメータの説明

  • consumerConsumer 関数型インターフェース。Param 型のパラメータを受け取り、AND ネスト条件を構築するために使用されます。
  • condition:この AND ネスト論理を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.and(i -> i.and(j -> j.eq("name", "李白").eq("status", "alive"))
.and(j -> j.eq("name", "杜甫").eq("status", "alive")));

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.and(i -> i.and(j -> j.eq(User::getName, "李白").eq(User::getStatus, "alive"))
.and(j -> j.eq(User::getName, "杜甫").eq(User::getStatus, "alive")));

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE ((name = '李白' AND status = 'alive') AND (name = '杜甫' AND status = 'alive'))

nested

nested メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、独立したクエリ条件ブロックを作成します。デフォルトの AND または OR 論理は使用されません。nested メソッドを呼び出すことで、クエリ条件に独立したサブ句を追加できます。このサブ句は、複数のクエリ条件を含めることができ、外部クエリ条件は AND または OR を使用して接続できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 独立したクエリ条件ブロックを追加します
nested(Consumer<Param> consumer)
nested(boolean condition, Consumer<Param> consumer)

パラメータの説明

  • consumerConsumer 関数型インターフェース、Param 型のパラメータを受け取り、独立したクエリ条件を構築するために使用されます。
  • condition:このネスト論理を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.nested(i -> i.eq("name", "李白").ne("status", "活着"));

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.nested(i -> i.eq(User::getName, "李白").ne(User::getStatus, "活着"));

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE (name = '李白' AND status <> '活着')

apply

apply メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、SQL文を直接クエリ条件に追加できます。このメソッドは、データベース関数などの複雑なSQL構築が必要なシナリオに特に便利です。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// SQL文を追加します
apply(String applySql, Object... params)
apply(boolean condition, String applySql, Object... params)

パラメータの説明

  • applySql:追加するSQL文を含む文字列。
  • params:SQL文中のプレースホルダーを置き換えるために使用される可変引数リスト。
  • condition:このSQL文を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.apply("id = 1");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.apply("date_format(dateColumn, '%Y-%m-%d') = '2008-08-08'");

パラメータプレースホルダーを使用する例

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.apply("date_format(dateColumn, '%Y-%m-%d') = {0}", "2008-08-08");

生成されるSQL

-- 通常の Wrapper が生成するSQL
SELECT * FROM user WHERE id = 1
-- Lambda Wrapper が生成するSQL
SELECT * FROM user WHERE date_format(dateColumn, '%Y-%m-%d') = '2008-08-08'
-- パラメータプレースホルダーを使用して生成されるSQL
SELECT * FROM user WHERE date_format(dateColumn, '%Y-%m-%d') = '2008-08-08'

注意事項

  • apply メソッドは、データベース関数を含む SQL 文を追加できます。
  • 動的に入力される params は、applySql 内部の {index} 部分に対応します。これは SQL インジェクションのリスクがありません。パラメータを直接 SQL に連結すると、SQL インジェクションのリスクがあるため、フロントエンドからの動的パラメータをそのまま使用するのは避けるべきです。
  • apply メソッドを使用する場合、applySql パラメータが有効な SQL 文であり、params パラメータが正確にプレースホルダーを置き換えることを確認してください。
  • condition パラメータは、この SQL 文を適用するかどうかを制御します。これにより、特定の条件に基づいてクエリ条件を動的に追加できます。

last

last メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、クエリの最後にSQL文を直接追加でき、MyBatis-Plus のクエリ最適化ルールの影響を受けません。このメソッドは慎重に使用する必要があります。なぜなら、MyBatis-Plus のクエリ最適化ルールが回避される可能性があるからです。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// クエリの最後にSQL文を追加します
last(String lastSql)
last(boolean condition, String lastSql)

パラメータの説明

  • lastSql:クエリの最後に追加するSQL文を含む文字列。
  • condition:このSQL文を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.last("limit 1");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.last("limit 1");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user LIMIT 1

exists

exists メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、クエリに EXISTS サブクエリを追加できます。exists メソッドを呼び出すことで、完全なSQLサブクエリを EXISTS 条件として主クエリに追加できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// EXISTS サブクエリを追加します
exists(String existsSql)
exists(boolean condition, String existsSql)

パラメータの説明

  • existsSql:EXISTS 条件として使用するSQLサブクエリを含む文字列。
  • condition:この EXISTS 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.exists("select id from table where age = 1");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.exists("select id from table where age = 1");

生成されるSQL

-- 通常の Wrapperと Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE EXISTS (select id from table where age = 1)

notExists

notExists メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、クエリに NOT EXISTS サブクエリを追加できます。notExists メソッドを呼び出すことで、完全なSQLサブクエリを NOT EXISTS 条件として主クエリに追加できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// NOT EXISTS サブクエリを追加します
notExists(String notExistsSql)
notExists(boolean condition, String notExistsSql)

パラメータの説明

  • notExistsSql:NOT EXISTS 条件として使用するSQLサブクエリを含む文字列。
  • condition:このNOT EXISTS 条件を適用するかどうかを制御するためのブール値です。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notExists("select id from table where age = 1");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.notExists("select id from table where age = 1");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT * FROM user WHERE NOT EXISTS (select id from table where age = 1)

select

select メソッドは、MyBatis-Plus でクエリ条件を構築するための高度なメソッドの1つで、クエリのフィールドを設定します。select メソッドを呼び出すことで、クエリ結果に含めるフィールドを指定できます。これにより、フィールドレベルのクエリカスタマイズを実現できます。

使用範囲

  • QueryWrapper
  • LambdaQueryWrapper

メソッドシグネチャ

// クエリのフィールドを設定します
select(String... sqlSelect)
// クエリのフィールドをフィルタリングします(主キーを除く)
select(Predicate<TableFieldInfo> predicate)
select(Class<T> entityClass, Predicate<TableFieldInfo> predicate)

パラメータの説明

  • sqlSelect:クエリのフィールド名を含む文字列配列。
  • predicatePredicate 関数型インターフェース。TableFieldInfo 型のパラメータを受け取り、ブール値を返す関数。TableFieldInfo型のパラメータを受け取り、ブール値を返す関数。
  • entityClass:エンティティクラスの型。フィールド情報を取得するために使用されます。

通常の Wrapper (QueryWrapper)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("id", "name", "age");

Lambda Wrapper (LambdaQueryWrapper)

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(User::getId, User::getName, User::getAge);

Predicate を使用してフィールドをフィルタリングする例

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select(i -> i.getProperty().startsWith("test"));

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
SELECT id, name, age FROM user
-- Predicate を使用してフィールドをフィルタリングしたSQL
SELECT testField1, testField2 FROM user

set

set メソッドは、MyBatis-Plus で更新操作を構築するための高度なメソッドの1つで、更新文の SET フィールドを設定するために使用されます。set メソッドを呼び出すことで、更新操作で変更するフィールドとその新しい値を指定できます。

使用範囲

  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 更新文の SET フィールドを設定します
set(R column, Object val)
set(R column, Object val, String mapping)
set(boolean condition, R column, Object val)
set(boolean condition, R column, Object val, String mapping)

パラメータの説明

  • column:データベースのフィールド名または Lambda 式を使用したフィールド名。
  • condition:この SET フィールドを適用するかどうかを制御するためのブール値です。
  • val:更新するフィールドの新しい値を含むオブジェクト。
  • mapping:追加指定。例:javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler

通常の Wrapper (UpdateWrapper)

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("name", "老李头");

Lambda Wrapper (LambdaUpdateWrapper)

LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.set(User::getName, "老李头");

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
UPDATE user SET name = '老李头'

条件制御を使用する例

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.set(true, "name", "");

生成されるSQL

-- 条件制御を使用したSQL
UPDATE user SET name = ''

setSql

setSql メソッドは、MyBatis-Plus で更新操作を構築するための高度なメソッドの1つで、更新文の SET 部分SQLを直接設定できます。setSql メソッドを呼び出すことで、独自のSQL文を SET 句として更新文に追加できます。

使用範囲

  • UpdateWrapper
  • LambdaUpdateWrapper

メソッドシグネチャ

// 更新文の SET 部分の SQL を設定します
setSql(String setSql, Object... params)
setSql(boolean condition, String setSql, Object... params)

パラメータの説明

  • setSql:SET 句として使用する独自のSQL文を含む文字列。
  • condition:この SET フィールドを適用するかどうかを制御するためのブール値です。
  • params:SQL文中のプレースホルダーを置き換えるために使用される可変引数リスト。

setSql("name = '老李头'")
setSql("dateColumn={0}", LocalDate.now())
setSql("type={0,javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler}", "待处理字符串");

setIncrBy Since 3.5.6

setIncrBy メソッドは、MyBatis-Plus で更新操作を構築するための高度なメソッドの1つで、指定されたフィールドの値をデータベース内で指定された数値だけ増加させるために使用されます。このメソッドは、数値フィールドに対して増量操作が必要なシナリオに特に便利です。

使用範囲

  • LambdaUpdateWrapper

メソッドシグネチャ

// フィールドを指定された数値だけ増加させます
setIncrBy(SFunction<T, ?> column, Number val)
// 条件が満たされる場合、フィールドを指定された数値だけ増加させます
setIncrBy(boolean condition, SFunction<T, ?> column, Number val)

パラメータの説明

  • columnSFunction オブジェクト。増加するフィールドを表します。
  • val:増加する数値を含む Number オブジェクト。
  • condition(オプション):条件が満たされる場合にのみ増加操作を実行するかどうかを制御するブール値。

通常の Wrapper (UpdateWrapper)

UpdateWrapper<Product> updateWrapper = new UpdateWrapper<>();
updateWrapper.setIncrBy(Product::getNum, 1);

Lambda Wrapper (LambdaUpdateWrapper)

LambdaUpdateWrapper<Product> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.setIncrBy(Product::getNum, 1);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
UPDATE product SET num = num + 1

setDecrBy Since 3.5.6

setDecrBy メソッドは、MyBatis-Plus で更新操作を構築するための高度なメソッドの1つで、指定されたフィールドの値をデータベース内で指定された数値だけ減少させるために使用されます。このメソッドは、数値フィールドに対して減量操作が必要なシナリオに特に便利です。

使用範囲

  • LambdaUpdateWrapper

メソッドシグネチャ

// フィールドを指定された数値だけ減少させます
setDecrBy(SFunction<T, ?> column, Number val)
// 条件が満たされる場合、フィールドを指定された数値だけ減少させます
setDecrBy(boolean condition, SFunction<T, ?> column, Number val)

パラメータの説明

  • columnSFunction オブジェクト。減少するフィールドを表します。
  • val:減少する数値を含む Number オブジェクト。
  • condition(オプション):条件が満たされる場合にのみ減少操作を実行するかどうかを制御するブール値。

通常の Wrapper (UpdateWrapper)

UpdateWrapper<Product> updateWrapper = new UpdateWrapper<>();
updateWrapper.setDecrBy("num", 1);

Lambda Wrapper (LambdaUpdateWrapper)

LambdaUpdateWrapper<Product> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.setDecrBy(Product::getNum, 1);

生成されるSQL

-- 通常の Wrapper と Lambda Wrapper が生成するSQLは同じです
UPDATE product SET num = num - 1

lambda

lambda メソッドは、便利なメソッドです。QueryWrapper または UpdateWrapper オブジェクトから対応する LambdaQueryWrapperまたは LambdaUpdateWrapper オブジェクトを取得できます。これにより、ラムダ式を使用してクエリ条件を構築し、コードがより簡潔で型安全になります。

使用範囲

  • QueryWrapper
  • UpdateWrapper

メソッドシグネチャ

// Lamdba Wrapper を取得します
lambda();

QueryWrapper から LambdaQueryWrapper を取得

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
LambdaQueryWrapper<User> lambdaQueryWrapper = queryWrapper.lambda();
// Lambda 式を使用してクエリ条件を構築します
lambdaQueryWrapper.eq("name", "张三");

UpdateWrapper から LambdaUpdateWrapper を取得

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
LambdaUpdateWrapper<User> lambdaUpdateWrapper = updateWrapper.lambda();
// ラムダ式を使用して更新条件を構築します
lambdaUpdateWrapper.set(User::getName, "李四");

説明

  • lambda メソッドは、LambdaWrapper オブジェクトを返します。具体的な型は、呼び出し元の Wrapper 型に依存します。
  • QueryWrapperlambda メソッドを呼び出すと、LambdaQueryWrapper が返されます。
  • UpdateWrapperlambda メソッドを呼び出すと、LambdaUpdateWrapper が返されます。
  • ラムダ式を使用することで、フィールド名を文字列で直接指定する必要がなくなり、ミスを減らし、コードの可読性を高めることができます。

TypeHandlerを使用

wrappertypeHandler を使用する場合、formatSqlMaybeWithParam メソッドを特別に処理する必要があります

// クエリ
queryWrapper.apply("type={0,typeHandler="+ MyTypeHandler.class.getCanonicalName()+ "}", "待处理字符串");
// 更新
updateWrapper.setSql("type={0,javaType=string,jdbcType=VARCHAR,typeHandler=xxx.xxx.MyTypeHandler}", "待处理字符串");

使用ヒント

MyBatis-Plus の Wrapper 条件ビルダーを使用することで、開発者は複雑なデータベースクエリ条件を構築でき、コードの簡潔さと安全性を維持できます。以下はいくつかの注意点と推奨される方法です:

  • Wrapper を使用する場合、できるだけラムダ式を使用してハードコーディングされたフィールド名を避けることで、コードの可読性と保守性を向上させることができます。
  • Wrapper はメソッドチェーンをサポートしているため、andor などの論理演算子を組み合わせて使用できます。
  • UpdateWrapper または LambdaUpdateWrapper を使用する場合、エンティティオブジェクトを作成せずに、直接 Wrapper 内で更新フィールドと条件を設定できます。
  • Wrapper のスレッド安全性に注意してください。通常、使用時に新しいWrapperインスタンスを作成します。
  • MyBatis-Plus の Wrapper を使用する場合、SQLインジェクションを避けるため、フロントエンドからの動的パラメータを直接SQL文に追加しないでください。MyBatis-Plus は安全なパラメータバインド方式を提供しているため、eqapply などのメソッドを使用すると、自動的にパラメータバインドを処理し、SQLインジェクションのリスクを回避できます。

Wrappers

MyBatis-Plus は Wrappers クラスを提供しており、これは静的ファクトリークラスです。QueryWrapperUpdateWrapperLambdaQueryWrapperLambdaUpdateWrapper のインスタンスを迅速に作成できます。Wrappers を使用することで、コード量を減らし、開発効率を向上させることができます。

// QueryWrapper を作成します
QueryWrapper<User> queryWrapper = Wrappers.query();
queryWrapper.eq("name", "张三");
// LambdaQueryWrapper を作成します
LambdaQueryWrapper<User> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(User::getName, "张三");
// UpdateWrapper を作成します
UpdateWrapper<User> updateWrapper = Wrappers.update();
updateWrapper.set("name", "李四");
// LambdaUpdateWrapper を作成します
LambdaUpdateWrapper<User> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.set(User::getName, "李四");

スレッド安全性

Wrapper インスタンスはスレッドセーフではありません。そのため、使用時に新しい Wrapper インスタンスを作成することをお勧めします。これにより、マルチスレッド環境下でのデータ競合と潜在的なエラーを避けることができます。

// 各メソッドまたはリクエストで新しい Wrapper インスタンスを作成します
public List<User> getUsersByName(String name) {
QueryWrapper<User> queryWrapper = Wrappers.query();
queryWrapper.eq("name", name);
return userMapper.selectList(queryWrapper);
}

これらのベストプラクティスに従うことで、開発者は MyBatis-Plus の Wrapper 条件ビルダーをより安全かつ効率的に使用でき、セキュアかつ保守性の高いデータベース操作コードを構築できます。

Wrapper で独自のSQLを使用

MyBatis-Plus は強力な Wrapper 条件ビルダーを提供しており、開発者が独自のSQL文を使用して、より複雑なデータベースクエリ要件を満たすことができます。この機能を使用するためには、mybatis-plus のバージョンが3.0.7 以上であることを確認してください。

注意事項

  • バージョン要件:プロジェクトで使用される mybatis-plus のバージョンが少なくとも3.0.7であることを確認してください。これにより、独自のSQL機能がサポートされます。
  • パラメータ命名:独自のSQLを使用する際、Wrapper オブジェクトをパラメータとして渡す場合、パラメータ名は ew である必要があります。または、アノテーション @Param(Constants.WRAPPER) を使用して明示的にパラメータが Wrapper オブジェクトであることを指定する必要があります。
  • ${ew.customSqlSegment} を使用:SQL文で、${ew.customSqlSegment} を使用して Wrapper オブジェクトが生成するSQLフラグメントを参照します。
  • entity ベースの where 句はサポートされていません:独自のSQLを使用する場合、Wrapper オブジェクトはエンティティクラスに基づいて自動的に生成される where 句を生成しません。完全なSQL文を手動で記述する必要があります。

以下は、Wrapper で独自のSQLを使用する例です:

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user ${ew.customSqlSegment}")
List<User> selectByCustomSql(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}

上記の例では、selectByCustomSql メソッドを定義し、カスタムSQL文を使用し、${ew.customSqlSegment} を通じて Wrapper オブジェクトによって生成されたSQLフラグメントを導入しています。

使用方法

カスタムSQLを使用するには、上記のメソッドを呼び出し、Wrapper オブジェクトを渡すだけです:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");
List<User> userList = userMapper.selectByCustomSql(queryWrapper);

この例では、selectByCustomSql メソッドは、渡された queryWrapper オブジェクトによって生成された where 条件を持つクエリを実行します。

この方法により、MyBatis-Plus の Wrapper 機能とカスタムSQLを柔軟に組み合わせて、様々かつ複雑なデータベース操作の要件を満たすことができます。

Kotlin の永続化オブジェクト定義のベストプラクティス

Kotlin で永続化オブジェクトを定義する際は、コードの明確性と保守性を確保するために、いくつかのベストプラクティスに従うべきです。以下は、MyBatis-Plus を使用した永続化オブジェクトの定義例です:

@TableName("sys_user")
class User {
@TableId(type = IdType.AUTO)
var id: Int? = null
@TableField("username")
var name: String? = null
var roleId: Int? = null
}

注意:上記のコードの @TableId@TableField アノテーションは、MyBatis-Plus での使用例を示すためのものであり、必須ではありません。すべてのメンバー変数は、Java の updateSelective のようなシナリオで使用できるように、nullable 型として定義し、初期値として null を設定する必要があります。

data class や全パラメータコンストラクタの使用は推奨されません。これは、空のオブジェクトを作成する際に不要な null 値を提供してしまう可能性があるからです。

アノテーションを使用したクエリ

@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);

XML設定を使用したクエリ

List<MysqlData> getAll(Wrapper ew);
<select id="getAll" resultType="MysqlData">
SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>

Kotlin での Wrapper の使用

Kotlinは QueryWrapperUpdateWrapper をサポートしていますが、LambdaQueryWrapperLambdaUpdateWrapper はサポートしていません。ラムダ形式の Wrapper が必要な場合は、 KtQueryWrapperKtUpdateWrapper を使用できます。

参考例:

val queryWrapper = KtQueryWrapper(User()).eq(User::name, "sss").eq(User::roleId, "sss2")
userMapper!!.selectList(queryWrapper)
val updateConditionWrapper = KtUpdateWrapper(User()).eq(User::name, "sss").eq(User::roleId, "sss2")
val updateRecord = User()
updateRecord.name = "newName"
userMapper!!.update(updateRecord, updateConditionWrapper)
val updateRecord = User()
updateRecord.id = 2
updateRecord.name = "haha"
userMapper.updateById(updateRecord)

チェーン呼び出しとラムダ式呼び出し

MyBatis-Plusは2つのスタイルのチェーン呼び出しを提供しています:通常のチェーン呼び出しとラムダ式チェーン呼び出しです。ラムダ式チェーン呼び出しはKotlinではサポートされていないことに注意してください。

// 通常のチェーン呼び出し
UpdateChainWrapper<T> update();
// ラムダ式チェーン呼び出し(Kotlinではサポートされていません)
LambdaUpdateChainWrapper<T> lambdaUpdate();
// 等価比較での使用例:
query().eq("id", value).one();
lambdaQuery().eq(Entity::getId, value).one();
// 等価比較での使用例:
update().eq("id", value).remove();
lambdaUpdate().eq(Entity::getId, value).remove();

これらのベストプラクティスに従うことで、Kotlin での永続化オブジェクトの定義が明確で保守しやすくなり、同時に MyBatis-Plus が提供する機能を十分に活用することができます。

Baomidou

© 2016-2025 Baomidou™. All Rights Reserved.

Power by Astro Starlight | Sponsored by JetBrains

渝ICP备2021000141号-1 | 渝公网安备50011302222097