cloudopt-next 笔记
-
pom依赖
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <kotlin.version>1.4.0</kotlin.version> <kotlin.code.style>official</kotlin.code.style> <junit.version>4.13.1</junit.version> <jooq.version>3.14.4</jooq.version> <cloudopt.version>3.0.0.1-RELEASE</cloudopt.version> </properties> <repositories> <repository> <id>cloudopt-center</id> <url>https://dl.bintray.com/cloudopt/maven</url> </repository> </repositories> <dependencies> <dependency> <groupId>net.cloudopt.next</groupId> <artifactId>cloudopt-next-web</artifactId> <version>${cloudopt.version}</version> </dependency> </dependencies>
-
application.json
{ "packageName": "org.example", "cookieCors": true, "port": 9090, "datasource": { "jdbcUrl": "jdbc:mysql://coco:3306/cloudopt?useUnicode=true&character_set_server=utf8mb4&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true", "username": "root", "password": "r1A94B9K", "driverClassName": "com.mysql.cj.jdbc.Driver" }, "jooq": { "pool": "net.cloudopt.next.jooq.pool.HikariCPPool", "database": "mysql" } }
-
App.kt
import net.cloudopt.next.web.NextServer fun main() { System.getProperties().setProperty("org.jooq.no-logo", "true") NextServer.run() }
-
controller
import net.cloudopt.next.web.Resource import net.cloudopt.next.web.annotation.API import net.cloudopt.next.web.annotation.GET @API("/api/v1") class IndexController: Resource() { @GET suspend fun get() { renderJson(result("hello")) } private fun result(any: Any): HashMap<String, Any> { val map = HashMap<String, Any>() map["result"] = any return map } }
-
访问结果如下
加点东西
-
interceptor
package org.example.interceptor import net.cloudopt.next.web.Interceptor import net.cloudopt.next.web.Resource class AllInterceptor : Interceptor { override suspend fun intercept(resource: Resource): Boolean { println("Through the intercept!") return true } override suspend fun response(resource: Resource): Resource { return resource } }
修改controller注解
@API("/api/v1", interceptor = [AllInterceptor::class])
-
数据库
<dependency> <groupId>net.cloudopt.next</groupId> <artifactId>cloudopt-next-jooq</artifactId> <version>${cloudopt.version}</version> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq</artifactId> <version>${jooq.version}</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq-meta</artifactId> <version>${jooq.version}</version> </dependency>
jooq代码生成插件
<!--JOOQ--> <plugin> <groupId>org.jooq</groupId> <artifactId>jooq-codegen-maven</artifactId> <version>3.13.1</version> <executions> <execution> <id>jooq-codegen-maven</id> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> </dependencies> <configuration> <jdbc> <driver>com.mysql.cj.jdbc.Driver</driver> <url>jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai</url> <user>root</user> <password>root</password> </jdbc> <generator> <database> <name>org.jooq.meta.mysql.MySQLDatabase</name> <includes>.*</includes> <inputSchema>数据库名</inputSchema> </database> <target> <packageName>主包包名.model</packageName> <directory>src/main/kotlin/</directory> </target> <generate> <pojos>true</pojos> </generate> </generator> </configuration> </plugin>
生成代码
修改入口文件
fun main() { System.getProperties().setProperty("org.jooq.no-logo", "true") NextServer.addPlugin(JooqPlugin()) NextServer.run() // 添加这行 }
service
class UserService { suspend fun getUserList(): MutableList<TUser> { return Worker.await { promise -> val result = JooqManager.dsl.selectFrom(Tables.T_USER).fetch().into(TUser::class.java) promise.complete(result) } } }
修改controller添加接口
@API("/api/v1", interceptor = [AllInterceptor::class]) class IndexController: Resource() { private val userService = UserService() @GET("/user") suspend fun getUserList() { renderJson(result(userService.getUserList())) } }
其他crud示例代码
import net.cloudopt.next.core.Worker import net.cloudopt.next.jooq.JooqManager import org.example.model.Tables import org.example.model.tables.pojos.TUser import org.example.model.tables.records.TUserRecord import java.sql.Timestamp class UserService { suspend fun getUserList(): MutableList<TUser> { return Worker.await { promise -> val result = JooqManager.dsl.selectFrom(Tables.T_USER).fetch().into(TUser::class.java) promise.complete(result) } } suspend fun getTodoListById(id: String): TUserRecord { return Worker.await { promise -> val result = JooqManager.dsl.selectFrom(Tables.T_USER).where(Tables.T_USER.ID.eq(id)).fetchOne() promise.complete(result) } } suspend fun addUserList(tuser: TUser):Int { val user = JooqManager.dsl.newRecord(Tables.T_USER) user.id = "0" user.username = tuser.username user.password = tuser.password return Worker.await { promise -> val insert = user.insert() promise.complete(insert) } } suspend fun updateUserList(tuser: TUser): Int { val user = JooqManager.dsl.newRecord(Tables.T_USER) user.id = tuser.id user.username = tuser.username user.password = tuser.password //time = Timestamp(System.currentTimeMillis()).toLocalDateTime() return Worker.await { promise -> val update = user.update() promise.complete(update) } } suspend fun deleteUserList(id: String): Int { val user = JooqManager.dsl.newRecord(Tables.T_USER) user.id = id return Worker.await { promise -> val delete = user.delete() promise.complete(delete) } } }
本文作者:七つ一旋桜
本文链接:https://www.cnblogs.com/poifa/p/16353246.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步