투케이2K

47. (spring/스프링) mybatis 에서 mysql 데이터베이스 blob (블랍) 이미지 (image) 등록 (insert) 본문

Spring

47. (spring/스프링) mybatis 에서 mysql 데이터베이스 blob (블랍) 이미지 (image) 등록 (insert)

투케이2K 2022. 6. 14. 12:52

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring

 

[컨트롤러 : DB_Maria_Api_Controller : 소스 코드]

    // TODO [SEARCH FAST] : [테스트 BLOB 이미지 저장]
    @PostMapping("/TEST_BLOB_INSERT")
    public String TEST_BLOB_INSERT(@RequestParam("idx") String idx,
                                   @RequestParam("img") MultipartFile img){ // [body 방식]
        System.out.println("\n");
        System.out.println("================================================");
        System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
        System.out.println("[METHOD] : "+String.valueOf("TEST_BLOB_INSERT"));
        System.out.println("[INPUT] : [idx] : "+String.valueOf(idx.toString())); // [인덱스]
        System.out.println("[INPUT] : [img] : "+String.valueOf(img.getSize())); // [이미지 사이즈]
        System.out.println("================================================");
        System.out.println("\n");


        /**
         * // -----------------------------------------
         * [호출 방법]
         * // -----------------------------------------
         * 1. 호출 방식 : POST / 멀티파트
         * // -----------------------------------------
         * 2. 호출 방법 : http://localhost:7000/TEST_BLOB_INSERT
         * // -----------------------------------------
         * 3. 리턴 데이터 :
         *   BLOB 컬럼 IMAGE 이미지 파일 INSERT 수행 결과 (int 값)
         * // -----------------------------------------
         * */


        try {

            // [사전 데이터 널 체크 수행 실시]
            if (C_Util.stringNotNull(idx) == true && img != null && img.getSize() > 0){
            }
            else {
                // [리턴 결과 반환 실시]
                return "N : " + "IMAGE INPUT IS NULL";
            }

            // [모델 객체에 idx 및 byte 지정 실시 [blob 컬럼은 byte 로 되어있다]
            TEST_BLOB_IMG_MODEL test_blob_img_model = new TEST_BLOB_IMG_MODEL(String.valueOf(idx), img.getBytes());

            // [서비스 호출 실시]
            int returnData = db_maria_api_service.TEST_BLOB_INSERT(test_blob_img_model);

            System.out.println("\n");
            System.out.println("================================================");
            System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
            System.out.println("[METHOD] : "+String.valueOf("TEST_BLOB_INSERT"));
            System.out.println("[RESULT] : "+String.valueOf(returnData));
            System.out.println("================================================");
            System.out.println("\n");

            if (returnData > 0){
                return "Y : " + "IMAGE INSERT SUCCESS";
            }
            else {
                return "N : " + "IMAGE INSERT FAIL";
            }
        }
        catch (NullPointerException e) {
            return "N : " + String.valueOf(e.getMessage());
        }
        catch (Exception e2){
            return "N : " + String.valueOf(e2.getMessage());
        }
    }
 

[서비스 : DB_Maria_Api_Service : 소스 코드]

    // [SEARCH FAST] : [테스트 BLOB 이미지 저장]
    public int TEST_BLOB_INSERT(TEST_BLOB_IMG_MODEL test_blob_img_model) throws NullPointerException, Exception {

        int returnData = -1;
        try {
            if (test_blob_img_model != null){
                // [mybatis xml 에서 설정한 파라미터 타입에 맞게 데이터 삽입]
                System.out.println("\n");
                System.out.println("================================================");
                System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
                System.out.println("[METHOD] : "+String.valueOf("TEST_BLOB_INSERT"));
                System.out.println("[INPUT] : "+String.valueOf(test_blob_img_model.toString()));
                System.out.println("================================================");
                System.out.println("\n");

                // [mapper 인터페이스 호출 실시]
                returnData = db_maria_api_mapper.TEST_BLOB_INSERT(test_blob_img_model);

                // [리턴 값 반환]
                return returnData;
            }
            else {
                // [리턴 값 반환]
                return returnData;
            }
        }
        catch (Exception e){
            // Exception 발생 체크 부분에 메시지 리턴
            throw new Exception(e.getMessage());
        }
    }
 

[매퍼 : DB_Maria_Api_Mapper : 소스 코드]

    // TODO [SEARCH FAST] : [테스트 BLOB 이미지 저장]
    int TEST_BLOB_INSERT(TEST_BLOB_IMG_MODEL test_blob_img_model);
 

[mybatis : DB_Maria_Api_Mybatis : 소스 코드]

    <!--
    // =========================================
    // [SEARCH FAST] : [테스트 BLOB 이미지 저장]
    // =========================================
    // [select id] [mapper 인터페이스 지정 메소드] : TEST_BLOB_INSERT
    // =========================================
    -->
    <insert id="TEST_BLOB_INSERT">
        <![CDATA[
        insert into TEST_BLOB (T_IDX, T_BLOB)
        values (#{idx}, #{img})
        ]]>
    </insert>
 

[DB Connection : application.yml : 소스 코드]

    # [Maria DB]
    maria:
      driver-class-name: org.mariadb.jdbc.Driver
      jdbc-url: jdbc:mariadb://3.54.138.43:3306/test?characterEncoding=UTF-8&serverTimezone=UTC&characterEncoding=utf8&noAccessToProcedureBodies=true
      username: test
      password: test@1234
      hikari:
        maximum-pool-size: 20
        connection-timeout: 30000
 

[TEST_BLOB_IMG_MODEL : 소스 코드]

public class TEST_BLOB_IMG_MODEL {


    /**
     * // -----------------------------------------
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. BLOB 컬럼 형태 이미지 파일 저장 수행 모델
     * // -----------------------------------------
     * 2. BLOB 컬럼은 바이트 (BYTE) 형태로 데이터가 저장됩니다
     * // -----------------------------------------
     * */





    // TODO [전역 변수 선언]
    private String idx;
    private byte[] img;





    // TODO [클래스 생성자 초기화 실시]
    public TEST_BLOB_IMG_MODEL(String idx, byte[] img) {
        this.idx = idx;
        this.img = img;
    }


} // TODO [클래스 종료]
 

[결과 출력]


반응형
Comments