NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    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 ]

    R7QzSSu.png

     

     

    개발 환경이 그래들이기 때문에 아래와 같이 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 폴더 하위로 동일한 패키지 경로를 사용해야 합니다. 몇가지 정의되어 있는데로 작성해야 정상적으로 동작합니다.

    ksuu4yi.png

     

     

    어플리케이션을 실행하면 데이타베이스로부터 가져온 엔티티 목록을 JSON 형식으로 표시합니다.

    d4MrmVJ.png

     

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.