使用shell脚本生成*Db.java、*.thrift或*.yaml文件语句

      • 前言
      • sql建表语句文件createTablesql
      • sqlToDbsh将createTablesql转换为Dbjava所需语句
      • sqlToThriftsh将createTablesql转换为thrift所需语句
      • sqlToYamlsh将createTablesql转换为yaml所需语句
      • 后记

1.前言

照着数据库里的建表语句一个个去写对数据表的操作的java语句时是很烦的,而且很容易出错,为什么不用新的的方法来实现这些功能呢。于是就想到了用shell语句来完成这些任务,效果见下面部分。前面博客文章介绍了使用shell命令生成Db.java、.thrift或*.yaml文件所需语句,但使用起来并不是那么顺手,还需一条条执行,很繁琐,于是想直接将上述命令生成一个shell脚本,执行时只需传入一个sql建表语句的文件即可,大大减少了工作量。

2.sql建表语句文件createTable.sql

`user_id` int(11) NOT NULL AUTO_INCREMENT, 
`user_name_chinese` varchar(255) DEFAULT NULL, 
`user_name_pinyin` varchar(255) DEFAULT NULL, 
`first_name_str` varchar(50) DEFAULT NULL, 
`last_name_str` varchar(50) DEFAULT NULL, 
`gender` varchar(10) DEFAULT NULL, 
`password` varchar(50) DEFAULT NULL, 
`status` tinyint(10) DEFAULT NULL, 

3.sqlToDb.sh,将createTable.sql转换为*Db.java所需语句

#!/bin/zsh
#将sql建表语句转换为对应的Db.java
#
#使用方法
#./sqlToDb.sh fileName
#
#提取类型和字段
awk -F'[` (]' '{print $6" "$4}' "$1" > temp
#转换为首字母大写
awk -F'_'  '{printf $1;for(i=2;i<=NF;i++)printf toupper(substr($i,0,1))substr($i,2);printf "\n"}' temp > temp1
#替换sql的数据类型为java的数据类型
sed 's/varchar/String/g' temp1 | sed 's/tinyint/int/g' | sed 's/bigint/long/g' > temp
#生成最终的DB.java语句
awk '{printf "private " $1 " " $2 ";\n"}' temp
#删除临时文件
rm -f temp temp1

sqlToDb.sh

4.sqlToThrift.sh,将createTable.sql转换为*.thrift所需语句

#!/bin/zsh
#将sql建表语句转换为对应的*.thrift文件
#
#使用方法
#./sqlToThrift.sh fileName
#
#提取类型和字段
awk -F'[` (]' '{print $6" "$4}' "$1" > temp
#转换为首字母大写
awk -F'_'  '{printf $1;for(i=2;i<=NF;i++)printf toupper(substr($i,0,1))substr($i,2);printf "\n"}' temp > temp1
#替换sql的数据类型为thrift的数据类型
sed 's/varchar/string/g' temp1 | sed 's/tinyint/byte/g' | sed 's/smallint/i16/g' | sed 's/bigint/i64/g' | sed 's/int/i32/g' > temp
#生成最终的.thrift语句
awk '{printf NR ":" $1 " " $2 ";\n"}' temp
#删除临时文件
rm -f temp temp1

sqlToThrift.sh

5.sqlToYaml.sh,将createTable.sql转换为*.yaml所需语句

#!/bin/zsh
#将sql建表语句转换为对应的*.yaml文件
#
#使用方法
#./sqlToYaml.sh fileName
#
#提取第一部分字段
awk -F'[` (]' '{print $4" "}' "$1" > part1
#提取第二部分并转换为驼峰命名
awk -F'_'  '{printf " " $1;for(i=2;i<=NF;i++)printf toupper(substr($i,0,1))substr($i,2);printf "\n"}' part1 > part2
#合并part1 part2为最终的语句
paste -d':' part1 part2
#删除临时文件
rm -f part1 part2

sqlToYaml.sh

6.后记

篇幅所限,本文展示的建表语句只有几条,真正的实际环境中可能一张表的建表语句有几十行,用shell脚本直接去生成代码要方便的多,而且几乎不会出错,极大地提高了写码效率!

你可能感兴趣的:(Purity,as,an,artist,learning)