MYSQL테이블을 VO로 만들기 위한 쿼리

-- MySQL 2018. 5. 11. 11:11
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MYSQL과 함께 SPRING으로 작업을 하면서 VO를 만들기 위해 아래와 같은 쿼리를 만들었다.

개인적으로 필요에 의해 만들어서 아직 검증이 되지는 않았으니 버그나 더 좋은 방법이 있다면 코멘트 부탁합니다.

예를 들어 필드명이 USER_ID라면 VO의 명칭으로 private String userId; 로 변환한다.
필드명의 _는 현재 4개까지 지원하며, 필드명에 _가 더 있다면 아래 코드에 추가하여 사용하면 된다.

SELECT   CONCAT(
                    '/* ',
                    CASE WHEN LENGTH(COLUMN_COMMENT) > 0 THEN 
                        COLUMN_COMMENT 
                    ELSE 
                        COLUMN_NAME 
                    END,
                    ' */',
                    CHAR(13),
                    'private',
                    CASE 
                        WHEN LOWER(DATA_TYPE) = 'varchar' THEN ' String '
                        WHEN INSTR(LOWER(DATA_TYPE), 'int') > 0 THEN  ' Integer ' 
                        WHEN LOWER(DATA_TYPE) = 'text' THEN ' String ' 
                        WHEN LOWER(DATA_TYPE) = 'datetime' THEN ' String '
                        ELSE ' Object '
                    END, 
                    CONCAT(
                        TRIM(CN1), 
                        TRIM(CONCAT(UPPER(SUBSTRING(CN2, 1, 1)) , SUBSTRING(CN2, 2, LENGTH(CN2)))), 
                        TRIM(CONCAT(UPPER(SUBSTRING(CN3, 1, 1)) , SUBSTRING(CN3, 2, LENGTH(CN3)))),
                        TRIM(CONCAT(UPPER(SUBSTRING(CN4, 1, 1)) , SUBSTRING(CN4, 2, LENGTH(CN4)))),
                        TRIM(CONCAT(UPPER(SUBSTRING(CN5, 1, 1)) , SUBSTRING(CN5, 2, LENGTH(CN5))))
                    ), 
                    ';',
                    CHAR(13),
                    CHAR(13)
                )
FROM
(
SELECT   B.COLUMN_NAME,  
                CASE WHEN LENGTH(B.COLUMN_NAME) - LENGTH(REPLACE(B.COLUMN_NAME, '_', '')) + 1 >= 1 THEN 
                    SUBSTRING_INDEX(SUBSTRING_INDEX(LCASE(B.COLUMN_NAME), '_', 1), '_', -1) 
                ELSE ' ' END AS CN1,
                CASE WHEN LENGTH(B.COLUMN_NAME) - LENGTH(REPLACE(B.COLUMN_NAME, '_', '')) + 1 >= 2 THEN 
                    SUBSTRING_INDEX(SUBSTRING_INDEX(LCASE(B.COLUMN_NAME), '_', 2), '_', -1) 
                ELSE ' ' END AS CN2,
                CASE WHEN LENGTH(B.COLUMN_NAME) - LENGTH(REPLACE(B.COLUMN_NAME, '_', '')) + 1 >= 3 THEN 
                    SUBSTRING_INDEX(SUBSTRING_INDEX(LCASE(B.COLUMN_NAME), '_', 3), '_', -1) 
                ELSE ' ' END AS CN3,
                CASE WHEN LENGTH(B.COLUMN_NAME) - LENGTH(REPLACE(B.COLUMN_NAME, '_', '')) + 1 >= 4 THEN 
                    SUBSTRING_INDEX(SUBSTRING_INDEX(LCASE(B.COLUMN_NAME), '_', 4), '_', -1) 
                ELSE ' ' END AS CN4,
                CASE WHEN LENGTH(B.COLUMN_NAME) - LENGTH(REPLACE(B.COLUMN_NAME, '_', '')) + 1 >= 5 THEN 
                    SUBSTRING_INDEX(SUBSTRING_INDEX(LCASE(B.COLUMN_NAME), '_', 5), '_', -1) 
                ELSE ' ' END AS CN5,
              B.DATA_TYPE, 
              B.COLUMN_COMMENT
FROM information_schema.TABLES A
INNER JOIN information_schema.COLUMNS B ON (A.TABLE_NAME = B.TABLE_NAME) 
WHERE  A.TABLE_NAME = '[테이블]'
AND A.TABLE_SCHEMA = '[디비]'
ORDER BY B.ORDINAL_POSITION
) A


'-- MySQL' 카테고리의 다른 글

MYSQL 특정문자 TRIM  (0) 2022.01.14
위/경도 좌표 간 거리 구하기  (0) 2018.03.12
MYSQL 모든 테이블의 명세를 만드는 쿼리  (0) 2017.05.16
SYSDATE() 와 NOW()  (0) 2017.04.11
MySQL FIND_IN_SET  (0) 2015.03.02
posted by 어린왕자악꿍