在線文檔:http://doc.yc-l.com/#/README
在線演示地址:http://yc.yc-l.com/#/login
源碼github:https://github.com/linbin524/yc.boilerplate
源碼gitee:https://gitee.com/linxuanming/yc.boilerplate
元磁之力框架技術群QQ:1060819005
視頻教程:
- 元磁之力框架開源初心和框架設計介紹(上): https://www.bilibili.com/video/BV1VM4y1G7hC/
- 元磁之力框架開源初心和框架設計介紹(下): https://www.bilibili.com/video/BV15h411s7w6/
- 元磁之力框架數據庫表和代碼生成使用教程實戰: https://www.bilibili.com/video/BV1oM4y137D5/
代碼生成和數據庫表生成
簡介
數據庫表生成和代碼生成是元磁之力框架為了快速開發而編寫的工具,可以實現前后端代碼生成,
滿足基礎的增刪改查基礎的功能實現。節省60%的開發工作量。
代碼生成模塊YC.CodeGenerate是獨立一個類庫,實現數據庫表生成邏輯和業務代碼生成邏輯,框架並沒有開發對應的界面化工具,主要考慮到在實際開發過程中,
各自需求變化多,采用單元測試模式,根據自己的需求微調代碼,實現數據庫表生成和代碼生成。
數據庫表生成介紹
數據庫表生成需要配置DefaultConfig.json 中的 DefaultMysqlConnectionString是 mysql 連接字符串,用於創建數據庫;
DefaultDbConnectionString 是將要被創建的數據庫連接字符串,用於生成對應的數據庫表時候的連接訪問請求;
根據配置對應的Entity 以及對應的表名和注釋,來進行映射。
舉例:審計日志Entity,標識[Table("SysAuditLog")],那么就會映射表名為SysAuditLog,表名標識[Display(Name = "審計日志")] 表名的注釋就為:審計日志
表字段根據當前實體屬性對應的數據類型來進行映射數據庫的類型,比如:屬性為[StringLength(300)] 類型,那邊自動映射數據庫表類型為varchar(300),
如果有[NotMapped] 標注的屬性,會自動跳過,不會對改屬性生成對應的數據表字段。
單元測試代碼
using (CodeGenerateDBService codeGenerateDBRepository = new CodeGenerateDBService())
{
string msg = "";
GenerateDbTableConfig config = new GenerateDbTableConfig();
config.GenerateDbTableEntityList = new List<string>();
config.GenerateDbTableEntityList.Add("SysOrganization");//要生成的表
config.GenerateDbTableEntityList.Add("SysAuditLog");
config.GenerateDbTableEntityList.Add("SysUserSysOrganization");
bool result = codeGenerateDBRepository.CreateTable(config,out msg, false);
Assert.IsTrue(result);
}
代碼生成介紹
代碼生成主要組成是如下:
- IAppservice業務接口代碼
- Appservice 業務代碼
- AddOrEditDto Dto實體代碼
- Vue 界面操作代碼(增刪改查都已經集成)
- OtherCode 主要包含:
1. 前端 main.js需要 api請求接口地址
2. 前端router目錄下index.js 需要的路由配置
3. 后端 AutoMapper 配置的Dto映射
代碼生成操作流程
- 配置代碼模板的路徑
- 配置代碼需要導出目錄
- wantToGenerateCodeTypeList 依照自己的喜好,選擇所有的代碼模板生成全量代碼,還是選擇單元模板生成指定的代碼。
- generateEntityList 配置指定要生成代碼的實體,如果為空,默認全量生成。
/// <summary>
/// 代碼生成器-生成對應代碼
/// </summary>
[TestMethod]
public void GenerateCodeTest()
{
#region 模板和生成代碼路徑配置
TemplateDto templateDto = new TemplateDto();
templateDto.AddOrEditDtoFilePath = System.AppContext.BaseDirectory + @"CodeTemplate\AddOrEditDtoTemplate.txt";
templateDto.EntityDtoFilePath = System.AppContext.BaseDirectory + @"CodeTemplate\EntityDtoTemplate.txt";
templateDto.ServiceFilePath = System.AppContext.BaseDirectory + @"CodeTemplate\AppServiceTemplate.txt";
templateDto.IServiceFilePath = System.AppContext.BaseDirectory + @"CodeTemplate\IAppServiceTemplate.txt";
templateDto.VueFilePath = System.AppContext.BaseDirectory + @"CodeTemplate\View\VueTemplate.txt";
templateDto.TreeServiceFilePath = System.AppContext.BaseDirectory + @"CodeTemplate\TreeAppServiceTemplate.txt";
templateDto.TreeIServiceFilePath = System.AppContext.BaseDirectory + @"CodeTemplate\TreeIAppServiceTemplate.txt";
templateDto.TreeVueFilePath = System.AppContext.BaseDirectory + @"CodeTemplate\View\TreeVueTemplate.txt";
templateDto.SaveDir = System.AppContext.BaseDirectory + "GenerateCode\\";//生成代碼保存位置
#endregion
#region 配置默認生成規格
List<GenerateCodeEnumType> wantToGenerateCodeTypeList = new List<GenerateCodeEnumType>();
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.DefaultAddOrEditDto);//新增編輯Dto
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.DefaultEntityDto);//實體Dto
bool isTree = true;
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.OtherCode);
if (isTree)
{
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.TreeAppService);
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.TreeIAppService);
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.TreeVuePage);
}
else
{
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.DefaultAppService);
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.DefaultIAppService);
wantToGenerateCodeTypeList.Add(GenerateCodeEnumType.DefaultVuePage);
}
#endregion
///樹形代碼完成后,注意修改vue界面
///1、手動修改分類 typeName那邊
//2、手動修改編輯 復選框內容父節點
//3、這里的節點 默認使用Label,父節點ParentId 兩個固定的字段名稱
//4、樹的根節點要為0
List<string> generateEntityList = new List<string>();
generateEntityList.Add("SysOrganization");
GenerateCodeConfig generateCodeConfig = new GenerateCodeConfig();
generateCodeConfig.Template = templateDto;
generateCodeConfig.WantToGenerateCodeTypeList = wantToGenerateCodeTypeList;
generateCodeConfig.GenerateEntityList = generateEntityList;
generateCodeConfig.IsTree = isTree;
GenerateCodeService generateCodeRepository = new GenerateCodeService(generateCodeConfig);
var result = generateCodeRepository.GenerateWork();
Assert.IsTrue(result.Success);
}
生成代碼如何使用
完成代碼生成后,依照對應的業務進行存放。
1. 將Appservice 代碼放到YC.ApplicationService目錄下。
2. 將前端代碼放到前端components目錄下。
3. 將OtherCode 生成的代碼依次放到前端main.js、router/index.js、后台的
YC.ApplicationService/MapConfig/MapConfig.cs 中。
4. 目錄菜單如果還沒有實現動態化,需要在home.vue 的菜單手動添加對應的目錄。
5. 修改后台業務代碼xxxAppservice,在分頁查詢方法手動調整自己的查詢參數。
