Skip to content

Commit

Permalink
1.解决insert方法产生歧义问题;2.添加增删改演示用例和注释;3.添加filterOne方法
Browse files Browse the repository at this point in the history
  • Loading branch information
KAMO030 committed Nov 22, 2023
1 parent f9e8351 commit df3848d
Show file tree
Hide file tree
Showing 12 changed files with 141 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import java.util.*
*
* (如有需要可以安装官方 noArg 插件)
*
* @author 卡莫sama
* @author KAMOsama
* @date 2023/8/7
*/
@Table("tb_account")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import com.mybatisflex.core.query.QueryCondition

/*
* QueryCondition连接逻辑操作扩展
* @author 卡莫sama
* @author KAMOsama
*/

fun QueryCondition.and(isEffective: Boolean, predicate: () -> QueryCondition): QueryCondition =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,18 @@ import kotlin.reflect.full.isSubclassOf

/*
* 数据库简单操作扩展
* @author 卡莫sama
* @author KAMOsama
*/

/**
* 把泛型类型当作mapper类型拿到mapper实例
* @author 卡莫sama
* @author KAMOsama
*/
inline fun <reified M> mapper(): M = Mappers.ofMapperClass(M::class.java)

/**
* 把泛型类型当作实体类型拿到mapper实例
* @author 卡莫sama
* @author KAMOsama
*/
val <E : Any> KClass<E>.baseMapper: BaseMapper<E>
get() = Mappers.ofEntityClass(java)
Expand All @@ -69,6 +69,11 @@ val <E : Any> KClass<E>.tableInfoOrNull: TableInfo?
}

// query-----------
/**
* 通过条件查询一条数据
* @param columns 查询的列
* @param init 查询作用域初始化函数
*/
inline fun <reified T : Any> queryOne(
vararg columns: QueryColumn,
init: QueryScope.() -> Unit
Expand All @@ -85,43 +90,64 @@ inline fun <reified T : Any> queryOne(
}
}

inline fun queryRow(
vararg columns: QueryColumn,
schema: String? = null,
tableName: String? = null,
init: QueryScope.() -> Unit
): Row? =
selectOneByQuery(
schema,
tableName,
queryScope(columns = columns, init = init)
)

