引言
最近,自己开始学习Java后端开发,作为小白,在导师的指导下,一步步开始学习,从如何搭建springboot项目开始,连接上 MySQL 数据库之后,再创建和编写Entity、Controller、Service、Mapper程序。然而,面对枯燥的学习过程,未免心生惰性,那么,这时候,有些可以偷的懒一定要偷,省下来的时间去泡一杯茶、刷个视频、打一把游戏~~~~怎么偷懒呢?待我慢慢道来~~
情况分析:
经过两次 Sping Boot 项目的搭建经验,我发现在每一次项目主要功能实现代码开始编写之前,必须要先创建实体类 Entity 这个文件夹,对应数据库中的各种表在 Entity 中创建各类实体,比如,商品实体类 Product、订单实体类 Order,大概的样子如图:
问题描述:
每次都要慢慢的看着 mysql 文件输入一堆的字段名,有的 Table 中的字段太多了,还害怕输错;其次,很头痛的是还要去对应数据类型,对于新手而言,可能第一次见到 MySQL 中的 decimal、datetime等等数据类型,都不知道它们在 Java 中的对应的数据类型是什么,还需要去找度娘进行科普。你是不是也有这样的烦恼?那么,这篇文章请你继续看完。
动手操作:
你有没有发现?这些实体的编写是有规律可循的,都是这样:
既然有规律,那偷懒的机会不就来了, “人生苦短,快用 Python ”,我们来浅写一个 Python 程序来帮帮忙~~~~
1、首先,去找度娘拿到数据库类型与 Java 数据类型的对应关系映射表(直达链接获取),大概样子如下图。
2、整理好对应的数值类型对应字典:
type_dict = {'int': 'Integer', 'varchar': 'String', 'char': 'String', 'nchar': 'String',\
'nvarchar': 'String', 'text': 'String', 'ntext': 'String', 'tinyint': 'Integer',\
'smallint': 'Integer', 'bit': 'Boolean', 'bigint': 'Long', 'float': 'Double',\
'decimal': 'BigDecimal', 'money': 'BigDecimal', 'smallmoney': 'BigDecimal',\
'numeric': 'BigDecimal', 'real': 'Float', 'uniqueidentifier': 'String',\
'smalldatetime': 'Timestamp', 'datetime': 'Date', 'timestamp': 'byte[]', 'binary': 'byte[]',\
'varbinary': 'byte[]', 'image': 'byte[]', 'sql_variant': 'String', 'double':'Double'}
3、创建 change.py 文件来编写程序的实现方法,创建 sql.txt 文件来存放 MySQL 的语句;再创建一个空的 result.txt 文件用来接收转换结果。
4、sql.txt 文件存放从数据库中复制过来的 sql 语句,保持一个字段一行:
5、编辑保存好 sql.txt 文件之后,关闭文件,再双击已经 “施过魔法”(编写好转换方法) 的 change.py 程序,即可1秒得到对应的 Spring Boot 实体类~~~有图有真相,看图:
6、复制粘贴!!!把 result.txt 的内容粘贴到对应的实体类文件中即可~~~
本文所介绍的功能,仅仅用了不到20行 Python 的代码,所以说,开发并不是难事,只要有心去做,就会有所收获。完整代码:
lines=open('sql.txt',encoding='utf-8').readlines()
res = ''
for i in range(len(lines)):
line = lines[i].strip().split(' ')
while '' in line:
line.remove('')
field = line[0].strip('`')
kind = type_dict[line[1].split('(')[0]]
spl = line[0].strip('`').split('_')
for j in range(len(spl)):
if j == 0:
variable = spl[0]
else:
variable += spl[j][0].upper() + spl[j][1:]
comment = lines[i].strip().split('comment')[1].replace('\'','').replace(',','').strip()
if i == 0:
res += f'\n\t/**\n\t* {comment}\n\t*/\n\t@TableId(value = "{field}", type = IdType.ASSIGN_ID)\n\tprivate {kind} {variable};'
elif variable == 'isDeleted':
res += f'\n\t@TableLogic\n\t/**\n\t* {comment}\n\t*/\n\t@TableField("{field}")\n\tprivate {kind} {variable};'
else:
res += f'\n\t/**\n\t* {comment}\n\t*/\n\t@TableField("{field}")\n\tprivate {kind} {variable};'
with open('result.txt', 'w', encoding='utf-8') as f:
f.write(res)
下期预告:
考虑到本文所说的功能是为 Java 开发者服务的,可能你的电脑上没有 Python 环境运行 .py 文件,下期将编写一个小的图形界面,并封装成 .exe 可执行文件。