週末Mybatis-Plus で提供されるクエリカプセル化ツールで、主に複雑な条件付きクエリや動的 SQL クエリに使用されます。通常、週末は、Wrapper と WeekendCriteria の 2 つの部分で構成されます。
ラッパーこれは条件付きラッパーであり、複数の条件を追加でき、等しい、等しくない、より大きい、より小さい、いいね、でなどの and および or 関係をサポートします。
週末の基準これは条件付きコンストラクターであり、Wrapper のラッパーであり、複数の Wrapper を統合でき、Exists、NotExists、In、NotIn、Between などをサポートし、グループ化クエリ、集計クエリなどもサポートします。
インポートする必要がある依存関係
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.3</version>
</dependency>
ID、名前、年齢、性別などの属性を含むエンティティ クラス User があるとします。次に、年齢が 20 を超えるか、性別が 1 であるレコードをクエリしたいとします。
LambdaQueryWrapper オブジェクトを作成し、クエリ条件を設定します。
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.gt(User::getAge, 20)
.or()
.eq(User::getGender, 1);
ここでの LambdaQueryWrapper はクエリ条件をカプセル化するために使用されます。gt メソッドは「より大きい」を意味し、or メソッドは「または」を意味し、eq メソッドは「等しい」を意味します。
Weekend オブジェクトを作成し、クエリのエンティティ クラスを指定します。
Weekend<User> weekend = Weekend.of(User.class);
WeekendCriteria オブジェクトを取得します。
WeekendCriteria<User, Object> weekendCriteria = weekend.weekendCriteria();
LambdaQueryWrapper オブジェクトのクエリ条件を WeekendCriteria オブジェクトに追加します。
weekendCriteria.and(lambdaQueryWrapper);
クエリ操作を実行します。
List<User> userList = userMapper.selectByExample(weekend);
上記のコードでは、LambdaQueryWrapper オブジェクトを使用してクエリ条件を設定し、 or メソッドを使用して条件間の関係性を示します。次に、クエリ条件を WeekendCriteria オブジェクトに追加し、最後に selectByExample メソッドを実行してクエリを実行します。操作を実行し、条件を満たすユーザー オブジェクトのセットを取得します。
LambdaQueryWrapperこれは、クエリ条件を構築するために Mybatis-Plus で提供されるラッパーの 1 つです。ラッパーはラムダ式に基づいて実装されているため、クエリ条件が簡潔で理解しやすいだけでなく、ハードコーディングの問題も回避されます。LambdaQueryWrapper のメソッドは次のとおりです。
//eq:等于
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三");
//ne:不等于
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.ne(User::getName, "张三");
//gt:大于
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.gt(User::getAge, 18);
//ge:大于等于
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.ge(User::getAge, 18);
//lt:小于
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.lt(User::getAge, 18);
//le:小于等于
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.le(User::getAge, 18);
//like:模糊查询
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName, "张%");
//in:IN查询
List<Integer> ids = Arrays.asList(1, 2, 3);
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.in(User::getId, ids);
//notIn:NOT IN查询
List<Integer> ids = Arrays.asList(1, 2, 3);
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.notIn(User::getId, ids);
//isNull:NULL查询
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.isNull(User::getEmail);
//isNotNull:NOT NULL查询
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.isNotNull(User::getEmail);
//orderByAsc:升序排序
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByAsc(User::getAge);
//orderByDesc:降序排序
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByDesc(User::getAge);
これらのメソッドを必要に応じて動的に組み合わせて、複雑なクエリ条件を構築できます。
も使用できますWeekendCriteria オブジェクトクエリ条件を設定する
// 创建 Weekend 对象,并指定需要进行条件构造的实体类 FunctionEntity
Weekend<FunctionEntity> weekend = Weekend.of(FunctionEntity.class);
// 获取 WeekendCriteria 对象,用于设置条件
WeekendCriteria<FunctionEntity, Object> weekendCriteria = weekend.weekendCriteria();
// 在 WeekendCriteria对象中设置查询条件,可以使用链式编程的方式
// 例如:.andLike(FunctionEntity::getName, "函数名称")
weekendCriteria.andXXX(...);
List<User> userList = userMapper.selectByExample(weekend);
WeekendCriteria で定義されているクエリ メソッドは次のとおりです。
//andEqualTo:设置等于条件。
weekendCriteria.andEqualTo(FunctionEntity::getName, "函数名称");
//andNotEqualTo:设置不等于条件。
weekendCriteria.andNotEqualTo(FunctionEntity::getName, "函数名称");
//andIsNotNull:设置字段非空条件。
weekendCriteria.andIsNotNull(FunctionEntity::getName);
//andIsNull:设置字段为空条件。
weekendCriteria.andIsNull(FunctionEntity::getName);
//andLike:设置like条件。
weekendCriteria.andLike(FunctionEntity::getName, "%函数名称%");
//andNotLike:设置not like条件。
weekendCriteria.andNotLike(FunctionEntity::getName, "%函数名称%");
//andIn:设置in条件。
List<String> names = Arrays.asList("函数名称1", "函数名称2");
weekendCriteria.andIn(FunctionEntity::getName, names);
//andNotIn:设置not in条件。
List<String> names = Arrays.asList("函数名称1", "函数名称2");
weekendCriteria.andNotIn(FunctionEntity::getName, names);
//andBetween:设置between条件。
weekendCriteria.andBetween(FunctionEntity::getCreateTime, startTime, endTime);
//andNotBetween:设置not between条件。
weekendCriteria.andNotBetween(FunctionEntity::getCreateTime, startTime, endTime);
//andGreaterThan:大于条件。
weekendCriteria.andGreaterThan(FunctionEntity::getCreateTime, "2021-06-20");
//andGreaterThanOrEqualTo:大于等于条件。
weekendCriteria.andGreaterThanOrEqualTo(FunctionEntity::getCreateTime, "2021-06-20");
//andLessThan:小于条件。
weekendCriteria.andLessThan(FunctionEntity::getCreateTime, "2021-06-20");
//andLessThanOrEqualTo:小于等于条件。
weekendCriteria.andLessThanOrEqualTo(FunctionEntity::getCreateTime, "2021-06-20");
//andEqualToWithFunc:支持自定义条件,例如SQL函数。
weekendCriteria.andEqualToWithFunc(entity -> "`function_code` = " + funcCode);
//andIsNullWithFunc:支持自定义条件,查询条件字段为 null。
weekendCriteria.andIsNullWithFunc(entity -> "`function_code`");
//andIsNotNullWithFunc:支持自定义条件,查询条件字段不为 null。
weekendCriteria.andIsNotNullWithFunc(entity -> "`function_code`");
//andLikeWithFunc:支持自定义条件,查询条件为 Like。
weekendCriteria.andLikeWithFunc(entity -> "`function_name` LIKE '" + keyword + "%'");
//andNotLikeWithFunc:支持自定义条件,查询条件为 not like。
weekendCriteria.andNotLikeWithFunc(entity -> "`function_name` NOT LIKE '%" + keyword + "%'");
//andInWithFunc:支持自定义条件,查询条件为 In。
weekendCriteria.andInWithFunc(entity -> "`id`", ids);
//andNotInWithFunc:支持自定义条件,查询条件为 Not in。
weekendCriteria.andNotInWithFunc(entity -> "`id`", ids);
//andBetweenWithFunc:支持自定义条件,查询条件为 Between。
weekendCriteria.andBetweenWithFunc(entity -> "`create_time`", startTime, endTime);
//andNotBetweenWithFunc:支持自定义条件,查询条件为 Not between。
weekendCriteria.andNotBetweenWithFunc(entity -> "`create_time`", startTime, endTime);
//andGreaterThanWithFunc:支持自定义条件,大于查询。
weekendCriteria.andGreaterThanWithFunc(entity -> "`create_time`", "2021-06-20");
//andGreaterThanOrEqualToWithFunc:支持自定义条件,大于等于查询。
weekendCriteria.andGreaterThanOrEqualToWithFunc(entity -> "`create_time`", "2021-06-20");
//andLessThanWithFunc:支持自定义条件,小于查询。
weekendCriteria.andLessThanWithFunc(entity -> "`create_time`", "2021-06-20");
//andLessThanOrEqualToWithFunc:支持自定义条件,小于等于查询。
weekendCriteria.andLessThanOrEqualToWithFunc(entity -> "`create_time`", "2021-06-20");
上記のクエリ メソッドはすべてチェーンで呼び出して、より複雑なクエリ条件を組み合わせることができます。