目前只支持mysql,预期sqlx支持的数据库都会支持。
安装
cargo install --path .
执行生成命令
db-to-code d2c_config.toml
配置说明 d2c_config.toml
# 数据库连接
="mysql://user:xxx@0.0.0.0/db_name"
# 需要构建表过滤规则
="^y_"
# 或指定需要构建的表
# tables=[
# "yaf_users"
# ]
# 输出文件模板
# 可用变量
# 表名 {table.table_name} 模型名 {table.model_name} 是否复合主键 {table.multi_pk}
# 表字段名 {field_data[].field_name} 显示字段名 {field_data[].column_name}
# 是否是主键 {field_data[].is_pk} 是否NULL {field_data[].is_null}
# 字段类型 {field_data[].type_name} 通过以下 type_map 映射后的值
# 字段默认值 {field_data[].default} 通过以下 default_map 映射后的值
# 字段注释 {field_data[].comment} 可通过 {field_data[].comment|rmln} 显示为单行
="""
#[derive(sqlx::FromRow,sqlx_model::SqlxModel,Clone,Debug)]
#[sqlx_model(table_name="{table.table_name}")]
pub struct {table.model_name}Model \\{ {{ for field in field_data }}
{{ if field.comment }}/// {field.comment|rmln} {{ if field.default}} default: {field.default} {{ endif }}{{ endif }}
#[sqlx(default)]
#[sqlx(rename="{field.field_name}")]
pub {field.column_name}: {field.type_name},
{{ endfor }}}
"""
#{column_name}名转换规则: 参见规则列表
="lower_camel"
#{column_name}名前缀删除
=""
#{column_name}名后缀删除
=""
#{model_name}名转换规则: 参见规则列表
="camel"
#{model_name}名后缀删除
=""
#{model_name}名后缀删除
=""
#{table_name}名后缀删除
=""
#{table_name}名后缀删除
=""
# 是否每一个表合并成一个文件输出
=true
#文件存放名模板,为空时从标准输出,!!!注意!!!仅当 outfile_merge 为false时,才存在可用变量 {model_name} {table_name}
#outfile_name中{model_name}名转换规则: lower lower_camel kebab shouty_snake upper snake
#outfile_name="{model_name}Model.rs"
# 可用变量
# 通过 tpl_body 渲染得到的内容 {items[].render_data}
# 表字段名 {items[].table.table_name} 显示字段名 {items[].table.model_name}
# 字段数据,参考输出文件模板[tpl_body]的field_data变量 {items[].field_data.field_name ..等}
="""
use sqlx::FromRow;
use sqlx_model::SqlxModel;
{{ for item in items }}
// model : {item.table.model_name} [ {{ for field in item.field_data }} {field.field_name} {{endfor}}] {{endfor}}
{{ for item in items }}
{item.render_data}
{{endfor}}
"""
="camel"
#outfile_name中{model_name}名后缀删除
=""
#outfile_name中{model_name}名后缀删除
=""
#文件存在时是否覆盖
=true
#默认NULL转换为指定类型
="None"
#未设置默认值转换为指定类型
="None"
#是否使用类型转换,默认:true
=true
#默认字段类型,当type_map都不匹配时使用此类型
="String"
# 字段类型转换映射
[]#.1 为优先级.越大越优先
#输出类型=[正则表达式,符合一个即使用]
=["int\\(\\d+\\)"]
[]
=["tinyint\\(\\d+\\)","ENUM"]
[]
=["smallint\\(\\d+\\)"]
[]
=["bigint\\(\\d+\\)"]
[]
=["int\\(\\d+\\)\\s+unsigned"]
[]
=["tinyint\\(\\d+\\)\\s+unsigned"]
[]
=["smallint\\(\\d+\\)\\s+unsigned"]
[]
=["bigint\\(\\d+\\)\\s+unsigned"]
[]
=["float"]
[]
=["decimal"]
[]
=["decimal","double"]
#匹配默认值并修改为指定格式
[]#.1 为优先级.越大越优先
#正则表达式=转换输出结果
="$1"
[]
="$1"
[]
="\"$1\""
[]
="\"\""
名称转换规则列表 以下值用于 column_name_rule model_name_rule
lower 仅转为小写
upper 仅转为全部大写
snake 小写下划线
shouty_snake 大写下划线
shouty_kebab 大写中划线
kebab 中划线分割
upper_camel 转首字母大写
lower_camel 转驼峰