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();
}
}
}
댓글 없음:
댓글 쓰기