PDManer区分索引类型

本文介绍了如何针对PDmaner数据库建模工具的一个不足进行优化,即添加对全文索引的支持。通过修改脚本模板,实现自定义全文索引的DDL语句生成,并详细解析了模板代码中的JavaScript语法和内置方法,帮助不具备源码修改能力的用户解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

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) => ''

参考:
https://tech.meituan.com/2017/03/24/dot.html

我的示例模板 =========模板开始================== package com.sgcc.{{=it.module.name}}.domain; $blankline import javax.persistence.*; import java.io.Serializable; import java.util.Date; import lombok.Data; import org.hibernate.annotations.GenericGenerator; $blankline $blankline /** * 容量电价信息表 * @Column参数: 1. name: 指定映射到数据库中的字段名 2. unique: 是否唯一,默认为false 3. nullable: 是否允许为null,默认为true 5. insertable: 是否允许插入,默认为true 6. updatetable: 是否允许更新,默认为true 7. columnDefinition: 指定该属性映射到数据库中的实际类型,通常是自动判断。 * @author changjiakang */ @Data @Entity @Table(name="{{=it.entity.title}}") public class {{=it.func.camel(it.entity.title,true) }} implements Serializable{ {{~it.entity.fields:field:index}} /** {{=it.func.join(field.chnname,field.remark,';')}} */ {{? field.pk }} @Id @GeneratedValue(generator = "idGenerator") @GenericGenerator(name = "idGenerator", strategy = "uuid") @Column(name = "ID", nullable = false, length = 32) {{?}} @Column(name = "{{=field.name}}", nullable = true) private {{=field.type}} {{=it.func.camel(field.name,false)}}; {{~}} } $blankline $blankline =================================================== import java.io.Serializable; import java.math.BigDecimal; import lombok.Data; /** * 容量电价信息Vo * @author changjiakang */ @Data public class {{=it.func.camel(it.entity.title,true) }}Vo implements Serializable { {{~it.entity.fields:field:index}} /** {{=it.func.join(field.chnname,field.remark,';')}} */ private {{=field.type}} {{=it.func.camel(field.name,false)}}; {{~}} } =========模板结束================== 四.重命名数据类型,生成Po Vo如果字段类型为空,需要设置所有空字段对应的数据类型 五.生成po vo 六.数据库新加的表需要重新导入
### PDManER 支持的数据库设计基本数据类型 PDManER作为一款强大的数据库建模工具,支持多种常见的关系型数据库系统以及一些特定的大数据分析平台。对于不同类型数据库,所支持的数据类型会有所不同。 #### MySQL 数据库中的基本数据类型 - **数值类型**: TINYINT, SMALLINT, MEDIUMINT, INT 或 INTEGER, BIGINT, FLOAT, DOUBLE, DECIMAL[^1] - **日期时间类型**: DATE, TIME, DATETIME, TIMESTAMP, YEAR - **字符串类型**: CHAR, VARCHAR, BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT - **枚举和集合类型**: ENUM, SET #### PostgreSQL (含 PostGIS) 中的基本数据类型 - **数值类型**: smallint, integer, bigint, decimal, numeric, real, double precision, serial, bigserial - **字符类型**: character varying(n), varchar(n), text, char(n) - **几何空间类型**(通过PostGIS扩展): geometry, geography, raster - **特殊类型**: UUID, JSON, XML, tsvector用于全文检索等[^2] #### Oracle 数据库中的基本数据类型 - **数字类型**: NUMBER(p,s) - **日期时间戳类型**: DATE, TIMESTAMP[(fractional_seconds_precision)], INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH - **大对象类型**: CLOB(Character Large Object), NCLOB(National Character Large Object), BLOB(Binary Large Object), BFILE(Binary File) #### SQL Server 数据库中的基本数据类型 - **精确数值类型**: bit, tinyint, smallint, int, bigint, decimal, numeric - **近似数值类型**: float, real - **货币类型**: money, smallmoney - **日期时间和间隔类型**: date, time, smalldatetime, datetime, datetime2, datetimeoffset - **字符串类型**: char, nchar, varchar,nvarchar,text,ntext - **二进制数据类型**: binary, varbinary,image #### 达梦(DM) 和 GuassDB 等国产数据库的支持情况 这些国产数据库通常也会遵循标准SQL规范来定义其基础数据类型,并在此基础上提供额外的功能特性或优化过的实现方式。具体细节可能会依据版本有所变化,但总体上与国际主流产品保持兼容性[^3]。 为了确保最佳实践,在使用PDManER创建模型时应参照目标数据库的具体文档以获取最准确的信息关于可用的数据类型及其适用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值