/**
* 通过条件查询多条数据
* @param columns 查询的列
* @param init 查询作用域初始化函数
*/
inline fun <reified T : Any> query(
vararg columns: QueryColumn,
init: QueryScope.() -> Unit
): List<T> =
try {
T::class.baseMapper.selectListByQuery(queryScope(init = init))
} catch (e: MybatisFlexException) {
T::class.tableInfo.run {
queryRows(schema = schema, tableName = tableName, init = {
queryRows(schema = schema, tableName = tableName, columns = columns, init = {
init()
// 如果未调用select方法,则默认查询所有列
if (this.hasSelect().not()) select(*T::class.defaultColumns)
}).toEntities()
}
}

/**
* 通过条件查询一条数据
* @param columns 查询的列
* @param init 查询作用域初始化函数
*/
inline fun queryRow(
schema: String? = null,
tableName: String? = null,
vararg columns: QueryColumn,
init: QueryScope.() -> Unit
): Row? =
selectOneByQuery(
schema,
tableName,
queryScope(columns = columns, init = init)
)

/**
* 通过条件查询多条数据
* @param columns 查询的列
* @param init 查询作用域初始化函数
*/
inline fun queryRows(
schema: String? = null,
tableName: String? = null,
vararg columns: QueryColumn,
init: QueryScope.() -> Unit
): List<Row> = selectListByQuery(
schema, tableName, queryScope(init = init)
schema, tableName, queryScope(columns = columns, init = init)
)

// filter-----------
/**
* 通过条件查询多条数据
* @param columns 查询的列
* @param queryCondition 查询条件
*/
inline fun <reified E : Any> filter(
vararg columns: QueryColumn,
queryCondition: QueryCondition = QueryCondition.createEmpty()
Expand All @@ -138,35 +164,63 @@ inline fun <reified E : Any> filter(
}
}


/**
* 通过条件查询多条数据
* @param columns 查询的列
* @param condition 查询条件
*/
inline fun <reified E : Any> filterColumn(
vararg columns: QueryColumn = E::class.tableInfo.defaultQueryColumn.toTypedArray(),
init: () -> QueryCondition
condition: () -> QueryCondition
): List<E> =
filter(
columns = columns,
queryCondition = init()
queryCondition = condition()
)

/**
* 通过条件查询多条数据
* @param columns 查询的列
* @param condition 查询条件
*/
inline fun <reified E : Any> filter(
columns: Array<out QueryColumn> = E::class.defaultColumns,
init: () -> QueryCondition
condition: () -> QueryCondition
): List<E> =
filterColumn(
columns = columns,
init = init
condition = condition
)

/**
* 通过条件查询一条数据
* @param columns 查询的列
* @param condition 查询条件
* @since 1.0.5
*/
inline fun <reified E : Any> filterOne(
vararg columns: KProperty<*>,
condition: () -> QueryCondition
): E? = queryOne(init = { select(*columns);and(condition()) })

/**
* 通过条件查询多条数据
* @param columns 查询的列
* @param condition 查询条件
*/
inline fun <reified E : Any> filter(
vararg columns: KProperty<*>,
init: () -> QueryCondition
condition: () -> QueryCondition
): List<E> =
filter(
columns = columns.toQueryColumns(),
init = init
condition = condition
)

// all----------
/**
* 查询泛型对应的表的所有数据
*/
inline fun <reified E : Any> all(): List<E> = filter<E>(E::class.defaultColumns, QueryCondition::createEmpty)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import kotlin.reflect.jvm.javaField

/*
* KProperty操作扩展
* @author 卡莫sama,CloudPlayer
* @author KAMOsama,CloudPlayer
*/

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package com.mybatisflex.kotlin.extensions.mapper

import com.mybatisflex.core.BaseMapper
import com.mybatisflex.core.activerecord.MapperModel
import com.mybatisflex.core.query.QueryCondition
import com.mybatisflex.kotlin.extensions.db.baseMapper
import com.mybatisflex.kotlin.scope.QueryScope
Expand All @@ -24,7 +25,7 @@ import kotlin.reflect.KClass

/*
* 映射器操作扩展
* @author 卡莫sama
* @author KAMOsama
*/

fun <T> BaseMapper<T>.query(init: QueryScope.() -> Unit): List<T> =
Expand All @@ -50,18 +51,16 @@ val <E : Any> KClass<E>.all: List<E>
get() = baseMapper.selectAll()

// insert-----------
inline fun <reified E : Any> insert(build: E.() -> Unit): Int {
val entity = E::class.java.newInstance()
entity.build()
return E::class.baseMapper.insert(entity)
}
inline fun <reified E : MapperModel<E>> insert(build: E.() -> Unit): Int =
E::class.java.newInstance().apply(build).run { insert() }

inline fun <reified E : Any> E.insert(): Int = E::class.baseMapper.insert(this)

inline fun <reified E : MapperModel<E>> E.insert(): Int = baseMapper().insert(this)

// update-----------
inline fun <reified E : Any> E.update(conditionBlock: (E) -> QueryCondition): Int =
E::class.baseMapper.updateByCondition(this, conditionBlock(this))
inline fun <reified E : MapperModel<E>> E.update(conditionBlock: (E) -> QueryCondition): Int =
baseMapper().updateByCondition(this, conditionBlock(this))

// delete-----------
inline fun <reified E : Any> E.delete(conditionBlock: (E) -> QueryCondition): Int =
E::class.baseMapper.deleteByCondition(conditionBlock(this))
inline fun <reified E : MapperModel<E>> E.remove(conditionBlock: (E) -> QueryCondition): Int =
baseMapper().deleteByCondition(conditionBlock(this))
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package com.mybatisflex.kotlin.extensions.model

import com.mybatisflex.core.activerecord.Model
import com.mybatisflex.core.activerecord.MapperModel
import com.mybatisflex.core.row.Row
import com.mybatisflex.core.row.RowUtil
import com.mybatisflex.core.util.SqlUtil
Expand All @@ -24,19 +24,19 @@ import java.io.Serializable

/*
* 实体操作扩展
* @author 卡莫sama
* @author KAMOsama
*/

inline fun <reified T> Row.toEntity(): T = RowUtil.toEntity(this, T::class.java)

inline fun <reified E> Collection<Row>.toEntities(): MutableList<E> =
RowUtil.toEntityList(this.toMutableList(), E::class.java)

inline fun <reified E : Model<E>> List<E>.batchInsert() = E::class.baseMapper.insertBatch(this)
inline fun <reified E : MapperModel<E>> List<E>.batchInsert() = E::class.baseMapper.insertBatch(this)

fun <E : Model<E>> List<E>.batchUpdateById(): Boolean = all(Model<E>::updateById)
fun <E : MapperModel<E>> List<E>.batchUpdateById(): Boolean = all(MapperModel<E>::updateById)

inline fun <reified E : Model<E>> List<E>.batchDeleteById(): Boolean {
inline fun <reified E : MapperModel<E>> List<E>.batchDeleteById(): Boolean {
val tableInfo = E::class.tableInfo
//拿到集合中所有实体的主键
val primaryValues = this.map { tableInfo.getPkValue(it) as Serializable }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import kotlin.reflect.KProperty

/*
* sql操作扩展
* @author 卡莫sama
* @author KAMOsama
* @date 2023/8/7
*/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import kotlin.reflect.KProperty

/*
* QueryWrapper操作扩展
* @author 卡莫sama
* @author KAMOsama
*/

inline fun QueryWrapper.from(init: QueryScope.() -> Unit = {}): QueryWrapper = this.from(queryScope(init = init))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import kotlin.reflect.KClass

/**
* Bootstrap构建配置作用域
* @author 卡莫sama
* @author KAMOsama
* @date 2023/8/7
*/
class BootstrapScope(private val instant: MybatisFlexBootstrap = MybatisFlexBootstrap.getInstance()) {
Expand Down
19 changes: 3 additions & 16 deletions mybatis-flex-kotlin-extensions/src/main/kotlin/scope/QueryScope.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,10 @@ import kotlin.reflect.KProperty

/**
* 查询作用域
* @author 卡莫sama
* @author KAMOsama
* @date 2023/8/7
*/
class QueryScope : QueryWrapper() {
companion object CurrentQueryScope : ThreadLocal<QueryScope>()

val prentQueryScope: QueryScope? = CurrentQueryScope.get()

operator fun String.get(name: String): QueryColumn = QueryColumn(this, name)

Expand All @@ -42,18 +39,8 @@ class QueryScope : QueryWrapper() {
}


inline fun queryScope(vararg columns: QueryColumn, init: QueryScope.() -> Unit = {}): QueryWrapper {
val builder = QueryScope()

if (columns.isNotEmpty()) {
builder.select(*columns)
}
//用于嵌套查询拿到上层查询包装对象
QueryScope.set(builder)
init(builder)
QueryScope.set(builder.prentQueryScope)
inline fun queryScope(vararg columns: QueryColumn, init: QueryScope.() -> Unit = {}): QueryWrapper =
QueryScope().apply(init).apply { if (columns.isNotEmpty() && !hasSelect()) select(*columns) }

return builder
}


Loading

0 comments on commit df3848d

Please sign in to comment.