批里批里 (゜-゜)つ🍺 干杯~|

七つ一旋桜

园龄:4年2个月粉丝:6关注:3

📂笔记
🔖vert.x
2022-06-07 20:13阅读: 68评论: 0推荐: 0

cloudopt-next 笔记

  1. 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>
    
  2. 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"
      }
    }
    
  3. App.kt

    import net.cloudopt.next.web.NextServer
    
    fun main() {
    	System.getProperties().setProperty("org.jooq.no-logo", "true")
    	NextServer.run()
    }
    
  4. 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
    	}
    }
    
  5. 访问结果如下

    image-20220607181555519

加点东西

  1. 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])
    
  2. 数据库

    <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&amp;characterEncoding=utf-8&amp;useSSL=false&amp;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>
    

    生成代码

    image-20220607183641902

    修改入口文件

    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 中国大陆许可协议进行许可。

posted @   七つ一旋桜  阅读(68)  评论(0编辑  收藏  举报
(评论功能已被禁用)
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起