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) { // 创建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 } }