mybatisPlus の高度な記事

地図

  • Mybatis フレームワークがデータベース操作を簡素化できるのは、自動マッピングによってデータをカプセル化する内部マッピング機構によるもので、マッピング ルールに従っている限り、SQL 操作の実現を迅速かつ効率的に完了できます。
  • MybatisPlus は Mybatis をベースにした拡張ツールであるため、このようなマッピング ルールも備えています。

自動マッピング ルール

  1. テーブル名とエンティティクラス名のマッピング -> テーブル名ユーザーエンティティクラス名ユーザー
  2. フィールド名とエンティティクラス属性名のマッピング -> フィールド名名 エンティティクラス属性名
  3. フィールド名の下線の命名方法とエンティティ クラス属性の下のこぶの命名方法のマッピング -> フィールド名 user_email エンティティ クラスの属性名 userEmail
  • MybatisPlus はこのマッピング ルールをサポートしており、構成を通じて設定できます。
map-underscore-to-camel-case: true #表示支持下划线到驼峰的映射
map-underscore-to-camel-case: false #表示不支持下划线到驼峰的映射
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

テーブルマッピング

  • @TableName() アノテーションを使用してマップされたデータベース テーブル名を指定すると、指定されたテーブル名に従ってマップされます。例: この時点で、データベースのテーブル名を powershop_user に変更します。テーブル名とエンティティ クラス名のマッピングを完了するには、エンティティ クラス名を powershop_user として指定する必要があります。
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("powershop_user")
public class User {
    
    
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
  • データベース内の多くのテーブルに対応する多くのエンティティ クラスがある場合、各エンティティ クラスを順番に構成する必要はありません。各エンティティ クラス名に指定されたプレフィックスを追加するグローバル設定を構成するだけで済みます。ここでは、次の例を示します。グローバル設定の効果
mybatis-plus:
  global-config:
    db-config:
      table-prefix: powershop_

フィールドマッピング

  1. データベース フィールドとテーブル エンティティ クラスの属性が一致しない場合、@TableField()アノテーションを使用してフィールドと属性間のマッピングを変更し、アノテーション内の名前がテーブル フィールドと一致するようにすることができます。例: この時点では、データベース フィールドの名前を username に変更します。エンティティ クラスの属性に従って SQL を結合する場合、@TableField() で指定された名前 username を使用して結合し、クエリを完成させます。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    
    
    @TableField("username")
    private String name;
   }
  • この時のSQL文
SELECT id,username AS name,email FROM powershop_user

  1. データベース フィールドとテーブル エンティティ クラスの属性は一貫しています。SQL ステートメントを結合する場合、フレームワークは属性名を使用して SQL ステートメントを直接結合します。次に例を示します。
SELECT  id,username AS name,age,email,desc  FROM powershop_user

このステートメントを直接クエリすると、エラーが発生します

Error querying database.  Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'desc  FROM powershop_user' at line 1
  • 理由:descこれはキーワードであるため、SQL クエリで直接使用することはできません。この問題を解決するには、descフィールドに `` 記号を追加してキーワードではないようにし、クエリを完成させる必要があります。この問題の根本は、次の変更を行うことです。生成された SQL ステートメントのフィールド名、つまり@TableField()エンティティ クラスの属性名を変更する必要がある場合、descになりますdesc。この問題は解決できます。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    
    
    @TableField("`desc`")
    private String desc;
}

ここに画像の説明を挿入

現場での失敗

  • データベース内にクエリを実行したくないフィールドがある場合、@TableField(select = false)このフィールドを非表示にして、SQL ステートメントを結合するときにこのフィールドが結合されないようにすることができます。
  • 例: 年齢情報を表示したくない場合は、この注釈を年齢属性に追加して、このフィールドを非表示にすることができます。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    
    
    @TableField(select = false)
    private Integer age;
}
  • 生成されるSQL文は以下の通り
    ここに画像の説明を挿入

