Module bus.mapper

Class ConditionWrapper<T,I extends Serializable>

java.lang.Object
org.miaixz.bus.mapper.binding.condition.ConditionWrapper<T,I>
Type Parameters:
T - 实体类类型
I - 主键类型

public class ConditionWrapper<T,I extends Serializable> extends Object
封装 Condition 查询条件,提供链式调用接口以构建复杂查询
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • ConditionWrapper

      public ConditionWrapper(BasicMapper<T,I> basicMapper, Condition<T> condition)
      构造函数,初始化基本 Mapper 和 Condition
      Parameters:
      basicMapper - 基本 Mapper 实例
      condition - 查询条件对象
  • Method Details

    • or

      public ConditionWrapper<T,I> or()
      添加一组 OR 条件
      Returns:
      当前包装器对象
    • condition

      public Condition<T> condition()
      获取当前查询条件
      Returns:
      当前 Condition 对象
    • clear

      public ConditionWrapper<T,I> clear()
      清除所有条件并重置为新条件
      Returns:
      当前包装器对象
    • select

      @SafeVarargs public final ConditionWrapper<T,I> select(Fn<T,Object>... fns)
      指定查询列
      Parameters:
      fns - 方法引用数组
      Returns:
      当前包装器对象
    • exclude

      @SafeVarargs public final ConditionWrapper<T,I> exclude(Fn<T,Object>... fns)
      排除指定查询列
      Parameters:
      fns - 方法引用数组
      Returns:
      当前包装器对象
    • startSql

      public ConditionWrapper<T,I> startSql(String startSql)
      设置起始 SQL
      Parameters:
      startSql - 起始 SQL
      Returns:
      当前包装器对象
    • endSql

      public ConditionWrapper<T,I> endSql(String endSql)
      设置结尾 SQL
      Parameters:
      endSql - 结尾 SQL
      Returns:
      当前包装器对象
    • orderBy

      public ConditionWrapper<T,I> orderBy(Fn<T,Object> fn, String order)
      设置排序字段
      Parameters:
      fn - 排序列方法引用
      order - 排序方式(ASC/DESC)
      Returns:
      当前包装器对象
    • orderBy

      public ConditionWrapper<T,I> orderBy(String orderByCondition)
      设置字符串形式的排序,不覆盖已有排序
      Parameters:
      orderByCondition - 排序表达式
      Returns:
      当前包装器对象
    • orderBy

      public ConditionWrapper<T,I> orderBy(Supplier<String> orderByCondition)
      设置动态构造的排序
      Parameters:
      orderByCondition - 排序表达式提供者
      Returns:
      当前包装器对象
    • orderBy

      public ConditionWrapper<T,I> orderBy(boolean useOrderBy, Supplier<String> orderByCondition)
      条件设置动态构造的排序
      Parameters:
      useOrderBy - 是否启用排序
      orderByCondition - 排序表达式提供者
      Returns:
      当前包装器对象
    • orderByAsc

      @SafeVarargs public final ConditionWrapper<T,I> orderByAsc(Fn<T,Object>... fns)
      设置升序排序
      Parameters:
      fns - 排序列方法引用数组
      Returns:
      当前包装器对象
    • orderByDesc

      @SafeVarargs public final ConditionWrapper<T,I> orderByDesc(Fn<T,Object>... fns)
      设置降序排序
      Parameters:
      fns - 排序列方法引用数组
      Returns:
      当前包装器对象
    • distinct

      public ConditionWrapper<T,I> distinct()
      启用 DISTINCT 查询
      Returns:
      当前包装器对象
    • set

      public ConditionWrapper<T,I> set(boolean useSet, String setSql)
      条件设置更新字段和值
      Parameters:
      useSet - 是否启用
      setSql - SET 子句,如 "column = value"
      Returns:
      当前包装器对象
    • set

      public ConditionWrapper<T,I> set(String setSql)
      设置更新字段和值
      Parameters:
      setSql - SET 子句,如 "column = value"
      Returns:
      当前包装器对象
    • set

      public ConditionWrapper<T,I> set(boolean useSet, Fn<T,Object> fn, Object value)
      条件设置更新字段和值
      Parameters:
      useSet - 是否启用
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • set

      public ConditionWrapper<T,I> set(boolean useSet, Fn<T,Object> fn, Supplier<Object> supplier)
      条件设置更新字段和动态值
      Parameters:
      useSet - 是否启用
      fn - 字段方法引用
      supplier - 值提供者
      Returns:
      当前包装器对象
    • set

      public ConditionWrapper<T,I> set(Fn<T,Object> fn, Object value)
      设置更新字段和值
      Parameters:
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • isNull

      public ConditionWrapper<T,I> isNull(boolean useCondition, Fn<T,Object> fn)
      条件指定字段为 NULL
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      Returns:
      当前包装器对象
    • isNull

      public ConditionWrapper<T,I> isNull(Fn<T,Object> fn)
      指定字段为 NULL
      Parameters:
      fn - 字段方法引用
      Returns:
      当前包装器对象
    • isNotNull

      public ConditionWrapper<T,I> isNotNull(boolean useCondition, Fn<T,Object> fn)
      条件指定字段非 NULL
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      Returns:
      当前包装器对象
    • isNotNull

      public ConditionWrapper<T,I> isNotNull(Fn<T,Object> fn)
      指定字段非 NULL
      Parameters:
      fn - 字段方法引用
      Returns:
      当前包装器对象
    • eq

      public ConditionWrapper<T,I> eq(boolean useCondition, Fn<T,Object> fn, Object value)
      条件指定字段等于值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • eq

      public ConditionWrapper<T,I> eq(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier)
      条件指定字段等于动态值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者
      Returns:
      当前包装器对象
    • eq

      public ConditionWrapper<T,I> eq(Fn<T,Object> fn, Object value)
      指定字段等于值
      Parameters:
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • ne

      public ConditionWrapper<T,I> ne(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier)
      条件指定字段不等于动态值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者
      Returns:
      当前包装器对象
    • ne

      public ConditionWrapper<T,I> ne(boolean useCondition, Fn<T,Object> fn, Object value)
      条件指定字段不等于值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • ne

      public ConditionWrapper<T,I> ne(Fn<T,Object> fn, Object value)
      指定字段不等于值
      Parameters:
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • gt

      public ConditionWrapper<T,I> gt(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier)
      条件指定字段大于动态值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者
      Returns:
      当前包装器对象
    • gt

      public ConditionWrapper<T,I> gt(boolean useCondition, Fn<T,Object> fn, Object value)
      条件指定字段大于值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • gt

      public ConditionWrapper<T,I> gt(Fn<T,Object> fn, Object value)
      指定字段大于值
      Parameters:
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • ge

      public ConditionWrapper<T,I> ge(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier)
      条件指定字段大于等于动态值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者
      Returns:
      当前包装器对象
    • ge

      public ConditionWrapper<T,I> ge(boolean useCondition, Fn<T,Object> fn, Object value)
      条件指定字段大于等于值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • ge

      public ConditionWrapper<T,I> ge(Fn<T,Object> fn, Object value)
      指定字段大于等于值
      Parameters:
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • lt

      public ConditionWrapper<T,I> lt(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier)
      条件指定字段小于动态值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者
      Returns:
      当前包装器对象
    • lt

      public ConditionWrapper<T,I> lt(boolean useCondition, Fn<T,Object> fn, Object value)
      条件指定字段小于值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • lt

      public ConditionWrapper<T,I> lt(Fn<T,Object> fn, Object value)
      指定字段小于值
      Parameters:
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • le

      public ConditionWrapper<T,I> le(boolean useCondition, Fn<T,Object> fn, Object value)
      条件指定字段小于等于值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • le

      public ConditionWrapper<T,I> le(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier)
      条件指定字段小于等于动态值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者
      Returns:
      当前包装器对象
    • le

      public ConditionWrapper<T,I> le(Fn<T,Object> fn, Object value)
      指定字段小于等于值
      Parameters:
      fn - 字段方法引用
      value - 值
      Returns:
      当前包装器对象
    • in

      public ConditionWrapper<T,I> in(boolean useCondition, Fn<T,Object> fn, Iterable<?> values)
      条件指定字段在值集合中
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      values - 值集合
      Returns:
      当前包装器对象
    • in

      public ConditionWrapper<T,I> in(boolean useCondition, Fn<T,Object> fn, Supplier<Iterable<?>> supplier)
      条件指定字段在动态值集合中
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值集合提供者
      Returns:
      当前包装器对象
    • in

      public ConditionWrapper<T,I> in(Fn<T,Object> fn, Iterable<?> values)
      指定字段在值集合中
      Parameters:
      fn - 字段方法引用
      values - 值集合
      Returns:
      当前包装器对象
    • notIn

      public ConditionWrapper<T,I> notIn(boolean useCondition, Fn<T,Object> fn, Iterable<?> values)
      条件指定字段不在值集合中
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      values - 值集合
      Returns:
      当前包装器对象
    • notIn

      public ConditionWrapper<T,I> notIn(boolean useCondition, Fn<T,Object> fn, Supplier<Iterable<?>> supplier)
      条件指定字段不在动态值集合中
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值集合提供者
      Returns:
      当前包装器对象
    • notIn

      public ConditionWrapper<T,I> notIn(Fn<T,Object> fn, Iterable<?> values)
      指定字段不在值集合中
      Parameters:
      fn - 字段方法引用
      values - 值集合
      Returns:
      当前包装器对象
    • between

      public ConditionWrapper<T,I> between(boolean useCondition, Fn<T,Object> fn, Object value1, Object value2)
      条件指定字段在值区间内
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value1 - 区间起始值
      value2 - 区间结束值
      Returns:
      当前包装器对象
    • between

      public ConditionWrapper<T,I> between(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier1, Supplier<Object> supplier2)
      条件指定字段在动态值区间内
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier1 - 区间起始值提供者
      supplier2 - 区间结束值提供者
      Returns:
      当前包装器对象
    • between

      public ConditionWrapper<T,I> between(Fn<T,Object> fn, Object value1, Object value2)
      指定字段在值区间内
      Parameters:
      fn - 字段方法引用
      value1 - 区间起始值
      value2 - 区间结束值
      Returns:
      当前包装器对象
    • notBetween

      public ConditionWrapper<T,I> notBetween(boolean useCondition, Fn<T,Object> fn, Object value1, Object value2)
      条件指定字段不在值区间内
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value1 - 区间起始值
      value2 - 区间结束值
      Returns:
      当前包装器对象
    • notBetween

      public ConditionWrapper<T,I> notBetween(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier1, Supplier<Object> supplier2)
      条件指定字段不在动态值区间内
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier1 - 区间起始值提供者
      supplier2 - 区间结束值提供者
      Returns:
      当前包装器对象
    • notBetween

      public ConditionWrapper<T,I> notBetween(Fn<T,Object> fn, Object value1, Object value2)
      指定字段不在值区间内
      Parameters:
      fn - 字段方法引用
      value1 - 区间起始值
      value2 - 区间结束值
      Returns:
      当前包装器对象
    • contains

      public ConditionWrapper<T,I> contains(boolean useCondition, Fn<T,Object> fn, String value)
      条件指定字段包含值(LIKE %值%)
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值,两侧自动添加 %
      Returns:
      当前包装器对象
    • contains

      public ConditionWrapper<T,I> contains(boolean useCondition, Fn<T,Object> fn, Supplier<String> supplier)
      条件指定字段包含动态值(LIKE %值%)
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者,两侧自动添加 %
      Returns:
      当前包装器对象
    • contains

      public ConditionWrapper<T,I> contains(Fn<T,Object> fn, String value)
      指定字段包含值(LIKE %值%)
      Parameters:
      fn - 字段方法引用
      value - 值,两侧自动添加 %
      Returns:
      当前包装器对象
    • startsWith

      public ConditionWrapper<T,I> startsWith(boolean useCondition, Fn<T,Object> fn, String value)
      条件指定字段以前缀值开头(LIKE 值%)
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值,右侧自动添加 %
      Returns:
      当前包装器对象
    • startsWith

      public ConditionWrapper<T,I> startsWith(boolean useCondition, Fn<T,Object> fn, Supplier<String> supplier)
      条件指定字段以动态前缀值开头(LIKE 值%)
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者,右侧自动添加 %
      Returns:
      当前包装器对象
    • startsWith

      public ConditionWrapper<T,I> startsWith(Fn<T,Object> fn, String value)
      指定字段以前缀值开头(LIKE 值%)
      Parameters:
      fn - 字段方法引用
      value - 值,右侧自动添加 %
      Returns:
      当前包装器对象
    • endsWith

      public ConditionWrapper<T,I> endsWith(boolean useCondition, Fn<T,Object> fn, String value)
      条件指定字段以后缀值结尾(LIKE %值)
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值,左侧自动添加 %
      Returns:
      当前包装器对象
    • endsWith

      public ConditionWrapper<T,I> endsWith(boolean useCondition, Fn<T,Object> fn, Supplier<String> supplier)
      条件指定字段以动态后缀值结尾(LIKE %值)
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者,左侧自动添加 %
      Returns:
      当前包装器对象
    • endsWith

      public ConditionWrapper<T,I> endsWith(Fn<T,Object> fn, String value)
      指定字段以后缀值结尾(LIKE %值)
      Parameters:
      fn - 字段方法引用
      value - 值,左侧自动添加 %
      Returns:
      当前包装器对象
    • like

      public ConditionWrapper<T,I> like(boolean useCondition, Fn<T,Object> fn, Object value)
      条件指定字段模糊匹配值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值,需指定 % 或 _ 进行模糊匹配
      Returns:
      当前包装器对象
    • like

      public ConditionWrapper<T,I> like(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier)
      条件指定字段模糊匹配动态值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者,需指定 % 或 _ 进行模糊匹配
      Returns:
      当前包装器对象
    • like

      public ConditionWrapper<T,I> like(Fn<T,Object> fn, Object value)
      指定字段模糊匹配值
      Parameters:
      fn - 字段方法引用
      value - 值,需指定 % 或 _ 进行模糊匹配
      Returns:
      当前包装器对象
    • notLike

      public ConditionWrapper<T,I> notLike(boolean useCondition, Fn<T,Object> fn, Object value)
      条件指定字段不模糊匹配值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      value - 值,需指定 % 进行模糊匹配
      Returns:
      当前包装器对象
    • notLike

      public ConditionWrapper<T,I> notLike(boolean useCondition, Fn<T,Object> fn, Supplier<Object> supplier)
      条件指定字段不模糊匹配动态值
      Parameters:
      useCondition - 是否启用
      fn - 字段方法引用
      supplier - 值提供者,需指定 % 进行模糊匹配
      Returns:
      当前包装器对象
    • notLike

      public ConditionWrapper<T,I> notLike(Fn<T,Object> fn, Object value)
      指定字段不模糊匹配值
      Parameters:
      fn - 字段方法引用
      value - 值,需指定 % 进行模糊匹配
      Returns:
      当前包装器对象
    • anyCondition

      public ConditionWrapper<T,I> anyCondition(boolean useCondition, String condition)
      条件添加任意查询条件
      Parameters:
      useCondition - 是否启用
      condition - 自定义条件
      Returns:
      当前包装器对象
    • anyCondition

      public ConditionWrapper<T,I> anyCondition(String condition)
      添加任意查询条件
      Parameters:
      condition - 自定义条件
      Returns:
      当前包装器对象
    • anyCondition

      public ConditionWrapper<T,I> anyCondition(boolean useCondition, String condition, Object value)
      条件添加自定义条件和值
      Parameters:
      useCondition - 是否启用
      condition - 自定义条件,如 "length(column) ="
      value - 值
      Returns:
      当前包装器对象
    • anyCondition

      public ConditionWrapper<T,I> anyCondition(boolean useCondition, String condition, Supplier<Object> supplier)
      条件添加自定义条件和动态值
      Parameters:
      useCondition - 是否启用
      condition - 自定义条件,如 "length(column) ="
      supplier - 值提供者
      Returns:
      当前包装器对象
    • anyCondition

      public ConditionWrapper<T,I> anyCondition(String condition, Object value)
      添加自定义条件和值
      Parameters:
      condition - 自定义条件,如 "length(column) ="
      value - 值
      Returns:
      当前包装器对象
    • or

      @SafeVarargs public final ConditionWrapper<T,I> or(Function<OrCriteria<T>,OrCriteria<T>>... orParts)
      嵌套 OR 查询,多个条件块以 OR 连接,块内为 AND
      Parameters:
      orParts - OR 条件块函数
      Returns:
      当前包装器对象
    • delete

      public int delete()
      根据当前条件删除记录
      Returns:
      受影响的行数
    • update

      public int update()
      更新符合条件的记录为 SET 设置的值
      Returns:
      受影响的行数
    • update

      public int update(T t)
      更新符合条件的记录为指定实体值
      Parameters:
      t - 实体对象
      Returns:
      受影响的行数
    • updateSelective

      public int updateSelective(T t)
      更新符合条件的记录为指定实体非空值
      Parameters:
      t - 实体对象
      Returns:
      受影响的行数
    • list

      public List<T> list()
      查询符合条件的记录列表
      Returns:
      实体对象列表
    • page

      public List<T> page(int pageNum, int pageSize)
      分页查询符合条件的记录
      Parameters:
      pageNum - 页码
      pageSize - 每页大小
      Returns:
      实体对象列表
    • offset

      public List<T> offset(int offset, int limit)
      偏移量查询符合条件的记录
      Parameters:
      offset - 偏移量
      limit - 限制数量
      Returns:
      实体对象列表
    • cursor

      public org.apache.ibatis.cursor.Cursor<T> cursor()
      获取符合条件的记录游标
      Returns:
      实体对象游标
    • stream

      public Stream<T> stream()
      查询符合条件的记录流
      Returns:
      实体对象流
    • one

      public org.miaixz.bus.core.lang.Optional<T> one()
      查询符合条件的唯一记录,若多条记录则抛出异常
      Returns:
      可能为空的实体对象
    • first

      public org.miaixz.bus.core.lang.Optional<T> first()
      查询符合条件的第一条记录
      Returns:
      可能为空的实体对象
    • top

      public List<T> top(int n)
      查询符合条件的前 n 条记录
      Parameters:
      n - 记录数
      Returns:
      实体对象列表
    • count

      public long count()
      查询符合条件的记录总数
      Returns:
      记录总数