Python 让繁琐工作自动化
原因每次写完 DDL SQL 再手动对应的 POJOs,太繁琐了,为什么不写个脚本自动化下呢(还可以顺带检测下自己算法能力),说干就干,这就来了。
WARNING ⚠:别学我,IDEA 有 DDL 一键生成 POJOs 插件,我丫的是 VSCode 党 o( ̄┰ ̄*)ゞ
算法步骤
- 建立一个 POJO 字符串模板,可以直接填充包名、导入语句、类名、字段语句
- 解析 DDLSQL 语句,得到类名(table name)、字段名和类型(column name and type)
- 从 2 中的得到的字段名和类型,整理出来字段语句和导入语句
- 把包名、导入语句、类名、字段语句填充到 POJO 字符串模板中得到完整的 java class 字符串,return 、print 或 write to file
代码实现 - Python
python,粘贴即使用,真方便
"""
从 DDL SQL 生成 java POJO
- 列名即 java field 名,不做下划线、驼峰命名等转换
- 使用 Lombok 注解替换 setter/getter
"""
from typing import Dict, List
import re
MYSQL_DATATYPE_NUMBER = {
'TINYINT', 'SMALLINT', 'MEDIUMINT', 'INT', 'INTEGER', 'BIGINT', 'FLOAT', 'DOUBLE', 'DECIMAL'}
MYSQL_DATATYPE_DATE = {
'DATE', 'TIME', 'DATETIME', 'TIMESTAMP'}
MYSQL_DATATYPE_TEXT = {
'CHAR', 'VARCHAR', 'TINYBLOB', 'TINYTEXT', 'BLOB', 'TEXT', 'MEDIUMBLOB', 'MEDIUMTEXT', 'LONGBLOB', 'LONGTEXT'}
POJO_TEMPLAATE = """package {package};
{imports}
import lombok.Data;
@Data
public class {name} {
{
{fields}
}}"""
def __generate_pojo_text(package_name: str, class_name: str, columns: Dict[str,str]) -> str:
"""
生成 pojo 文本
"""
field_rows = []
import_rows = set()
field_template = "private {} {};"
for name, type in columns.items():
field_class = __sql_java_type_mapping(type)
if field_class == "BigDecimal":
import_rows.add("import java.math.BigDecimal")
elif "Local" in field_class:
import_rows.add("import java.time.{};".format