プロパティを表示する

  • 実際の開発では、データベースに保存する必要がないフィールドもありますが、表示する必要があります。表示する必要があるということは、このフィールドがエンティティ クラスに存在する必要があることを意味します。これらのフィールドをエンティティ クラスに存在するフィールドと呼びますが、ビューフィールドと呼ばれるデータベースには存在しません。

  • これまでの経験によれば、フレームワークはデフォルトでエンティティ クラスの属性をクエリ フィールドとして結合します。このようなビューフィールドをクエリ条件として使用することはできませんか? データベースにはそのようなフィールドが存在しないため、クエリ フィールドにこのフィールドが含まれる場合、SQL ステートメントに問題が発生します。@TableField(exist = false)このフィールドを削除し、クエリ フィールドとして使用しないようにするために使用します。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    
    
    @TableField(exist = false)
    private Integer online;
}
  • このフィールドがクエリ結果に含まれていないことがわかります。
    ここに画像の説明を挿入

条件付きコンストラクター

条件付きコンストラクターの概要

  • オブジェクト指向の考え方に基づいて MybatisPlus を使用して条件付きクエリを完了する場合は、すべてがオブジェクトであるため、カプセル化を完了するためにクエリ条件もオブジェクトを使用する必要があります。MybatisPlus の条件とその関係に関連するクラスを明確にすると、条件オブジェクトを渡すときにアイデアを明確にするのに役立ちます。
  1. Wrapper——条件クラスの最上位層である抽象クラスは、取得および判断するためのいくつかのメソッドを提供します。
  2. AbstractWrapper——抽象クラス、Wrapperすべての条件関連メソッドを提供するサブクラス
  3. AbstractLambdaWrapper——抽象クラス、AbstractWrapperサブクラス、フィールドパラメータをメソッド参照型として決定
  4. QueryWrapper——AbstractWrapper のサブクラス。タイプのフィールド情報を渡す必要がある場合は、このオブジェクトを作成します。String
  5. LambdaQueryWrapper——AbstractLambdaWrapperのサブクラスで、メソッド参照メソッドのフィールド情報を渡す必要がある場合は、このオブジェクトを作成します

ここに画像の説明を挿入

  • QueryWrappe図は上記のさまざまな関係を示したもので、コードを記述する際にはr と rに注意するだけで済みます。LambdaQueryWrapper

  • QueryWrapperマスタリングとこれら 2 つのクラスに重点を置く必要がありますLambdaQueryWrapperが、通常、ほとんどのクラスが選択されていますLambdaQueryWrapper。これは、この方法でパラメータを渡すことを選択しているため、スペルミスを心配する必要がありません。

同等のクエリ

等価

  • QueryWrapper オブジェクトを使用してクエリ条件を作成する
@Test
void eq(){
    
    
    //1.创建QueryWrapper对象
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //2.设置条件,指定String字段名称和值
    queryWrapper.eq("name","Jack");
    //3.使用条件完成查询
    User user = userMapper.selectOne(queryWrapper);
    System.out.println(user);
}

テスト効果
ここに画像の説明を挿入


  • フィールド名を毎回自分で記述すると、名前が間違って記述される可能性があります。これを回避するには、LambdaQueryWrapper オブジェクトを使用します。フィールドを構築するときに、メソッド参照を使用してフィールドを選択します。これにより、フィールドを構築するときにメソッド参照を使用できます。フィールドのスペルミスによる問題を回避します。
    コードは以下のように表示されます。
@Test
void eq2(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定String字段名称和值
    lambdaQueryWrapper.eq(User::getName,"Jack");
    //3.使用条件完成查询
    User user = userMapper.selectOne(lambdaQueryWrapper);
    System.out.println(user);
}
  • すべての条件に値があるかどうかが不明な場合があり、一部の条件がユーザーによって渡されないため、条件が null になることがあります。条件が null の場合、クエリ条件を結合する必要はありません。そうしないと、次の状況が発生し、null の条件が結合され、フィルタリング後に結果をクエリできなくなります。

  • この問題を解決するには、まずフィールドが空かどうかを判断し、その判断結果に応じてフィールドを結合するかどうかを選択します。

