마이바티스(MyBatis)에서 객체를 쓰지 않고 json으로 주고 받기
객체를 사용하지 않고 JSON 형태로 데이터를 주고받는 방식으로 MyBatis를 사용할 수 있다.
Map을 사용하여 쿼리 결과를 받거나 JSONObject와 같은 라이브러리를 사용할 수 있다.
객체를 사용하는 것보다 훨씬 유연하게 개발할 수 있어서 편리한 장점이 있지만,
프로젝트가 복잡해지고 사람이 많아질수록 난장판이 될 단점도 있다-_-;
Map을 사용하여 JSON 형태로 데이터 받기
MyBatis에서 결과를 Map으로 받을 수 있으며, Map<String, Object>로 반환되는 데이터를 JSON처럼 다룰 수 있다.
1.1 ItemMapper.xml
XML 파일에서 resultType을 Map으로 설정. Map은 MyBatis에서 자동으로 컬럼 이름을 키(key)로, 값을 값(value)으로 매핑하여 반환해 준다.
<mapper namespace="com.nam.gallery.mapper.ItemMapper">
<select id="findById" parameterType="int" resultType="java.util.Map">
SELECT * FROM ITEMS WHERE ID = #{id}
</select>
</mapper>
1.2 Java 코드에서 결과받기
Java에서는 Map<String, Object>로 반환되는 결과를 받아서 JSON처럼 사용할 수 있다.
package com.nam.gallery;
import org.apache.ibatis.session.SqlSession;
import java.util.Map;
public class ItemService {
public Map<String, Object> getItemById(int id) {
try (SqlSession session = MyBatisConfig.getSqlSessionFactory().openSession()) {
// Mapper를 가져옵니다
ItemMapper itemMapper = session.getMapper(ItemMapper.class);
// findById 쿼리 실행 (결과는 Map으로 받음)
return itemMapper.findById(id);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
이제 getItemById 메서드는 Map<String, Object>를 반환한다. 반환된 Map은 각 컬럼이 key, 컬럼 값이 value가 된다.
1.3 결과를 JSON으로 변환하기
만약 Map을 JSON 형태로 변환하려면, Jackson 라이브러리 등을 사용할 수 있다.
import com.fasterxml.jackson.databind.ObjectMapper;
public class ItemService {
public String getItemByIdAsJson(int id) {
try (SqlSession session = MyBatisConfig.getSqlSessionFactory().openSession()) {
// Mapper를 가져옵니다
ItemMapper itemMapper = session.getMapper(ItemMapper.class);
// findById 쿼리 실행 (결과는 Map으로 받음)
Map<String, Object> itemData = itemMapper.findById(id);
// Map을 JSON 형태로 변환
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(itemData);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
이 코드에서는 Jackson 라이브러리를 사용하여 Map을 JSON 문자열로 변환한다.
JSONObject를 사용하여 JSON 형태로 결과받기
JSONObject를 사용해서도 결과를 JSON 형태로 받을 수 있다.
이 방법을 사용하려면 org.json 라이브러리나 Jackson 라이브러리 등을 사용할 수 있다.
2.1 ItemMapper.xml
<mapper namespace="com.nam.gallery.mapper.ItemMapper">
<select id="findById" parameterType="int" resultType="org.json.JSONObject">
SELECT * FROM ITEMS WHERE ID = #{id}
</select>
</mapper>
2.2 Java 코드에서 JSONObject로 받기
import org.json.JSONObject;
import org.apache.ibatis.session.SqlSession;
public class ItemService {
public JSONObject getItemByIdAsJson(int id) {
try (SqlSession session = MyBatisConfig.getSqlSessionFactory().openSession()) {
// Mapper를 가져옵니다
ItemMapper itemMapper = session.getMapper(ItemMapper.class);
// findById 쿼리 실행 (결과는 JSONObject로 받음)
return itemMapper.findById(id);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
이 코드는 MyBatis가 반환하는 데이터를 **JSONObject**로 받아 바로 JSON 형식으로 사용할 수 있게 한다.
pom.xml에 필요한 의존성 추가
만약 Jackson이나 org.json을 사용하려면 pom.xml에 의존성을 추가해야 한다.
Jackson 의존성 추가
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version> <!-- 최신 버전 확인 후 적용 -->
</dependency>
org.json 의존성 추가
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
최종 정리
- Map<String, Object>로 결과받기
- 결과를 Map 형태로 받아 JSON처럼 처리
- ObjectMapper를 사용해 JSON 문자열로 변환 가능
- JSONObject로 결과받기
- org.json.JSONObject로 결과를 직접 JSON 객체 형태로 받기
위 방법 중 하나를 선택하여 JSON 형태로 데이터를 주고받는 코드를 구현할 수 있다.
'무한루프 > 개발, 업무' 카테고리의 다른 글
MS-SQL 기본 정보 및 환경 (0) | 2025.02.26 |
---|---|
스프링부트(spring boot)에서 메이븐 클린(maven clean) 하는 법 (0) | 2025.02.26 |
스프링 부트(Spring Boot), 마이바티스(Mybatis), 메이븐(Maven) 백엔드 연동 설정(2) (0) | 2025.02.25 |
스프링 부트(Spring Boot), 마이바티스(Mybatis), 메이븐(Maven) 백엔드 연동 설정(1) (0) | 2025.02.25 |
요즘 다시 공부 중인 스프링 프레임워크 (0) | 2025.02.24 |