使用 kotlin-exposed-patterns 整理 Kotlin 的数据库处理
機械翻訳 / Machine-translated

機械翻訳 / Machine-translated
原文链接:使用 kotlin-exposed-patterns 整理 Kotlin 的数据库处理(cccskills)
技能页面:kotlin-exposed-patterns
本文结论
如果你在用 Kotlin 编写服务端代码,安装 kotlin-exposed-patterns 后,Agent 将能从 JetBrains Exposed 的查询到测试,以一致的风格为你提供建议。
本文涵盖的内容包括:该技能的适用范围、如何安装到 Claude Code 或 Codex,以及实际使用时的请求示例。
使用前需要了解的注意事项也会逐一说明。
安装 kotlin-exposed-patterns 后,Agent 每次都会按照固定的模式来组织 Exposed 代码。
例如,你可以这样提问:
用 Exposed 实现用户搜索和分页功能
Agent 会一并返回表定义、搜索函数,以及包含分页信息的数据类。
每个函数都用 newSuspendedTransaction 块包裹,可在协程(Kotlin 的异步处理机制)中安全运行。
搜索词在使用前会对 LIKE 的特殊字符进行转义,避免用户输入导致意外匹配。
分页结果通过包含以下字段的 Page 类返回:
| 字段 | 内容 |
|---|---|
| data | 当前页的记录列表 |
| total | 总记录数 |
| page / limit | 当前页码及每页记录数 |
| totalPages | 总页数 |
| hasNext / hasPrevious | 是否有下一页/上一页 |
该技能在 GitHub 的 affaan-m/ECC 仓库中公开,仓库 Star 数为 288823。
内容以 SKILL.md 这一个文件为主,围绕用户和订单为题材提供代码示例。
该技能从四个维度支持 Exposed 的数据访问:「查询」「连接与结构变更」「事务」「隔离与测试」。
Agent 会将这些示例套用到你的表上来生成代码。
Exposed 有两种写法,该技能均提供了示例。
使用参考如下:
| 写法 | 特点 | 适用场景 |
|---|---|---|
| DSL | 类似 SQL 的表达式写法 | 简单的查询与更新 |
| DAO | 将记录作为对象处理 | 需要管理实体状态的创建、更新等操作 |
DSL 示例涵盖了增删改查基本操作,以及表连接、聚合、子查询、分页等高级用法。
也包括批量插入的 batchInsert 和重复时切换为更新的 upsert。
此外还包含使用 kotlinx.serialization 对 PostgreSQL 的 JSONB 列进行读写的自定义列类型定义。
连接方面采用 HikariCP 连接池(复用数据库连接的机制)与 Flyway 迁移相结合的配置。
HikariCP 中指定最大连接数、禁用自动提交,以及隔离级别 READ_COMMITTED。
Flyway 会在应用启动时,按顺序应用带编号的 SQL 文件,将表结构同步到位。
迁移 SQL 文件存放在 src/main/resources/db/migration/ 目录下,命名格式如 V1__create_users.sql。
启动流程中,先执行迁移,再创建连接池。
该技能的核心原则是:所有数据库操作都在 newSuspendedTransaction 块内执行。
块内的操作要么全部成功,要么全部失败。
技能中也提供了转账这类需要同时提交两条更新的场景示例,以及更改隔离级别(如 SERIALIZABLE)的示例。
为了将业务逻辑与数据访问分离,技能采用了仓库模式(将数据的读写统一封装在一个入口的设计)。
通过 UserRepository 接口定义查询、创建、更新、删除、计数等操作,再提供基于 Exposed 的具体实现类。
测试中以 PostgreSQL 兼容模式启动 H2 内存数据库,直接对实现类进行验证。
测试示例共三个:
每个测试前都会清空表,因此测试之间互不影响。
安装有两种方式:通过命令安装,或委托 Agent 安装。
执行命令后,可选择安装到 Claude Code 或 Codex 等目标 Agent。
npx skills add https://github.com/affaan-m/ECC --skill kotlin-exposed-patterns
如果交由 Agent 处理,请直接发送以下内容。
这段指令涵盖了从内容确认到文件放置的全部操作。
请安装以下 Agent Skill。
https://github.com/affaan-m/ECC/tree/main/skills/kotlin-exposed-patterns
请先确认 SKILL.md 及附属文件的内容,确认不存在可疑操作(如向外部发送数据、读取认证信息等),然后将其放置到:Claude Code 对应 ~/.claude/skills/kotlin-exposed-patterns/,Codex 对应 ~/.agents/skills/kotlin-exposed-patterns/。
安装位置根据 Agent 类型及技能的使用范围而定:
| Agent | 所有项目通用 | 仅限特定项目 |
|---|---|---|
| Claude Code | ~/.claude/skills/ | 项目内的 .claude/skills/ |
| Codex | ~/.agents/skills/ | 项目内的 .agents/skills/ |
如果只有一个使用 Exposed 的项目,建议放在项目目录下。
提问时请附上表的内容和连接目标等你的实际条件,这样返回的代码会更贴合你的需求。
用 HikariCP 和 Flyway 创建连接 PostgreSQL 的配置。
连接池最大数量设为 10
返回内容包括:汇总连接信息的数据类、从 HikariCP 创建 Exposed Database 的工厂函数、执行 Flyway 的函数。
还附带初始迁移 SQL,以及启动时先执行迁移再建立连接的处理逻辑。
添加订单表,并编写按时间倒序获取指定用户订单列表的功能
返回内容包括:引用用户表的订单表定义,以及通过 innerJoin 连接两张表的查询函数。
排序为创建时间降序。
按照技能示例,结果会封装到包含订单 ID、状态、金额、用户名的数据类中。
用接口分离数据访问,并用 H2 进行测试
返回内容共三项:仓库接口、基于 Exposed 的实现类、使用 H2 的测试代码。
测试采用 FunSpec 格式,每个测试前都包含清空表的操作。
该技能是模式集合,版本和连接目标需要根据你的项目自行确认。
文档中的 Gradle 配置基于以下版本:
| 库 | 文档中的版本 |
|---|---|
| Exposed(core、dao、jdbc、kotlin-datetime、json) | 1.0.0 |
| PostgreSQL 驱动 | 42.7.5 |
| HikariCP | 6.2.1 |
| Flyway(core、database-postgresql) | 10.22.0 |
| H2(测试用) | 2.3.232 |
如果你的版本不同,请在提问时注明版本,再让 Agent 生成代码。
生成的代码请在通过构建和测试后再合并,以确保安全。
配置示例和 SQL 均以 PostgreSQL 为前提。
JSONB 列、通过 gen_random_uuid() 生成主键、使用 PGobject 进行类型转换,均为 PostgreSQL 特有的写法。
该技能不包含其他数据库产品的配置示例。
连接 URL、驱动、用户名、密码需根据你的环境自行准备。
技能示例中这些配置从应用的配置文件中读取。
请注意不要将认证信息直接写入代码。
许可证为 MIT,包含的文件仅有 SKILL.md。
不含任何脚本。
即便如此,安装前打开 SKILL.md 确认一下内容会更放心。
简单的查询和更新用 DSL,想将记录作为对象进行创建和更新等操作时用 DAO,这是基本参考标准。
该技能也推荐这种使用方式。
该技能的配置示例和 SQL 均面向 PostgreSQL,不包含其他数据库产品的操作说明。
Exposed 的写法本身可供参考,但驱动和数据库特有的部分需要自行查阅。
该技能的测试示例采用以 PostgreSQL 兼容模式运行的 H2 内存数据库。
流程是测试开始时创建表,每个测试前清空数据,因此不需要外部数据库服务器。
kotlin-exposed-patterns 是一个将使用 JetBrains Exposed 的 Kotlin 数据库处理——从查询到测试——统一为一种模式的技能。
涵盖范围包括 DSL 和 DAO 查询、HikariCP 与 Flyway 的连接配置、仓库隔离以及 H2 测试。
所有这些内容,Agent 都能以相同的模式来提供建议。
对于正在用 PostgreSQL 和 Exposed 编写服务端代码的开发者来说,可以直接使用的内容相当多。
安装位置和介绍页面可在 cccskills 页面 查看。
本文转载自 cccskills 的文章「使用 kotlin-exposed-patterns 整理 Kotlin 的数据库处理」。
技能详情和安装方法请访问 cccskills 的 kotlin-exposed-patterns 页面。