python作为一个简洁的语言,在作为工具、监控以及运维等方面的使用上的确令人耳目一新。于是尝试使用python做一个简陋的javaBean生成工具,目前很多人喜欢在数据库表命名的时候采用underline的方式如"xx_xx_table",而javabean的命名通常为camel方式,如"myBean"。下面看看python能做些什么。
首先需要连接到数据库,获取生成javabean对应数据库表的信息
import pymysql
conn = pymysql.connect(host=_host,user=_user,passwd=_pass,db=_sid,port=3306,charset='utf8')
cur = conn.cursor()
sql ='select * from '+ _tableName
cur.execute(sql)
desc = cur.description
从cur.description可以获取数据库表的字段名称以及类型,字段类型使用数字进行标注,以下是字段类型对照关系
1=>'tinyint',
2=>'smallint',
3=>'int',
4=>'float',
5=>'double',
7=>'timestamp',
8=>'bigint',
9=>'mediumint',
10=>'date',
11=>'time',
12=>'datetime',
13=>'year',
16=>'bit',
//252 is currently mapped to all text and blob types (MySQL 5.0.51a)
253=>'varchar',
254=>'char',
246=>'decimal'
有了以上的这些信息,剩下的事情就简单了。只需要把字段转成camel方式即可
def underline_to_camel(underline_format):
camel_format = ''
if isinstance(underline_format, str):
for _s_ in underline_format.split('_'):
camel_format += _s_.capitalize()
return camel_format
上面这个函数转出来的效果所有首字母大写。这个可以在循环里面单独处理,或者对已经生成的camel字符串处理即可
newCamel = camel[0].lower() + camel[1:]
拼装javabean。
for line in desc:
#根据mysql类型以及自己的需要对dateType进行转换
if line[1] in (1, 2, 3, 8, 9, 246):
dataType = 'int'
elif line[1] in (4, 5):
dataType = 'double'
else:
dataType = 'String'
#转换camel写法,并拼装javabean
beanName = underline_to_camel(line[0], 'V')
funcName = underline_to_camel(line[0], 'F')
lineStr = " /** \n"
lineStr += " * 字段" + beanName + "\n"
lineStr += " */\n"
lineStr += " private " + dataType + " " + beanName + ";\n"
lineStr += " public " + dataType + " get" + funcName + "() { return " + beanName + "; }\n"
lineStr += " public void set" + funcName + "(" + dataType + " " + beanName + ") { this." + beanName + " = " + beanName + "; }\n"
beanList.append(lineStr)
拼装完成后,写文件,关闭数据库连接就完成了这个乞丐版的javabean生成工具了。依次类推还可以生成DAO,XML