89 lines
2.4 KiB
Kotlin
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
|
|
}
|
|
} |