vertx-pj/vertx-demo/src/test/kotlin/app/GenerateMigration.kt
2025-03-20 11:53:57 +08:00

89 lines
2.4 KiB
Kotlin

package app
import org.aikrai.vertx.db.annotation.TableField
import org.aikrai.vertx.db.annotation.TableId
import org.aikrai.vertx.db.annotation.TableName
import org.aikrai.vertx.db.migration.AnnotationMapping
import org.aikrai.vertx.db.migration.ColumnMapping
import org.aikrai.vertx.db.migration.DbMigration
import org.aikrai.vertx.db.migration.SqlAnnotationMapper
/**
* PostgreSQL数据库迁移生成工具
* 参考了ebean框架的设计
*/
object GenerateMigration {
/**
* 生成数据库迁移脚本
* 使用示例:
*
* ```
* // 创建SQL注解映射器
* val mapper = createSqlAnnotationMapper()
*
* // 设置迁移生成器
* val dbMigration = DbMigration.create()
* dbMigration.setEntityPackage("org.aikrai.vertx.entity")
* dbMigration.setSqlAnnotationMapper(mapper)
* dbMigration.generateMigration()
* ```
*/
@JvmStatic
fun main(args: Array<String>) {
// 创建SQL注解映射器
val mapper = createSqlAnnotationMapper()
// 设置迁移生成器
val dbMigration = DbMigration.create()
dbMigration.setEntityPackage("org.aikrai.vertx.entity") // 替换为你的实体类包路径
dbMigration.setSqlAnnotationMapper(mapper)
// 生成迁移
val migrationVersion = dbMigration.generateMigration()
println("生成的迁移版本: $migrationVersion")
}
/**
* 创建SQL注解映射器
* 根据项目中使用的注解配置映射关系
*/
private fun createSqlAnnotationMapper(): SqlAnnotationMapper {
val mapper = SqlAnnotationMapper()
// 设置表名映射
mapper.tableName = AnnotationMapping(
annotationClass = TableName::class,
propertyName = "value"
)
// 设置列映射
mapper.addColumnMapping(
ColumnMapping(
nameMapping = AnnotationMapping(
annotationClass = TableField::class,
propertyName = "name"
),
typeMapping = AnnotationMapping(
annotationClass = TableField::class,
propertyName = "type"
),
nullableMapping = AnnotationMapping(
annotationClass = TableField::class,
propertyName = "nullable"
),
defaultValueMapping = AnnotationMapping(
annotationClass = TableField::class,
propertyName = "defaultValue"
)
)
)
// 设置主键映射
mapper.primaryKeyMapping = AnnotationMapping(
annotationClass = TableId::class,
propertyName = "value"
)
return mapper
}
}