From 301b54fd434484263fba31d730a78b1217a4a5cf Mon Sep 17 00:00:00 2001 From: kamosama <837080904@qq.com> Date: Sun, 13 Aug 2023 10:12:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:1.=E5=8A=A0=E5=85=A5Range=E6=94=AF?= =?UTF-8?q?=E6=8C=81=202.orderBy=E4=B8=AD=E7=BC=80=203.=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E9=87=8D=E5=86=99=E6=93=8D=E4=BD=9C=E7=AC=A6=E7=94=9F=E6=88=90?= =?UTF-8?q?QueryOrderBy=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/extensions/sql/SqlExtensions.kt | 46 +++++++++++++++---- .../kotlin/com/mybatisflex/test/KotlinTest.kt | 17 +++++-- 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/mybatis-flex-kotlin/src/main/kotlin/com/mybatisflex/kotlin/extensions/sql/SqlExtensions.kt b/mybatis-flex-kotlin/src/main/kotlin/com/mybatisflex/kotlin/extensions/sql/SqlExtensions.kt index 35e7360d..4d50f374 100644 --- a/mybatis-flex-kotlin/src/main/kotlin/com/mybatisflex/kotlin/extensions/sql/SqlExtensions.kt +++ b/mybatis-flex-kotlin/src/main/kotlin/com/mybatisflex/kotlin/extensions/sql/SqlExtensions.kt @@ -23,9 +23,11 @@ import java.util.function.Consumer * @author 卡莫sama(yuanjiashuai) * @date 2023/8/7 */ -infix fun QueryColumn.eq(value: Any?): QueryCondition { - return this.eq(value) -} + + +//logic------ +inline fun `if`(test: Boolean, block: () -> QueryCondition): QueryCondition = + if (test) block() else QueryCondition.createEmpty() inline fun QueryCondition.andIf(test: Boolean, block: () -> QueryCondition): QueryCondition = if (test) this.and(block()) else this @@ -33,15 +35,17 @@ inline fun QueryCondition.andIf(test: Boolean, block: () -> QueryCondition): Que inline fun QueryCondition.orIf(test: Boolean, block: () -> QueryCondition): QueryCondition = if (test) this.or(block()) else this -inline fun `if`(test: Boolean, block: () -> QueryCondition): QueryCondition = - if (test) block() else QueryCondition.createEmpty() - -infix fun QueryColumn.like(value: String): QueryCondition = this.like(value) - infix fun QueryCondition.and(other: QueryCondition): QueryCondition = this.and(other) infix fun QueryCondition.or(other: QueryCondition): QueryCondition = this.or(other) +//Comparable------ +infix fun QueryColumn.like(value: String): QueryCondition = this.like(value) + +infix fun QueryColumn.eq(value: Any?): QueryCondition = this.eq(value) + +infix fun QueryColumn.ne(value: Any?): QueryCondition = this.ne(value) + infix fun QueryColumn.`=`(value: Any?): QueryCondition = this.eq(value) infix fun QueryColumn.`!=`(value: Any?): QueryCondition = this.ne(value) @@ -54,10 +58,16 @@ infix fun QueryColumn.le(value: Any?): QueryCondition = this.le(value) infix fun QueryColumn.lt(value: Any?): QueryCondition = this.lt(value) +//range----- infix fun QueryColumn.between(pair: Pair): QueryCondition = this.between(pair.first, pair.second) infix fun QueryColumn.notBetween(pair: Pair): QueryCondition = this.notBetween(pair.first, pair.second) +infix fun QueryColumn.between(range: ClosedRange<*>): QueryCondition = this.between(range.start, range.endInclusive) + +infix fun QueryColumn.notBetween(range: ClosedRange<*>): QueryCondition = + this.notBetween(range.start, range.endInclusive) + infix fun QueryColumn.notIn(value: Collection): QueryCondition = this.notIn(value) infix fun QueryColumn.notIn(values: Array): QueryCondition = this.notIn(values) @@ -66,8 +76,12 @@ infix fun QueryColumn.`in`(value: Collection): QueryCondition = this.`in`( infix fun QueryColumn.`in`(values: Array): QueryCondition = this.`in`(values) +infix fun QueryColumn.`in`(range: IntRange): QueryCondition = this.`in`(range.toList()) + +//as----- infix fun QueryWrapper.`as`(alias: String?) = this.`as`(alias) +//join------ infix fun Joiner.`as`(alias: String?): Joiner = this.`as`(alias) infix fun Joiner.on(on: String?): M = this.on(on) @@ -76,8 +90,20 @@ infix fun Joiner.on(on: QueryCondition?): M = this.on(on) infix fun Joiner.on(consumer: Consumer): M = this.on(consumer) -infix fun QueryWrapper.orderBy(orderBys: Collection): QueryWrapper = this.orderBy(*orderBys.toTypedArray()) +// orderBy------ +infix fun QueryWrapper.orderBy(orderBys: Collection): QueryWrapper = + this.orderBy(*orderBys.toTypedArray()) +infix fun QueryWrapper.orderBy(orderBy: QueryOrderBy?): QueryWrapper = this.orderBy(orderBy) + +operator fun QueryColumn.unaryPlus(): QueryOrderBy = this.asc() + +operator fun QueryColumn.unaryMinus(): QueryOrderBy = this.desc() + +// limit------ infix fun QueryWrapper.limit(rows: Number): QueryWrapper = this.limit(rows) -infix fun QueryWrapper.limit(pair: Pair): QueryWrapper = this.limit(pair.first,pair.second) +infix fun QueryWrapper.limit(pair: Pair): QueryWrapper = this.limit(pair.first, pair.second) + +infix fun QueryWrapper.limit(range: IntRange): QueryWrapper = this.limit(range.first, range.last) + diff --git a/mybatis-flex-test/mybatis-flex-spring-kotlin-test/src/test/kotlin/com/mybatisflex/test/KotlinTest.kt b/mybatis-flex-test/mybatis-flex-spring-kotlin-test/src/test/kotlin/com/mybatisflex/test/KotlinTest.kt index 49a30161..075666f5 100644 --- a/mybatis-flex-test/mybatis-flex-spring-kotlin-test/src/test/kotlin/com/mybatisflex/test/KotlinTest.kt +++ b/mybatis-flex-test/mybatis-flex-spring-kotlin-test/src/test/kotlin/com/mybatisflex/test/KotlinTest.kt @@ -79,15 +79,22 @@ class KotlinTest { // 查询表对象对应的所有实体数据 ACCOUNT.all().forEach(::println) // ACCOUNT.query {}.forEach(::println) + // a and (b or c) -// filter { -// ACCOUNT.AGE `=` 12 and -// (ACCOUNT.ID `in` listOf(1, 2) or (ACCOUNT.ID `in` listOf(1, 2))) -// } +// filter: filter { ACCOUNT.ID `=` 1 and - (ACCOUNT.AGE `in` listOf(18,19) or (ACCOUNT.BIRTHDAY between ("2020-01-10" to "2020-01-12")) ) + (ACCOUNT.AGE `in` (17..19) or (ACCOUNT.BIRTHDAY between ("2020-01-10" to "2020-01-12")) ) }.forEach(::println) + +// query: + query { + from(Account) + where(Account) { + (AGE `in` (17..19) or (BIRTHDAY between ("2020-01-10" .. "2020-01-12")) ) + } orderBy -Account.ID + }.forEach(::println) + // 查询表对象对应的实体数据并根据条件过滤 filter { ACCOUNT.AGE `=` 12 or