背景
PDmaner是一个非常强大的数据库建模工具,但是还有一些细节功能还是做的不到位,比如对索引类型的不区分。比如我需要建立全文索引,工具中没地方选择,导出来的ddl语句全部是普通索引。
解决
有改源码能力的,应该加一个类型区分应该也很方便,但是对于没有修改源码能力的人来说也是有比较方便的解决方案的。发现是通过脚本模板的方式来生成DDL语句,所以就考虑通过修改脚本模板来解决。
步骤如下:
1.规范:比如全文索引的命名规范idx_search开头
2.修改模板脚本
{{~ it.entity.indexes:index}}
{{? index.defKey != "PRIMARY"}}
CREATE {{? index.unique}}UNIQUE {{?}}{{? index.defKey.startsWith("idx_search")}}FULLTEXT{{?}} INDEX {{=index.defKey}} ON {{=it.entity.defKey}}({{ fieldsKeys = index.fields.map(function(field){return field.fieldDefKey}) ; }}{{=it.func.join(...fieldsKeys,',')}}) {{? index.defKey.startsWith("idx_search")}} with parser ngram{{?}};
{{?}}
{{~}}
这里还解决了 每次从数据库反序列化的时候默认生成PRIMARY索引的问题
模板代码解释:
项目 | JavaScript语法 | 对应语法 | 案例 |
输出变量 | = | {{=变量名} | {{=it.name}} |
条件判断 | if | {{? 条件表达式}} | {{? i > 3}} |
条件转折 | else/else if | {{??}}/{{?? 条件表达式}} | {{?? i ==2}} |
循环 | for | {{~ 循环变量}} | {{~ it.arr:item}}...{{~}} |
执行方法 | funcName() | {{= funcName() }} | {{= it.sayHello() }} |
全局方法:可以通过it.func.方法名使用
方法名 | 方法功能 | 参数介绍 | 案例 |
camel | 下划线转驼峰 | 参数1:需要转化的字符串,参数2:首字母是否需要大写 | ('USER_NAME', true) => 'userName' |
underline | 驼峰转下划线 | 参数1:需要转化的字符串,参数2:是否全大写 | ('userName', true) => 'USER_NAME' |
upperCase | 全大写 | 参数1:需要转化的字符串 | ('userName') => 'USERNAME' |
lowerCase | 全小写 | 参数1:需要转化的字符串 | ('USERNAME') => 'username' |
join | 多个字符串拼接 | 不限参数,最后一个参数为拼接符 | ('user','name','/') => 'user/name' |
intersect | 两个数组交集 | 参数1:数组1,参数2:数组2 | (['1', '2'], ['1', '2', '3']) => ['1', '2'] |
union | 两个数组并集 | 参数1:数组1,参数2:数组2 | (['1', '2'], ['1', '2', '3']) => ['1', '2', '3'] |
minus | 两个数组差集 | 参数1:数组1,参数2:数组2;(数组1比数组2多出的数据) | (['1', '2', '3'], ['1', '2']) => ['3'] |
indexRebuildDDL | 获取重建索引DDL | - | (baseInfo, newIndexes, fullFields, type) => '' |
dropDDL | 获取删除表/视图DDL | - | (data, type) => '' |
createDDL | 获取创建表/视图DDL | - | (data, type) => '' |