2026년 1월 13일 화요일

파일 쓰기

 import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import java.io.BufferedWriter;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

import java.nio.charset.StandardCharsets;

import java.util.List;

import java.util.Map;


public class BackOfficeService {


    private SqlSessionFactory sqlSessionFactory;


    public void exportTableToCsv(String fileName) {

        // SQL ID (Mapper XML에 정의된 ID)

        String statement = "com.example.mapper.AdminMapper.selectUserList";


        // 1. try-with-resources로 SqlSession과 Writer를 선언 (블록 종료 시 자동 close)

        try (SqlSession session = sqlSessionFactory.openSession();

             FileOutputStream fos = new FileOutputStream(fileName);

             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);

             BufferedWriter writer = new BufferedWriter(osw)) {


            // 2. 데이터 조회 (직관적인 조인을 선호하시니 결과는 Map 리스트로 수신)

            List<Map<String, Object>> rows = session.selectList(statement);


            // 3. 헤더 작성 (첫 번째 행의 Key셋을 활용하거나 직접 입력)

            if (!rows.isEmpty()) {

                writer.write("회원번호,아이디,성함,가입일");

                writer.newLine();

            }


            // 4. 데이터 반복문 처리

            for (Map<String, Object> row : rows) {

                // 각 컬럼 값을 직관적으로 가져와서 조합

                String line = String.format("%s,%s,%s,%s",

                        row.get("USER_ID"),

                        row.get("LOGIN_ID"),

                        row.get("USER_NAME"),

                        row.get("CREATED_AT"));

                

                writer.write(line);

                writer.newLine();

            }


            writer.flush(); // 잔여 데이터 출력

            System.out.println("파일 생성이 완료되었습니다: " + fileName);


        } catch (Exception e) {

            // 에러 발생 시 로그 출력 및 리소스는 자동 종료됨

            System.err.println("데이터 추출 중 오류 발생: " + e.getMessage());

            e.printStackTrace();

        }

    }

}


댓글 없음: