使用shell腳本生成*Db.java、*.thrift或*.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腳本直接去生成代碼要方便的多,而且幾乎不會出錯,極大地提高了寫碼效率!

發佈了342 篇原創文章 · 獲贊 78 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章