Ktolin+Ktorm入门实现增删改查

Ktolin+Ktorm入门实现增删改查

Ktolin+Ktorm入门实现增删改查以及分页查询,此处以用户表为例。

第一步 引依赖

plugins {
    kotlin("jvm") version "1.8.0"
    application
    kotlin("plugin.serialization") version "1.8.0" // 序列化插件
}

dependencies {
    // Ktor
    val ktor_version = "2.3.2"
    implementation("io.ktor:ktor-server-core:$ktor_version")
    implementation("io.ktor:ktor-server-netty:$ktor_version")
    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")
    implementation("io.ktor:ktor-server-content-negotiation:$ktor_version")
    implementation("io.ktor:ktor-server-call-logging:$ktor_version")

    // Ktorm
    val ktorm_version = "3.6.0"
    implementation("org.ktorm:ktorm-core:$ktorm_version")
    implementation("org.ktorm:ktorm-support-mysql:$ktorm_version") // 根据数据库更换

    // MySQL
    implementation("mysql:mysql-connector-java:8.0.28")

    // 连接池
    implementation("com.zaxxer:HikariCP:5.0.1")

    // 测试
    testImplementation("io.ktor:ktor-server-tests:$ktor_version")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit:1.8.0")
}

第二步 创建实体

  1. 创建表实体对象
interface User : Entity<User> {
    companion object : Entity.Factory<User>()

    var id: String?
    var name: String?
    var eamil: String?
    var createdBy: String?
    var createdTime: LocalDateTime?
    var updatedBy: String?
    var updatedTime: LocalDateTime?
    /**
     * 是否删除 1删除0正常
     **/
    var deleted: String
}
  1. 创建绑定实体对象
object UserDao : Table<User>("tb_user") {
    var id = varchar("id").primaryKey().bindTo { it.id }
    var name= varchar("name").bindTo { it.name}
    var typeId = varchar("email").bindTo { it.typeId }
    var createdBy = varchar("created_by").bindTo { it.createdBy }
    var createdTime = datetime("created_time").bindTo { it.createdTime }
    var updatedBy = varchar("updated_by").bindTo { it.updatedBy }
    var updatedTime = datetime("updated_time").bindTo { it.updatedTime }
    /**
     * 是否删除 1删除0正常
     **/
    var deleted = varchar("deleted").bindTo { it.deleted }
}
  1. 创建数据库操作对象
object Tables {
    /**
     * 用户信息
     **/
    val tpmEbUserInfo = TpmEbUserInfoDao
    /**
     *  用户信息
     **/
    val Database.tpmEbUserInfo get() = this.sequenceOf(TpmEbUserInfoDao,false)
}

第三步 创建service层

@Service
class UserService:BaseService() {

    @Autowired
    lateinit var database: Database
	// 分页查询
    fun adminList(adminList: UserServiceQuery.AdminList): PageDto<List<User>> {
        val user = getAdminUser()
        val userInfo = database.tpmEbUserInfo.find { it.id eq user.userId!! }!!

        val listSearch = database.from(UserDao)
            .select()
            .where {
                val conditions = FdKtOrmBase.conditionsInit()
                
                if (!adminList.name.isNullOrEmpty()) {
                    conditions += UserDao.name eq adminList.name!!
                }
                if(!adminList.createdTime.isNullOrEmpty()){
                    val createdTimes = adminList.createdTime.split(",")
                    conditions += UserDao.createdTime between (LocalDateTime.parse("${createdTimes[0]} 00:00:00.000",
                        DateTimeFormatter.ofPattern(CommonConstant.dateTimeMillFormatter))..LocalDateTime.parse("${createdTimes[1]} 23:59:59.999",
                        DateTimeFormatter.ofPattern(CommonConstant.dateTimeMillFormatter)))
                }

                conditions += UserDao.deleted eq DeleteEnum.FALSE.value
                conditions.combineConditions()
            }
        var total = listSearch.totalRecords
        val list = listSearch
            .limit((adminList.page - 1) * adminList.pageSize, adminList.pageSize)
            .orderBy(UserDao.createdTime.desc())
            .map {
                var info = UserDao.createEntity(it)
                info
            }
        return PageDto(list, adminList.page, adminList.pageSize, total)
    }
	//查看
    fun adminGet(@Valid getQuery: GetQuery): User? {
        return database.Users.find { it.id eq getQuery.id!! }
    }
	//创建
    fun adminCreate(adminCreate: WmQrLogServiceQuery.AdminCreate) {
        val user = getAdminUser()
        val id = UUID.randomUUID().toString()
        database.Users.insert {
            set(it.id, id)
            set(it.name, adminCreate.name)
            set(it.email, adminCreate.email)
            set(it.createdBy, user.userId)
            set(it.createdTime, LocalDateTime.now())
            set(it.deleted, DeleteEnum.FALSE.value)
        }
    }
	
	//更新
	fun update(update: UserServiceQuery.Update) {

        val user = this.getAdminUser()

        val info = database.users.find { (it.id eq update.id) and (it.deleted eq DeleteEnum.FALSE.value) }
        if (info != null) {
            info.name = update.name
            info.updatedBy = user.userId!!
            info.updatedTime = LocalDateTime.now()
            info.flushChanges()
        }
    }
	
	//删除
	fun delete(delete: DeleteQuery) {
        val info = database.users.find { (it.id eq delete.id!!) and (it.deleted eq DeleteEnum.FALSE.value) }
        info?.deleted = DeleteEnum.TRUE.value
        info?.flushChanges()
    }


}

class PageDto<T>(t: T,page: Int,pageSize: Int,totalSize: Int) {

    var page = page
    var pageSize = pageSize
    var totalSize = totalSize
    var datalist = t

}

自此你就可以去进行测试啦!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值