diff --git a/mapper/src/main/java/io/mybatis/mapper/example/Example.java b/mapper/src/main/java/io/mybatis/mapper/example/Example.java index 1c53f9a..bbd438b 100644 --- a/mapper/src/main/java/io/mybatis/mapper/example/Example.java +++ b/mapper/src/main/java/io/mybatis/mapper/example/Example.java @@ -686,6 +686,16 @@ public OrCriteria andCondition(String condition, Object value) { return this; } + /** + * 指定字段为 null + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + */ + public OrCriteria isNull(boolean useCondition, Fn fn) { + return useCondition ? isNull(fn) : this; + } + /** * 指定字段为 null * @@ -696,6 +706,16 @@ public OrCriteria isNull(Fn fn) { return this; } + /** + * 指定字段不为 null + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + */ + public OrCriteria isNotNull(boolean useCondition, Fn fn) { + return useCondition ? isNotNull(fn) : this; + } + /** * 指定字段不为 null * @@ -706,6 +726,17 @@ public OrCriteria isNotNull(Fn fn) { return this; } + /** + * 字段 = 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public OrCriteria eq(boolean useCondition, Fn fn, Object value) { + return useCondition ? eq(fn, value) : this; + } + /** * 字段 = 值 * @@ -717,6 +748,17 @@ public OrCriteria eq(Fn fn, Object value) { return this; } + /** + * 字段 != 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public OrCriteria ne(boolean useCondition, Fn fn, Object value) { + return useCondition ? ne(fn, value) : this; + } + /** * 字段 != 值 * @@ -728,6 +770,18 @@ public OrCriteria ne(Fn fn, Object value) { return this; } + /** + * 字段 > 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public OrCriteria gt(boolean useCondition, Fn fn, Object value) { + return useCondition ? gt(fn, value) : this; + } + + /** * 字段 > 值 * @@ -739,6 +793,17 @@ public OrCriteria gt(Fn fn, Object value) { return this; } + /** + * 字段 >= 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public OrCriteria ge(boolean useCondition, Fn fn, Object value) { + return useCondition ? ge(fn, value) : this; + } + /** * 字段 >= 值 * @@ -750,6 +815,18 @@ public OrCriteria ge(Fn fn, Object value) { return this; } + /** + * 字段 < 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public OrCriteria lt(boolean useCondition, Fn fn, Object value) { + return useCondition ? lt(fn, value) : this; + } + + /** * 字段 < 值 * @@ -761,6 +838,17 @@ public OrCriteria lt(Fn fn, Object value) { return this; } + /** + * 字段 <= 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public OrCriteria le(boolean useCondition, Fn fn, Object value) { + return useCondition ? le(fn, value) : this; + } + /** * 字段 <= 值 * @@ -772,6 +860,18 @@ public OrCriteria le(Fn fn, Object value) { return this; } + /** + * 字段 in (值集合) + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param values 值集合 + */ + @SuppressWarnings("rawtypes") + public OrCriteria in(boolean useCondition, Fn fn, Iterable values) { + return useCondition ? in(fn, values) : this; + } + /** * 字段 in (值集合) * @@ -784,6 +884,18 @@ public OrCriteria in(Fn fn, Iterable values) { return this; } + /** + * 字段 not in (值集合) + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param values 值集合 + */ + @SuppressWarnings("rawtypes") + public OrCriteria notIn(boolean useCondition, Fn fn, Iterable values) { + return useCondition ? notIn(fn, values) : this; + } + /** * 字段 not in (值集合) * @@ -796,6 +908,18 @@ public OrCriteria notIn(Fn fn, Iterable values) { return this; } + /** + * 字段 between value1 and value 2 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value1 值1 + * @param value2 值2 + */ + public OrCriteria between(boolean useCondition, Fn fn, Object value1, Object value2) { + return useCondition ? between(fn, value1, value2) : this; + } + /** * 字段 between value1 and value 2 * @@ -808,6 +932,19 @@ public OrCriteria between(Fn fn, Object value1, Object value2) { return this; } + /** + * 字段 not between value1 and value 2 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value1 值1 + * @param value2 值2 + */ + public OrCriteria notBetween(boolean useCondition, Fn fn, Object value1, Object value2) { + return useCondition ? notBetween(fn, value1, value2) : this; + } + + /** * 字段 not between value1 and value 2 * @@ -820,6 +957,17 @@ public OrCriteria notBetween(Fn fn, Object value1, Object value2) return this; } + /** + * 字段 like %值% + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,两侧自动添加 % + */ + public OrCriteria contains(boolean useCondition, Fn fn, String value) { + return useCondition ? contains(fn, value) : this; + } + /** * 字段 like %值% * @@ -831,6 +979,17 @@ public OrCriteria contains(Fn fn, String value) { return this; } + /** + * 字段 like 值%,匹配 value 为前缀的值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,右侧自动添加 % + */ + public OrCriteria startsWith(boolean useCondition, Fn fn, String value) { + return useCondition ? startsWith(fn, value) : this; + } + /** * 字段 like 值%,匹配 value 为前缀的值 * @@ -842,6 +1001,17 @@ public OrCriteria startsWith(Fn fn, String value) { return this; } + /** + * 字段 like %值,匹配 value 为后缀的值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,左侧自动添加 % + */ + public OrCriteria endsWith(boolean useCondition, Fn fn, String value) { + return useCondition ? endsWith(fn, value) : this; + } + /** * 字段 like %值,匹配 value 为后缀的值 * @@ -853,6 +1023,17 @@ public OrCriteria endsWith(Fn fn, String value) { return this; } + /** + * 字段 like 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,需要指定 '%'(多个), '_'(单个) 模糊匹配 + */ + public OrCriteria like(boolean useCondition, Fn fn, String value) { + return useCondition ? like(fn, value) : this; + } + /** * 字段 like 值 * @@ -864,6 +1045,17 @@ public OrCriteria like(Fn fn, String value) { return this; } + /** + * 字段 not like 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,需要指定 % 模糊匹配 + */ + public OrCriteria notLike(boolean useCondition, Fn fn, String value) { + return useCondition ? notLike(fn, value) : this; + } + /** * 字段 not like 值 * @@ -875,6 +1067,16 @@ public OrCriteria notLike(Fn fn, String value) { return this; } + /** + * 添加任意条件,条件一定是后端使用的,需要自己防止 SQL 注入 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param condition 任意条件,例如 "length(countryname)<5" + */ + public OrCriteria anyCondition(boolean useCondition, String condition) { + return useCondition ? anyCondition(condition) : this; + } + /** * 添加任意条件,条件一定是后端使用的,需要自己防止 SQL 注入 * @@ -885,6 +1087,17 @@ public OrCriteria anyCondition(String condition) { return this; } + /** + * 手写左边条件,右边用value值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param condition 例如 "length(countryname)=" + * @param value 例如 5 + */ + public OrCriteria anyCondition(boolean useCondition, String condition, Object value) { + return useCondition ? anyCondition(condition, value) : this; + } + /** * 手写左边条件,右边用value值 * diff --git a/mapper/src/main/java/io/mybatis/mapper/example/ExampleWrapper.java b/mapper/src/main/java/io/mybatis/mapper/example/ExampleWrapper.java index 6c694d4..950ad81 100644 --- a/mapper/src/main/java/io/mybatis/mapper/example/ExampleWrapper.java +++ b/mapper/src/main/java/io/mybatis/mapper/example/ExampleWrapper.java @@ -124,6 +124,16 @@ public ExampleWrapper distinct() { return this; } + /** + * 设置更新字段和值 + * + * @param useSet 表达式条件, true 使用,false 不使用 + * @param setSql "column = value" + */ + public ExampleWrapper set(boolean useSet, String setSql) { + return useSet ? set(setSql) : this; + } + /** * 设置更新字段和值 * @@ -134,6 +144,17 @@ public ExampleWrapper set(String setSql) { return this; } + /** + * 设置更新字段和值 + * + * @param useSet 表达式条件, true 使用,false 不使用 + * @param fn 字段 + * @param value 值 + */ + public ExampleWrapper set(boolean useSet, Fn fn, Object value) { + return useSet ? set(fn, value) : this; + } + /** * 设置更新字段和值 * @@ -145,6 +166,16 @@ public ExampleWrapper set(Fn fn, Object value) { return this; } + /** + * 指定字段为 null + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + */ + public ExampleWrapper isNull(boolean useCondition, Fn fn) { + return useCondition ? isNull(fn) : this; + } + /** * 指定字段为 null * @@ -155,6 +186,16 @@ public ExampleWrapper isNull(Fn fn) { return this; } + /** + * 指定字段不为 null + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + */ + public ExampleWrapper isNotNull(boolean useCondition, Fn fn) { + return useCondition ? isNotNull(fn) : this; + } + /** * 指定字段不为 null * @@ -165,6 +206,17 @@ public ExampleWrapper isNotNull(Fn fn) { return this; } + /** + * 字段 = 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public ExampleWrapper eq(boolean useCondition, Fn fn, Object value) { + return useCondition ? eq(fn, value) : this; + } + /** * 字段 = 值 * @@ -176,6 +228,17 @@ public ExampleWrapper eq(Fn fn, Object value) { return this; } + /** + * 字段 != 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public ExampleWrapper ne(boolean useCondition, Fn fn, Object value) { + return useCondition ? ne(fn, value) : this; + } + /** * 字段 != 值 * @@ -187,6 +250,17 @@ public ExampleWrapper ne(Fn fn, Object value) { return this; } + /** + * 字段 > 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public ExampleWrapper gt(boolean useCondition, Fn fn, Object value) { + return useCondition ? gt(fn, value) : this; + } + /** * 字段 > 值 * @@ -198,6 +272,17 @@ public ExampleWrapper gt(Fn fn, Object value) { return this; } + /** + * 字段 >= 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public ExampleWrapper ge(boolean useCondition, Fn fn, Object value) { + return useCondition ? ge(fn, value) : this; + } + /** * 字段 >= 值 * @@ -209,6 +294,17 @@ public ExampleWrapper ge(Fn fn, Object value) { return this; } + /** + * 字段 < 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public ExampleWrapper lt(boolean useCondition, Fn fn, Object value) { + return useCondition ? lt(fn, value) : this; + } + /** * 字段 < 值 * @@ -220,6 +316,17 @@ public ExampleWrapper lt(Fn fn, Object value) { return this; } + /** + * 字段 <= 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值 + */ + public ExampleWrapper le(boolean useCondition, Fn fn, Object value) { + return useCondition ? le(fn, value) : this; + } + /** * 字段 <= 值 * @@ -231,6 +338,18 @@ public ExampleWrapper le(Fn fn, Object value) { return this; } + /** + * 字段 in (值集合) + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param values 值集合 + */ + @SuppressWarnings("rawtypes") + public ExampleWrapper in(boolean useCondition, Fn fn, Iterable values) { + return useCondition ? in(fn, values) : this; + } + /** * 字段 in (值集合) * @@ -243,6 +362,18 @@ public ExampleWrapper in(Fn fn, Iterable values) { return this; } + /** + * 字段 not in (值集合) + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param values 值集合 + */ + @SuppressWarnings("rawtypes") + public ExampleWrapper notIn(boolean useCondition, Fn fn, Iterable values) { + return useCondition ? notIn(fn, values) : this; + } + /** * 字段 not in (值集合) * @@ -255,6 +386,18 @@ public ExampleWrapper notIn(Fn fn, Iterable values) { return this; } + /** + * 字段 between value1 and value 2 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value1 值1 + * @param value2 值2 + */ + public ExampleWrapper between(boolean useCondition, Fn fn, Object value1, Object value2) { + return useCondition ? between(fn, value1, value2) : this; + } + /** * 字段 between value1 and value 2 * @@ -267,6 +410,18 @@ public ExampleWrapper between(Fn fn, Object value1, Object valu return this; } + /** + * 字段 not between value1 and value 2 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value1 值1 + * @param value2 值2 + */ + public ExampleWrapper notBetween(boolean useCondition, Fn fn, Object value1, Object value2) { + return useCondition ? notBetween(fn, value1, value2) : this; + } + /** * 字段 not between value1 and value 2 * @@ -279,6 +434,17 @@ public ExampleWrapper notBetween(Fn fn, Object value1, Object v return this; } + /** + * 字段 like %值% + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,两侧自动添加 % + */ + public ExampleWrapper contains(boolean useCondition, Fn fn, String value) { + return useCondition ? contains(fn, value) : this; + } + /** * 字段 like %值% * @@ -290,6 +456,17 @@ public ExampleWrapper contains(Fn fn, String value) { return this; } + /** + * 字段 like 值%,匹配 value 为前缀的值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,右侧自动添加 % + */ + public ExampleWrapper startsWith(boolean useCondition, Fn fn, String value) { + return useCondition ? startsWith(fn, value) : this; + } + /** * 字段 like 值%,匹配 value 为前缀的值 * @@ -301,6 +478,17 @@ public ExampleWrapper startsWith(Fn fn, String value) { return this; } + /** + * 字段 like %值,匹配 value 为后缀的值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,左侧自动添加 % + */ + public ExampleWrapper endsWith(boolean useCondition, Fn fn, String value) { + return useCondition ? endsWith(fn, value) : this; + } + /** * 字段 like %值,匹配 value 为后缀的值 * @@ -312,6 +500,17 @@ public ExampleWrapper endsWith(Fn fn, String value) { return this; } + /** + * 字段 like 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,需要指定 '%'(多个), '_'(单个) 模糊匹配 + */ + public ExampleWrapper like(boolean useCondition, Fn fn, String value) { + return useCondition ? like(fn, value) : this; + } + /** * 字段 like 值 * @@ -323,6 +522,17 @@ public ExampleWrapper like(Fn fn, String value) { return this; } + /** + * 字段 not like 值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param fn 字段对应的 get 方法引用 + * @param value 值,需要指定 % 模糊匹配 + */ + public ExampleWrapper notLike(boolean useCondition, Fn fn, String value) { + return useCondition ? notLike(fn, value) : this; + } + /** * 字段 not like 值 * @@ -334,6 +544,16 @@ public ExampleWrapper notLike(Fn fn, String value) { return this; } + /** + * 添加任意条件,条件一定是后端使用的,需要自己防止 SQL 注入 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param condition 任意条件,例如 "length(countryname)<5" + */ + public ExampleWrapper anyCondition(boolean useCondition, String condition) { + return useCondition ? anyCondition(condition) : this; + } + /** * 添加任意条件,条件一定是后端使用的,需要自己防止 SQL 注入 * @@ -344,6 +564,17 @@ public ExampleWrapper anyCondition(String condition) { return this; } + /** + * 手写左边条件,右边用value值 + * + * @param useCondition 表达式条件, true 使用,false 不使用 + * @param condition 例如 "length(countryname)=" + * @param value 例如 5 + */ + public ExampleWrapper anyCondition(boolean useCondition, String condition, Object value) { + return useCondition ? anyCondition(condition, value) : this; + } + /** * 手写左边条件,右边用value值 * diff --git a/mapper/src/test/java/io/mybatis/mapper/base/UserMapper2Test.java b/mapper/src/test/java/io/mybatis/mapper/base/UserMapper2Test.java index fb8eadf..afd99eb 100644 --- a/mapper/src/test/java/io/mybatis/mapper/base/UserMapper2Test.java +++ b/mapper/src/test/java/io/mybatis/mapper/base/UserMapper2Test.java @@ -196,6 +196,13 @@ public void testExampleWrapper() { .or() .startsWith(User::getUserName, "张") .orderByAsc(User::getId).list(); + + mapper.wrapper() + .eq(false, User::getSex, "女") + .or(c -> c.gt(User::getId, 40), c -> c.lt(false, User::getId, 10)) + .or() + .startsWith(User::getUserName, "张") + .orderByAsc(User::getId).list(); } } } diff --git a/pom.xml b/pom.xml index 619092a..6ab3d95 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ - 1.2.0 + 1.2.1-SNAPSHOT 8 8 UTF-8