# DBAligner **Repository Path**: chenlhgit/DBAligner ## Basic Information - **Project Name**: DBAligner - **Description**: 简单的数据库结构对齐工具,项目启动自动对齐库结构,减少运维量 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-22 - **Last Updated**: 2024-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DBAligner #### 介绍 简单的数据库结构对齐工具,项目启动自动对齐库结构,减少运维量 #### 软件说明 1. DBAligner.java 即粘即用,仅依赖spring部分组件 2. 软件目前支持库表结构对齐,包括字段、主键、索引等等 3. 若对象(表、字段、索引)不存在,则自动创建 4. 若对象(表、字段、索引)存在则查看类型、备注等信息是否一致,不一致则将库中类型向DBAligner中描述的信息对齐 5. 本功能只对齐代码中所示的库表字段,不会删除库中的其他对象 6. 对齐后可执行upset sql初始化表数据 #### 安装教程 1. 本地安装mysql5.7+ 2. maven构建 3. application启动 #### 使用说明 1. 将DBAligner.java放置与任何spring项目中 2. 向DBAligner的tables中添加任意库表字段,例如 ```$java /** * 下述例子,将保证在项目启动后必定会有 test_db_init_example表,且该表中必定有四个字段和四个索引一个主键 **/ tableList.add(new TableInfo("test_db_init_example", "示范表") .keys("id") .columns(new TColumn("id", "int(11)", false, true, null, "主键列"), new TColumn("name", "varchar(255)", true, false, null, "名称"), new TColumn("number", "int(11)", true, false, null, "序号"), new TColumn("delete_flag", "varchar(10)", true, false, "0", "删除标识")) .indexs(new TIndex("index_name", "name"), new TIndex("index_number", "number"), new TIndex("index_name_target", "name"), new TIndex("index_name_number", "name", "number")) ``` 3. 向DBAligner的sqls中添加upset语句 ```$java 例如mysql的 INSERT INTO `test_db_init_example`(`id`, `name`, `number`, `delete_flag`) VALUES (1, '张三' , 3, '0'),(2, '李四' , 4, '0') ON DUPLICATE KEY UPDATE id=id ``` 4. 项目启动即可 #### 优化方向 1. **扩展数据库**:本功能只实现了mysql库对齐,用户可通过继承AbstractDBHelper.java来实现自己需要对齐的数据库 2. **分离业务代码**:可以拆分DBAligner.java的内部类将功能和业务分离开来 3. **json化**:可实现TableInfo类对象与json的转化,方便人备份全库结构 4. **类型字典**:将表字段、索引类型转化为枚举等类型字典,而各DBHelper实现枚举到具体类型的映射,解决异构数据库的字段类型兼容性问题 5. **记录优化**: 将数据的初始化作为功能,而不是手写upset语句,防止有的数据库版本不支持upset语法 6. **对齐级别**: 实现不同对齐级别,强对齐将保证类型一致,弱对齐只保证存在同名字段,等等 #### 使用场景 1、快捷部署: 对于初版系统的部署,若代码中描述的表结构以及初始数据齐全,则系统启动即可使用 2、更新维护: 此功能有助于多生产环境的更新维护,运维人员只需更新代码即可,而不用关心数据库