使用Python从数据库读取表生成JAVA实体类

import pymysql


#连接数据库
def generate_java_entity(table_name, class_name):
    connection = pymysql.connect(
        host='****',# 数据库host
        user='*****',# 数据库用户名
        password='****',# 数据库密码
        database='*****' # 数据库名称
    )

    try:
        with connection.cursor() as cursor:
            cursor.execute(f"DESCRIBE {table_name}")
            columns = cursor.fetchall()

        java_code = f"import lombok.Data;\n"
        java_code += f"import javax.persistence.*;\n"
        if any('datetime' in column[1] for column in columns):
            java_code += f"import java.util.Date;\n"
        if any('decimal' in column[1] for column in columns):
            java_code += f"import java.math.BigDecimal;\n"
        java_code += f"\n@Data\n@Entity\n@Table(name = \"{table_name}\")\n"
        java_code += f"public class {class_name} {{\n"

        for column in columns:
            column_name = column[0]
            column_type = column[1]
            java_type = get_java_type(column_type)

            if column[3] == 'PRI':
                java_code += f"    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n"

            java_code += f"    @Column(name = \"{column_name}\")\n"
            java_code += f"    private {java_type} {to_camel_case(column_name)};\n\n"

        java_code += "}"

        with open(f"{class_name}.java", "w") as file:
            file.write(java_code)

        print(f"{class_name}.java has been generated.")

    finally:
        connection.close()


def get_java_type(sql_type):
    if 'int' in sql_type:
        return 'Integer'
    elif 'varchar' in sql_type or 'text' in sql_type:
        return 'String'
    elif 'decimal' in sql_type:
        return 'BigDecimal'
    elif 'date' in sql_type or 'timestamp' in sql_type:
        return 'Date'
    elif 'datetime' in sql_type:
        return 'Date'
    elif 'bigint' in sql_type:
        return 'Long'
    elif 'text' in sql_type:
        return 'String'
    return 'String'


def to_camel_case(snake_str):
    components = snake_str.split('_')
    return components[0] + ''.join(x.title() for x in components[1:])

#这里输入要读取的表名称和要转化成的java的实体类名称
generate_java_entity('test_table', 'TestTable')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值