0.引言
照着数据库里的建表语句一个个去写对数据表的操作的java语句时是很烦的,而且很容易出错,为什么不用新的的方法来实现这些功能呢。于是就想到了用shell语句来完成这些任务,效果见下面部分。本次的实现仅仅是使用一条条语句来实现这种功能,下一步是实现用一个shell脚本来自动化实现这些功能。//TODO1.根据sql建表语句创建*.java文件所需语句;
1.sql语句test.sql
CREATE TABLE IF NOT EXISTS `user_details` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` 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,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10001 ;
2.通过awk命令从sql语句中提取出带类型的字段;
awk -F'[` (]' '{print $6" "$4}' test.sql > testWithType.sqlint user_id
varchar user_name
varchar first_name_str
varchar last_name_str
varchar gender
varchar password
tinyint status
3.通过awk语句将变量分隔开来并使其后面的单词首字母大写
awk -F'_' '{printf $1;for(i=2;i<=NF;i++)printf toupper(substr($i,0,1))substr($i,2);printf "\n"}' testWithType.sql > testWithType1.javaint userId
varchar userName
varchar firstNameStr
varchar lastNameStr
varchar gender
varchar password
tinyint status
4.通过sed命令将上述类型和变量替换为java中的语句;
sed 's/varchar/String/g' testWithType1.java | sed 's/tinyint/int/g' | awk '{printf "private " $1 " " $2 ";\n"}'private int userId;
private String userName;
private String firstNameStr;
private String lastNameStr;
private String gender;
private String password;
private int status;
2.根据sql语句提取的字段和转换的java字段生成yaml文件所需要的语句;
1.sql语句 test.sql
CREATE TABLE IF NOT EXISTS `user_details` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` 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,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10001 ;
2.提取目标字段
awk -F'[` (]' '{print $4" "}' test.sql > part1user_id
user_name
first_name_str
last_name_str
gender
password
status
3.转换为驼峰命名方法,外加用来连接的冒号
awk -F'[` (]' '{print $4}' test.sql |awk -F'_' '{printf " " $1;for(i=2;i<=NF;i++)printf toupper(substr($i,0,1))substr($i,2);printf "\n"}' > part2
userId
userName
firstNameStr
lastNameStr
gender
password
status
4.连接组成.yaml文件的两部分
paste -d':' part1 part2user_id : userId
user_name : userName
first_name_str : firstNameStr
last_name_str : lastNameStr
gender : gender
password : password
status : status