@Test
void isNull2(){
    
    
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    String name = null;
    lambdaQueryWrapper.eq(name != null,User::getName,name);
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}

すべての等価性

  • 最初に、複数の eq を使用して複数条件クエリを構築する方法を示します。
@Test
void allEq1(){
    
    
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.eq(User::getName,"Jone");
    lambdaQueryWrapper.eq(User::getAge,18);

    User user = userMapper.selectOne(lambdaQueryWrapper);
    System.out.println(user);
}
  • 同時に判断する必要がある条件が複数ある場合は、それらの複数の条件を Map コレクションに含めることができ、より便利です
@Test
void allEq2(){
    
    
    //1.创建QueryWrapper对象
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();

    //2.构建条件Map
    HashMap<String, Object> hashMap = new HashMap<>();
    hashMap.put("name","Jone");
    hashMap.put("age",null);

    //3.使用条件完成查询
    queryWrapper.allEq(hashMap,false);
    User user = userMapper.selectOne(queryWrapper);
    System.out.println(user);
}
allEq(Map<R, V> params, boolean null2IsNull)
  • パラメータ params: 渡された Map コレクションを示します
  • パラメータ null2IsNull:null条件に対してisNullと判定するかどうかを示します。

それはです

@Test
void ne(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定String字段名称和值
    String name = "Jone";
    lambdaQueryWrapper.ne(User::getName,name);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです。
    ここに画像の説明を挿入

範囲クエリ

GT

@Test
void gt(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    Integer age = 18;
    lambdaQueryWrapper.gt(User::getAge,age);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

げ(>=)

@Test
void ge(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    Integer age = 18;
    lambdaQueryWrapper.ge(User::getAge,age);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}

結合された SQL は次のとおりです
ここに画像の説明を挿入

lt(<)

@Test
void lt(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    Integer age = 18;
    lambdaQueryWrapper.lt(User::getAge,age);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}

結合された SQL は次のとおりです
ここに画像の説明を挿入

(<=)

@Test
void le(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    Integer age = 18;
    lambdaQueryWrapper.le(User::getAge,age);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}

結合された SQL は次のとおりです
ここに画像の説明を挿入

@Test
void between(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.between(User::getAge,18,30);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}

結合された SQL は次のとおりです
ここに画像の説明を挿入

間ではありません

@Test
void notBetween(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.notBetween(User::getAge,18,30);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

ファジークエリ

好き

@Test
void like(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.like(User::getName,"J");
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

みたいではなく

@Test
void notLike(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.notLike(User::getName,"J");
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}

結合された SQL は次のとおりです
ここに画像の説明を挿入

左のような

@Test
void likeLeft(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.likeLeft(User::getName,"e");
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

いいね

@Test
void likeRight(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.likeLeft(User::getName,"J");
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

ヌルクエリ

無効である

@Test
void isNull(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称
    lambdaQueryWrapper.isNull(User::getName);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

isNotNull

@Test
void isNotNull(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称
    lambdaQueryWrapper.isNotNull(User::getName);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

クエリが含まれています

@Test
void in(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    ArrayList<Integer> arrayList = new ArrayList<>();
    Collections.addAll(arrayList,18,20,21);
    lambdaQueryWrapper.in(User::getAge,arrayList);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
@Test
void in2(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.in(User::getAge,18,20,21);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}

結合された SQL は次のとおりです
ここに画像の説明を挿入

水泳

@Test
void notIn(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    ArrayList<Integer> arrayList = new ArrayList<>();
    Collections.addAll(arrayList,18,20,21);
    lambdaQueryWrapper.notIn(User::getAge,arrayList);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
@Test
void notIn2(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.notIn(User::getAge,18,20,21);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

inSql

@Test
void inSql(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.inSql(User::getAge,"18,20,22");
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入
@Test
void inSql2(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.inSql(User::getAge,"select age from powershop_user where age > 20");
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

notInSql

@Test
void notInSql(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.notInSql(User::getAge,"18,20,21");
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入
@Test
void notInSql2(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定字段名称和值
    lambdaQueryWrapper.notInSql(User::getAge,"select age from powershop_user where age > 20");
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

グループクエリ

グループ化

@Test
void groupBy(){
    
    
    //1.创建QueryWrapper对象
   QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //2.设置条件,指定字段名称和值
    queryWrapper.groupBy("age");
    queryWrapper.select("age,count(*) as field_count");
    //3.使用条件完成查询
    List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
    System.out.println(maps);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入
  • 実際のクエリ結果
    ここに画像の説明を挿入
  • パッケージ結果
    ここに画像の説明を挿入

集計クエリ

持っている

@Test
void having(){
    
    
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //分组字段
    queryWrapper.groupBy("age");
    //查询字段
    queryWrapper.select("age,count(*) as field_count");
    //聚合条件筛选
    queryWrapper.having("field_count = 1");
    List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
    System.out.println(maps);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

ソートクエリ

orderByAsc

@Test
void orderByAsc(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定升序排序字段
    lambdaQueryWrapper.orderByAsc(User::getAge,User::getId);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

orderByDesc

@Test
void orderByDesc(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定降序排序字段
    lambdaQueryWrapper.orderByDesc(User::getAge,User::getId);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

注文方法

@Test
void orderBy(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.设置条件,指定降序排序字段
    lambdaQueryWrapper.orderBy(true,true,User::getId);
    lambdaQueryWrapper.orderBy(true,false,User::getAge);
    //3.使用条件完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

関数クエリ

機能

@Test
void func(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建逻辑判断语句
    lambdaQueryWrapper.func(i -> {
    
    
        if(true) {
    
    
            i.eq(User::getId, 1);
        }else {
    
    
            i.ne(User::getId, 1);
        }
    });
    //3.完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

論理クエリ

  • 通常のスプライシングのデフォルトは と
@Test
void and(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建条件查询语句
    lambdaQueryWrapper.gt(User::getAge,22).lt(User::getAge,30);
    //3.完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入
  • 入れ子にすることもできます
@Test
void and2(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建条件查询语句
    lambdaQueryWrapper.eq(User::getName,"wang").and(i -> i.gt(User::getAge,26).or().lt(User::getAge,22));
    //3.完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

また

@Test
void or(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建条件查询语句
    lambdaQueryWrapper.lt(User::getAge,20).or().gt(User::getAge,23);
    //3.完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

  • またはネストされた

@Test
void or2(){
    
    
     LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
     lambdaQueryWrapper.eq(User::getName,"wang").or(i -> i.gt(User::getAge,22).lt(User::getAge,26));
     List<User> users = userMapper.selectList(lambdaQueryWrapper);
     System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

入れ子になった

@Test
void nested(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建条件查询语句
    lambdaQueryWrapper.nested(i -> i.eq(User::getName, "Billie").ne(User::getAge, 22));
    //3.完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

カスタム条件クエリ

申し込み

@Test
void apply(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建条件查询语句
    lambdaQueryWrapper.apply("id = 1");
    //3.完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

最後のクエリ

最後

@Test
void last(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建条件查询语句
    lambdaQueryWrapper.last("limit 0,2");
    //3.完成查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

クエリが存在します

存在します

@Test
void exists(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建查询条件
    lambdaQueryWrapper.exists("select id from powershop_user where age = 18");
    //3.查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

存在しない

@Test
void notExists(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建查询条件
    lambdaQueryWrapper.notExists("select id from powershop_user where age = 33");
    //3.查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

フィールドクエリ

選択する

@Test
void select(){
    
    
    //1.创建QueryWrapper对象
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    //2.构建查询条件
    lambdaQueryWrapper.select(User::getId,User::getName);
    //3.查询
    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    System.out.println(users);
}
  • 結合された SQL は次のとおりです
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/yang2330648064/article/details/131941099