Java Spring boot에서 MyBatis 사용하기.
페이지 정보
본문
안녕하세요. 엔지엠소프트웨어입니다. 스프링부트에서 MySQL이나 PostgreSQL 또는 InfluxDB를 사용할 때 MyBatis를 사용하면 복잡하고 지루한 데이타 모델 매핑작업을 쉽게(?) 처리할 수 있습니다. MyBatis를 사용하면 자동으로 Connection을 Close할 수 있고, 내부적으로 PreparedStatement처리도 가능합니다. MyBatis를 사용하는 가장 큰 목적중 하나인 Return타입을 사용자가 지정한 객체 및 ResultSet으로 처리할 수 있습니다. 기존의 SQL을 그대로 활용할 수 있다는점도 매력적이긴 하죠^^;
기존 프로젝트에 mybatis와 mybatis-spring, mybatis-spring-boot-starter 3개 라이브러리를 추가해야 합니다. 아래 사이트로 이동하세요. mybatis를 검색하면 아래와 같이 필요한 라이브러가 표시됩니다. 참고로, 라이브러리가 하나라도 누락되면 Bean에 DI가 제대로 동작하지 않습니다. 그런데, 에러 내용을 러프하게 알려주다보니 다른곳에서 문제를 해결하려고 하게 됩니다. 혹시라도, 문제가 되면 라이브러리가 누락된게 없는지 먼저 체크 해보세요.
[ MVN Repository ]
개발 환경이 그래들이기 때문에 아래와 같이 build.gradle 파일에서 dependencies 마지막에 3개를 추가하세요.
dependencies {
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.2'
implementation 'com.github.miwurster:spring-data-influxdb:1.8'
implementation 'org.influxdb:influxdb-java:2.17'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.14.2'
implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.14.2'
implementation group: 'org.mybatis', name: 'mybatis', version: '3.5.11'
implementation group: 'org.mybatis', name: 'mybatis-spring', version: '3.0.1'
implementation group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '3.0.1'
}
메이븐 환경이면 pom.xml에 아래와 같이 추가하면 됩니다.
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
application.yml에 MyBatis 설정을 추가 해줍니다. 물론, 그전에 PostgreSQL 연결 정보도 추가되어 있어야 합니다. 이 부분은 아마 되어 있을거라 생각하고 넘어가겠습니다.
### Mybatis (Modify mapper-location to fit the developement environment)
mybatis:
mapper-locations: com/ngmsoftware/optima/mapper/**/*.xml
configuration:
lazy-loading-enabled: true
aggressive-lazy-loading: false
Controller 코드는 아래와 같습니다.
@Controller
@RequestMapping(path="/api/v1/master")
public class StandardInfoController {
@Autowired
private MasterService masterService;
@GetMapping(path="/getData")
public @ResponseBody String masterData() throws JsonProcessingException {
List<MasterModel> result = masterService.getData();
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(result);
}
}
서비스를 만들어줍니다.
@Service
public class MasterService {
@Autowired
private IBaseMapper mapper;
public List<MasterModel> getData() {
List<MasterModel> result = mapper.getData();
return result;
}
}
Mapper를 만들어줍니다.
@Mapper
public interface IBaseMapper {
public List<MasterModel> getData();
}
Model은 아래와 같습니다.
import lombok.Data;
@Data
public class MasterModel {
private Long rawid;
private String site;
private String line;
}
데이타베이스로부터 쿼리한 내용을 바인딩하는 XML은 아래와 같습니다. 스키마에 따라 코드는 달라질 수 있어요. 매핑 파일을 만들 때 namespace를 주의해야 합니다. 실제 오브젝트와 매핑할 매퍼 위치를 설정해야 합니다. 그리고, 자바 프로젝트의 resources 폴더 하위로 동일한 패키지 경로를 사용해야 합니다. 몇가지 정의되어 있는데로 작성해야 정상적으로 동작합니다.
어플리케이션을 실행하면 데이타베이스로부터 가져온 엔티티 목록을 JSON 형식으로 표시합니다.
개발자에게 후원하기
추천, 구독, 홍보 꼭~ 부탁드립니다.
여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~
감사합니다~
- 이전글DevOps의 애자일 방법론이란? 23.02.07
- 다음글윈도우 11 파일 확장자 표시하기. 23.02.05
댓글목록
등록된 댓글이 없습니다.