# class_2_table **Repository Path**: zmycoder/class_2_table ## Basic Information - **Project Name**: class_2_table - **Description**: java类到数据库表映射工具 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-04-17 - **Last Updated**: 2024-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: Project ## README # class_2_table ## 一、介绍 java类到数据库表映射工具 ## 二、功能 ### 1、java class映射到数据库的表 * 建表 * 修改字段 * 添加字段 * 删除字段 * 修改表的主键结构 ### 2、数据库的表导出为java class类文件 > 为使用者提供的导出工具,导出的java class类文件可以作为同步时的基础模板使用 ## 三、使用说明 ### 1、应用场景 * class类对应的表在db中不存在->建表 * class类对应的表在db中存在 * class类新增属性->db表添加字段 * class类属性删除->db表删除字段 * class类属性变更->db表更新字段属性 ### 2、支持的class类属性变更内容: * 字段类型 * 是否允许null * 默认值 * 主键 * 字段注释 ### 3、@org.class2table.core.clazz.annotations.PrimaryKey注解 * 支持联合主键 * 会覆盖isNullable的值,强制设置为false ### 4、缺省 #### 1、java class类中的属性,不配置@Column注解的,在同步到数据库中时处理方式如下: * 字段名:按照属性名称转为的驼峰作为标准 * 字段类型:按照CompareProcessor.init方法传入的clazz2ColumnTypeRuleMap参数中对应关系设置 * 默认值:不设置默认值 * 是否允许为null:允许 * 字段注释:"" ### 5、提供的处理器和执行器 * 比对处理器CompareProcessor * 作用:配合同步执行器SyncExecutor,完成java class到数据库的同步工作 * init初始化参数列表说明: * Connection masterConnection:主库连接对象 * Set tenantDbNames:租户库名字的Set * List> tableClasses:输入的java class模板类 * Map, String> clazz2ColumnTypeRuleMap:java属性类型到mysql字段类型的映射map,内置提供DefaultRule.CLAZZ_2_COLUMN_TYPE_RULE_MAP,可扩展 * 同步执行器SyncExecutor * 作用:配合比对处理器CompareProcessor完成java class到数据库的同步工作 * init初始化参数列表说明: * Map tenantConnectionMap:租户库名映射Connection连接对象的Map * 导出处理器ExportProcessor * 作用:数据库表到java class的导出功能 * init初始化参数列表说明: * List exportTableList:需导出的数据库表名称list * String savePath:导出的java class文件保存路径 * Connection originConnection:表所在库的数据源连接Connection对象 * String originDbName:表所在库的数据库名字 * Map> dataType2ClazzRuleMap:mysql数据类型到java属性类型的映射map,内置提供DefaultRule.DATA_TYPE_2_CLAZZ_RULE_MAP,可扩展 ### 6、代码示例 参见@org.class2table.App ```java package org.class2table; import org.class2table.core.dictionary.DefaultRule; import org.class2table.core.util.DataSourceUtil; import org.class2table.export.ExportProcessor; import org.class2table.sync.CompareProcessor; import org.class2table.sync.CompareResultsUtil; import org.class2table.sync.SyncExecutor; import org.class2table.sync.bean.CompareResult; import org.class2table.z_running_data.DefaultSyncData; import org.class2table.z_running_data.DefaultExportData; import org.junit.Test; import java.util.List; public class App { @Test public void testSync() { CompareProcessor.init( DefaultSyncData.masterConnection, DefaultSyncData.tenantConnectionMap.keySet(), DefaultSyncData.inputClazz, DefaultRule.CLAZZ_2_COLUMN_TYPE_RULE_MAP ); List compareResults = CompareProcessor.compare(); CompareResultsUtil.printCompareResults(compareResults); SyncExecutor.init(DefaultSyncData.tenantConnectionMap); SyncExecutor.exeSync(compareResults); DataSourceUtil.release(); } @Test public void testExport() { ExportProcessor.init( DefaultExportData.exportTableList, DefaultExportData.savePath, DefaultExportData.exportConnection, DefaultExportData.dbName, DefaultRule.DATA_TYPE_2_CLAZZ_RULE_MAP ); ExportProcessor.export(); DataSourceUtil.release(); } } ``` ## 四、建议 * 构建数据源建议使用@org.class2table.core.util.DataSourceUtil工具。使用@org.class2table.core.util.DataSourceUtil工具构建的全部数据源,可以在程序执行完毕后统一使用@org.class2table.core.util.DataSourceUtil.release()方法释放资源 ## 五、团队 * @ZmyCoder