# code-generator **Repository Path**: liuyandeng/code-generator ## Basic Information - **Project Name**: code-generator - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-15 - **Last Updated**: 2025-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 代码生成器, - 工具地址:https://mirrentools.org - github: https://github.com/MirrenTools/screw-driver - 码云: https://gitee.com/mirren/screw-driver - 使用文档: http://mirren.gitee.io/screw-driver-docs/ ## [核心类介绍](https://mirren.gitee.io/screw-driver-docs/start/core-class-intro.html) - **SdBean** 类用来描述一个实体信息,你可以用它来描述一张数据库表(主要)或一个实体类,该类对应的模板数据为 SdClassContent - **SdColumn** 用来描述一个类或表的字段,该类中主要有两种属性:类属性与表属性,类属性如果不定义或为空时就会自动将表属性转换为类属性,该类对应的模板数据为 SdColumn - **SdRelational**用于描述属性的关系共有4种属性:OneToOne, OneToMany, ManyToOne, ManyToMany,该类对应的模板数据为 SdRelationalContent - **SdTemplate** 用于设置生成模板,比如你想生成3个文件就需要设置3个SdTemplate,该类对应的模板数据为 SdTemplateContent - **SdDatabaseOptions** 为连接数据库的配置信息,该类对应的模板数据为 SdDatabaseOptions - **ScrewDriverOptions** 为核心工具的配置信息,在org.mirrentools.sd.options.def中已经创建了不同数据库的默认配置,带有SdDatabaseOptions构造参数的会自动判断不同数据库类型并初始化不同数据库类型的配置 - **ScrewDriverDbUtil** 是数据库的操作工具,可用操作数据库表相关操作 实例化方法 通过静态方法 instance获取实例,instance接收一个SdDatabaseOptions参数 - **ScrewDriver** 抽象类是本工具的核心, 用于生成代码与数据库操作 实例化方法 通过静态方法 instance获取实例,instance接收一个ScrewDriverOptions参数 ## [模板数据说明](https://mirren.gitee.io/screw-driver-docs/start/template-attr.html#sdrendercontent-%E6%A8%A1%E6%9D%BF%E6%95%B0%E6%8D%AE) - **SdRenderContent** 是模板数据的上下文,上下文的结构为 ``` SdRenderContent 名称为: content ┣━ SdClassContent (实体类描述属性)名称为: content ┣━ SdDatabaseOptions(数据库配置信息)名称为: dbOptions ┣━ Map(模板渲染中需要用到哪些模板内容)名称为: items ┗━ Map(拓展属性)名称为: extensions 示例: content.content.pascalName 等于获取模板数据上下文的实体类描述信息的表的名字帕斯卡命名 ``` - **SdClassContent** 实体类模板属性,名称为content - **SdColumn** 实体类的列属性 - **SdRelationalContent** 关系属性 - **SdDatabaseOptions** 数据库连接信息 - **SdTemplateContent** 模板属性 - **SdTemplateAttribute** 模板属性值 # 拓展与自定义 ## 目录结构 ```agsl screw-driver ┣━ screw-driver-docs 工具的使用帮助文档,使用vuepress编写(https://www.vuepress.cn/) ┣━ src/main/resources/SdTemplates 为模板目录,模板通常不会被直接使用,因为当需要该目录的模板时就会copy模板到根目录的SdTemplates文件夹中,如果不存在就创建 ┗━ src/main/java/org/mirrentools/sd/ 代码,基于java1.6编写,maven管理 ┣━ common [包]一些通用的工具 ┣━ constant [包]一些常量 ┣━ converter [包]转换器的接口与实现,分别为接口 > 抽象类(SdAbstract) > 基础实现(SdBasic) > 具体实现(impl包) ┣━ enums [包]一些枚举类 ┣━ impl [包]核心工具的基础实现 ┣━ models [包]工具的实体类其中db包中update用于创建或修改数据库表信息,query用于查询数据库表信息 ┣━ options [包]一些配置信息,其中def包为不同数据库的默认配置 ┣━ ScrewDriver (类)核心接口 ┣━ ScrewDriverCode (类)生成代码的接口 ┣━ ScrewDriverDbUtil (类)数据库相关操作工具 ┣━ ScrewDriverException (类)异常类 ┣━ ScrewDriverProject (类)创建项目的接口 ┣━ ScrewDriverSQL (类)创建或读取操作数据库的接口 ┣━ ScrewDriverTemplateEngine (类)模板渲染引擎(生成文件)的接口 ┗━ SdType (类)自适应数据类型 ``` ## 数据库支持 如果数据库相关操作不兼容,你可以继承ScrewDriverDbUtil接口的实现或converter包中的实现,并重写不兼容的方法后设置 ScrewDriverOptions 为你重写后的实现。 如果你想新增其他数据库支持,大楷你需要做这些操作 - 1.在org.mirrentools.sd.impl.dbutil包中创建ScrewDriverDbUtil的实现类,可继承SdAbstractDbUtil抽象类,重写抽象类不兼容的方法,可以参考同级实现,推荐命名规则为SdDbUtil新数据库名Impl - 2.在org.mirrentools.sd.converter.impl中创建新数据库名相同的包名,并实现converter中的几个转换器,可以参考同级实现,推荐命名SdXxxConverter新数据库名称Impl - 3.在org.mirrentools.sd.options.def中创建新数据库配置文件,并在ScrewDriverOptions的init方法中判断配置并初始化新数据库配置,可以参考同级实现,推荐命名规则为ScrewDriver新数据库名Options - 4.在org.mirrentools.sd.constant中添加新数据库的常量类 - 5.在org.mirrentools.sd.enums.SdTypeMode枚举类中添加新数据库类型,并在 SdType 类中添加新数据库词典以及对应的数据类型 ## 自定义模板引擎 软件目前提供了FreeMarker与MVEL开箱即用的模板引擎,如果这两个不满足或需要自定义模板, 你可以继承org.mirrentools.sd.ScrewDriverTemplateEngine抽象类并实现render方法, 具体实现可以参考org.mirrentools.sd.impl.ScrewDriverTemplateFreeMarkerImpl 或 ScrewDriverTemplateMvelImpl。 启用自定义模板渲染引擎需要设置 ScrewDriverOptions 的templateEngine属性,既调用setTemplateEngine(你的实现类) ## 命名规范 如果采用一表一生成方式,就照成代码太臃肿,用处不多的表不得不生成一套CRUD,需要把接口方法改造成专有性 产品的方法命名规则,动作(query/add/delete...)+表名+类型[view/disp/list...]+后缀(.do/.ajax), 比如:```/queryT21_rule_innerList.ajax/queryT21_rule_innerListView.do```