不知道各位有没有自己经常用的工具呢,相比肯定是有的。这里说的工具是开发中使用的工具,比如我们项目中会用到PD来查看数据字典,但是还是感觉不方便,第一是软件体积大,打开慢,查找也不方便。
如果我说可以在web页面上看到你需要的数据字典,数据结构,你会不会感兴趣呢?现在呢,我作为抛砖引玉介绍一款工具能够在web上浏览数据表结构的工具DBNote。先来看看功能示意图:
首先你需要配置需要连接的数据库,目前支持MySQL,SQL Server(当然该项目是开源的你可以在此基础之上再添加对应的数据库即可),选择数据库类型,是否启用,然后配置好你数据库连接字符串。就这么多就够了,然后刷新页面,你就可以在左侧看到你需要的数据库和表了,点击其中一个表便会打开该表的设计详情,是不是很方便呢?
当然,如果你同时启用了MySQL和SQL Server。这都是不影响的,只要你有多少有效的配置都能全部拉出来哦。
说完了数据字典工具,那你是不是经常会使用自动代码生成工具呢?比如Java里面的mybatis阔以自动生成代码,C#中的T4模板也可以自动生成代码,这里只是看个人的喜好或者说自己去实现一种自动生成代码的工具,你自己最了解,最放心使用,还有就是就个人经验来说,我不喜欢写T4模板里面的模板代码。这里介绍一个工具:CodeBuilder,是通过NVelocity作为模板进行生成的工具。具体要做的就是:
- 安装
你可以从这里下载二进制可执行文件包然后解压即可 - 配置数据源
双击CodeBuilder目录下codebuilder.exe文件运行应用程序, 然后在菜单栏中选择(工具->数据源配置),新增你需要的数据源,然后"确定" - 导入数据源中表与视图 在菜单栏中选择(文件->从数据源导出->选择指定数据库)然后等待几秒中将列出当前数据库中所有的表及视图
- 生成代码
a.选择全部或指定几个表及视图
b.选择要生成代码的程序语言(如c#/java/ruby/php/xml等)
c.设置代码的根命名空间(如:com.easytoolsoft.codebuilder)
d.设置表名前缀、代码作者、版本(这三个是可选设置)
e.选择一个或多个代码模板,自定义模板请参考制作代码模板
f.如果你想在生成代码时去掉表或视图名称前辍(你先必须在步聚d中设置好前辍名称)或想生成后的代码命名方式为驼峰式(Camel-Case)(如表名:easy_tools_soft 将变成 EasyToolsSoft), 这时你应该选中"是否忽略表前辍" 或 "是否使用驼峰式命名"
g.点击 "生成" 按钮执行代码生成,然后点击生成的文件可以进入的生成代码的目录
自己创建模板:
1.使用velocity语言创建代码模板文件
创建一个UTF-8编码格式的文本文件(如:example.txt),从TDO对象中读取模板中需要使用的内容
2.模板数据对象(TDO)
a.TDO属性
名称 | 类型 | 说明 |
---|---|---|
Name | string | 模板数据名称 |
Language | string | 程序设计语言名称 (如:csharp/java/ruby/php/xml etc.) |
Database | string | 数据库名称 (如:mysql5/sqlserver2000/2005/2008/oralce etc.) |
Package | string | 命名空间或包名 (如:com.easytoolsoft) |
TablePrefix | string | 表名前辍(如:cb_table表的前辍为"cb") |
Author | string | 代码作者 |
Version | string | 代码版本 |
TemplateEngine | string | 模板引擎名称,默认为"nvelocity" |
TemplateName | string | 模板显示名称(如:example.java.nv 模板文件的显示名为"example") |
Prefix | string | 模板前辍 |
Suffix | string | 模板后辍 |
Encoding | string | 生成的代码文件字符集编码(如:utf8/utf7/ascii etc.) |
TemplateFileName | string | 模板对应的文件名(如:example.java.nv) |
CodeFileName | string | 生成的代码文件名(如:Example.java) |
IsOmitTablePrefix | bool | 生成代码时是否忽略表前辍(如:cb_table表生成代码时将去掉"cb") |
IsCamelCaseName | bool | 是否驼峰化(Camel-Case)命名(如:cb_table -> CbTable) |
ModelObject | object | 模型对象,对应一个数据库的表或视图.相关属性请参考:b.ModelObject属性 |
b.ModelObject属性
名称 | 类型 | 说明 |
---|---|---|
Id | string | 对应数据库中的表或视图表(如:cb_table) |
DisplayName | string | 显示名,默认为属性"Name"的值 |
Name | string | 表或视图首字母大写驼峰式(Camel-Case)名.(如:cb_table -> CbTable) |
OriginalName | string | 表或视图在数据库中的名称(如:cb_table) |
Comment | string | 表或视图在数据库中的注释 |
MetaTypeName | string | 当前ModelObject元数据类型名:table |
Columns | Dictionary[string,Column] | 表或视图中所有列集合,相关属性请参考:c.Column Proprities |
PrimaryKeys | Dictionary[string,Column] | 表中所有主键列集合 |
Keys | Dictionary[string,Column] | 表中所有非主键列集合 |
c.Column属性
名称 | 类型 | 说明 |
---|---|---|
Id | string | 对应数据库中表或视图的列名 (如:first_name) |
DisplayName | string | 列显示名,默认为属性"Name"的值 |
Name | string | 列名,首字母大写驼峰式(Camel-Case)名(如:first_name -> FirstName) |
LowerCamelName | string | 列名,首字母小写驼峰式(Camel-Case)名(如:first_name -> firstName) |
OriginalName | string | 原始列名 (如:first_name) |
Comment | string | 列说明 |
DataType | string | 列在数据库中的数据类型(如: mysql int/bigint/varchar etc.) |
DefaultValue | string | 列在数据库中的默认值 |
LanguageType | string | 列在对应的程序设计语言(如:c#/java/ruby etc.)中的数据类型(如: C# int/long/string etc.) |
LanguageDefaultValue | string | 列在对应的程序设计语言(如:c#/java/ruby etc.)中的默认值 |
Length | int | 列在数据库中数据类型对应的长度 |
Ordinal | int | 列在数据库中表或视图的顺序 |
IsAutoIncremented | bool | 列是否为自增列 |
IsNullable | bool | 列是否可为空 |
IsComputed | bool | 列是否为计算列 |
HasDefault | bool | 列是否有默认值 |
MetaTypeName | string | 元数据类型名,值为"column" |
3.添加模板 把创建好的代码模板文件加入到CodeBuilder的模板列表中
有了以上两个得力的工具,那么肯定少不了自己的框架了啊,这里推荐一款轻量级的框架:FreshCommonUtilityNet,该框架已经发布到Nuget上,各位只需要在使用的时候进行Nuget安装即可。
首先看下里面的内容,你就知道它有多么实用了,包含了你日常开发中遇到几乎80%的基础返回,已经一个轻量级的Dapper组件扩展。
使用起来也是异常的方便简介,以两个方法的使用为例:
/// <summary>
/// list to datatable slowly
/// </summary>
public void ToDataTableSlowlyTest()
{
var filePath = "..\\..\\TestUseFile\\TestExportLessData.xlsx";
var excelHelperTwo = new NpoiHelper(filePath);
string message;
var tableTwo = excelHelperTwo.ExcelToDataTable("sheet1", true, out message);
List<PersonGattScheduleInfoDto> personGantScheduleInfoDtosList =
DataTypeConvertHelper.ToList<PersonGattScheduleInfoDto>(tableTwo);
var storgeTable = DataTypeConvertHelper.ToDataTable(personGantScheduleInfoDtosList);
tableTwo.Rows.Count.IsEqualTo(storgeTable.Rows.Count);
var i = 5;
var j = 4;
tableTwo.Rows[i][j].IsEqualTo(storgeTable.Rows[i][j]);
}
/// <summary>
/// list to datatable fast
/// </summary>
public void ToDataTableTest()
{
var filePath = "..\\..\\TestUseFile\\TestExport.xlsx";
var excelHelperTwo = new NpoiHelper(filePath);
string message;
var tableTwo = excelHelperTwo.ExcelToDataTable(null, true, out message);
List<PersonGattScheduleInfoDto> personGantScheduleInfoDtosList =
DataTypeConvertHelper.ToList<PersonGattScheduleInfoDto>(tableTwo);
var storgeTable = DataTypeConvertHelper.ToDataTable(personGantScheduleInfoDtosList);
tableTwo.Rows.Count.IsEqualTo(storgeTable.Rows.Count);
var i = 5;
var j = 4;
tableTwo.Rows[i][j].IsEqualTo(storgeTable.Rows[i][j]);
}
这些,都是开源的,你可以随意使用。
有了这三个,相信你的开发速度会大大提升了。然后你会说,我开发完了,如何发布我的代码呢,别担心,Fresh君也给你推荐一款自动发布工具天枰座(Libra),不过这个我只提供代码地址了,如果需要的小伙伴可以联系我。1174632606 秋秋号,微信同号。
差点忘记了,还没有贴出开源地址呢:
DBNote:https://github.com/FreshManIT/DBNote
CodeBuilder:https://github.com/FreshManIT/CodeBuilder
FreshCommonUtilityNet:https://github.com/Yinghuochongxiaoq/FreshCommonUtilityNet