'2025/03/25'에 해당되는 글 1건

  1. 2025.03.25 make entity java source with maria db

# generate.py BEGIN -------------

import mysql.connector
from jinja2 import Environment, FileSystemLoader

# MariaDB 접속 설정
def get_db_connection():
    return mysql.connector.connect(
        host="",    # MariaDB 호스트
        user="",         # MariaDB 사용자
        password="", # MariaDB 비밀번호
        database=""    # 사용할 데이터베이스
    )


# 테이블 정보 가져오기
def get_table_comment(table_name):
    connection = get_db_connection()
    cursor = connection.cursor()
    cursor.execute(f"""SELECT 
                        TABLE_COMMENT
                    FROM 
                        INFORMATION_SCHEMA.TABLES
                    WHERE 
                        TABLE_NAME = '{table_name}' 
                    """)

    table_comment = cursor.fetchone()[0]
    cursor.close()
    connection.close()
    return table_comment


# 테이블 컬럼 정보 가져오기
def get_table_columns(table_name):
    connection = get_db_connection()
    cursor = connection.cursor()
    cursor.execute(f"""SELECT
                    column_name,
                    column_type,
                    column_comment
                FROM
                    information_schema.columns
                where 1=1 
                and table_name = '{table_name}' """)

    columns = cursor.fetchall()
    cursor.close()
    connection.close()
    return columns



# Jinja2 템플릿을 사용하여 Java 클래스를 생성
def generate_java_code(table_comment, columns, class_name):
    # Jinja2 환경 설정
    env = Environment(loader=FileSystemLoader("templates"))
    
    # 템플릿 파일 로딩
    template = env.get_template("entity_template2.java.j2")


    # 테이블 컬럼에 맞는 데이터 생성
    column_info = []
    for column in columns:
        column_info.append({
            "name": to_camel_case(column[0]),
            "type": "int" if "int" in column[1].lower()[0:3] else "String", 
            "comment": column[2],
            "name2": column[0]
        })
    
    # 템플릿 렌더링
    java_code = template.render(table_name="MBR_ACNT", table_comment=table_comment, class_name=class_name, columns=column_info)
    
    # 생성된 Java 코드 출력
    return java_code

# 파일로 저장
def save_java_file(java_code, class_name):
    file_name = f"{class_name}.java"
    with open(file_name, "w") as file:
        file.write(java_code)
    print(f"Java 파일이 생성되었습니다: {file_name}")

def to_camel_case(s):
        # 문자열을 '_' 기준으로 분리
    words = s.split('_')
    # 첫 단어는 소문자로, 나머지 단어는 첫 글자만 대문자로 변환
    return words[0].lower() + ''.join(word.capitalize() for word in words[1:])

# eg T_MBR_ACNT -> MbrAcnt
def to_class_name(s):
    # 문자열을 'T_' 기준으로 분리
    words = s.split('_')
    return ''.join(word.capitalize() for word in words[1:])


def main():
    table_name = "T_MY_TABLE"
    
    class_name = to_class_name(table_name)
    
    table_comment = get_table_comment(table_name)     # 테이블 주석
    columns = get_table_columns(table_name)
    java_code = generate_java_code(table_comment, columns, class_name)
    save_java_file(java_code,class_name)

if __name__ == "__main__":
    main()

# generate,py END ----

package kwwa.lms.bo.mbrAcnt.domain.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

// {{ table_name }} 테이블 : {{ table_comment }} 테이블
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class {{ class_name }} {
    {% for column in columns %}
    private {{ column.type }} {{ column.name }}; // {{ column.comment }} ({{ column.name2 }})
    {%- endfor %}
}