Skip to content

测试页面

这是一个带有图片的区块(取自 Compose Multiplatform 入门教程)。

First step 使用 Kotlin 创建 Spring Boot 项目
Second step 向 Spring Boot 项目添加数据类
Third step 为 Spring Boot 项目添加数据库支持
Fourth step 使用 Spring Data CrudRepository 进行数据库访问>

同步标签页

kotlin
plugins {
    kotlin("kapt") version "1.9.23"
}
groovy
plugins {
    id "org.jetbrains.kotlin.kapt" version "1.9.23"
}
kotlin
plugins {
    kotlin("plugin.noarg") version "1.9.23"
}
groovy
plugins {
    id "org.jetbrains.kotlin.plugin.noarg" version "1.9.23"
}

章节

折叠章节

这里有一些文本和一个代码块:

kotlin
plugins {
    kotlin("plugin.noarg") version "1.9.23"
}

代码块

只是一个代码块:

kotlin
    import java.util.*

@Service
class MessageService(val db: MessageRepository) {
    fun findMessages(): List<Message> = db.findAll().toList()

    fun findMessageById(id: String): List<Message> = db.findById(id).toList()

    fun save(message: Message) {
        db.save(message)
    }

    fun <T : Any> Optional<out T>.toList(): List<T> =
        if (isPresent) listOf(get()) else emptyList()
}

可展开的代码块

kotlin
package com.example.demo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController

@SpringBootApplication
class DemoApplication

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args)
}

@RestController
class MessageController {
    @GetMapping("/")
    fun index(@RequestParam("name") name: String) = "Hello, $name!"
}

可运行的代码块

kotlin
data class User(val name: String, val id: Int)

fun main() {
    val user = User("Alex", 1)
    
    // 自动使用 toString() 函数,以便输出易于阅读
    println(user)            
    // User(name=Alex, id=1)
}

表格

Markdown 表格

原生类型数组Java 中的对应类型
BooleanArrayboolean[]
ByteArraybyte[]
CharArraychar[]
DoubleArraydouble[]
FloatArrayfloat[]
IntArrayint[]
LongArraylong[]
ShortArrayshort[]

XML 表格

最后修改于2023 年 12 月
下次更新2024 年 6 月

内含代码块的 XML 表格

简单表格:

之前现在
kotlin
kotlin {
    targets {
        configure(['windows',
            'linux']) {
        }
    }
}
kotlin
kotlin {
    targets {
        configure([findByName('windows'),
            findByName('linux')]) {
        }
    }
}

更复杂的表格:

之前现在
jvmMain 编译的依赖项
kotlin
jvm<Scope>
kotlin
jvmCompilation<Scope>
kotlin
dependencies {
    add("jvmImplementation",
        "foo.bar.baz:1.2.3")
}
kotlin
dependencies {
    add("jvmCompilationImplementation",
        "foo.bar.baz:1.2.3")
}
jvmMain 源集的依赖项
kotlin
jvmMain<Scope>
jvmTest 编译的依赖项
kotlin
jvmTest<Scope>
kotlin
jvmTestCompilation<Scope>
jvmTest 源集的依赖项
kotlin
jvmTest<Scope>

列表

有序列表

    1. 三点 1
    2. 三点 2
    3. 三点 3
      1. 三点 1 和 1
  1. 内含代码块:

    kotlin
    jvmTest<Scope>

无序列表

  • 第一项

  • 第二项

  • 第三项

    • 再来一项
    • 又一项
      • 哇,再来一项
  • 内含代码块:

    kotlin
    jvmTest<Scope>

定义列表

可折叠项 #1

CrudRepository 接口中 findById() 函数的返回值类型是 Optional 类的一个实例。然而,为了保持一致性,返回包含单条消息的 List 会更方便。为此,你需要解构 Optional 值(如果存在),并返回一个包含该值的列表。这可以作为 Optional 类型的扩展方法来实现。

在代码中,Optional<out T>.toList().toList()Optional 的扩展方法。扩展方法允许您为任何类编写额外的函数,当您想要扩展某些库类的功能时,这特别有用。

可折叠项 #2

此函数的工作前提是数据库中尚不存在该新对象。因此,插入时的 id 应为 null

如果 id 不为 nullCrudRepository 会假定该对象已存在于数据库中,并且这是一次更新 (update) 操作,而非插入 (insert) 操作。在插入操作之后,id 将由数据存储生成并分配回 Message 实例。这就是为什么 id 属性应该使用 var 关键字声明的原因。

文本元素

变量

  • 变量使用:最新的 Kotlin 版本是 2.4.10

嵌入元素

来自 YouTube 的视频

图片

常规 (Markdown):

创建测试

常规 (XML):

Multiplatform web wizard

内联:

YouTrack

可缩放:

类图

按钮样式:

创建项目

备注

警告:

kapt 编译器插件对 K2 的支持目前处于实验性功能阶段。 需要选择性启用 (opt-in)(详见下文),且仅应将其用于评估目的。

注意:

至于随 Kotlin/Native 提供的原生平台库(如 Foundation、UIKit 和 POSIX),只有部分 API 需要通过 @ExperimentalForeignApi 进行选择性启用。在这些情况下,您会收到带有选择性启用要求的警告。

提示:

至于随 Kotlin/Native 提供的原生平台库(如 Foundation、UIKit 和 POSIX),只有部分 API 需要通过 @ExperimentalForeignApi 进行选择性启用。在这些情况下,您会收到带有选择性启用要求的警告。