1. 程式人生 > >使用shell指令碼生成*Db.java、*.thrift或*.yaml檔案語句

使用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指令碼直接去生成程式碼要方便的多,而且幾乎不會出錯,極大地提高了寫碼效率!