재밌고 어려운 IT를 이해해보자~!

Model 파트의 4단진화 [MyBatis] 본문

코리아IT핀테크과정

Model 파트의 4단진화 [MyBatis]

언제나즐거운IT 2024. 3. 29. 10:51

버전 1 JDBC 응집도를 높이기위해 JDBCUtil 클래스를 생성


버전 2 "이관 작업" 오라클 -> MySQL
   DBMS를 변경하는 작업


버전 3 JDBCTemplate 템플릿 패턴
         복잡하거나 반복되는 작업을 템플릿화해둔 객체를 사용하는 방법


버전 4 MyBatis 프레임워크
   자바의 DTO(엔티티,커맨드 객체,POJO)와
   sql 수행결과(rs)를 매핑시켜주는 역할을 담당하는 프레임워크 >> RowMapper와 유사한 역할
      ▶ SQL문이 JAVA 코드에 작성이 되어있음!
      ▶ SQL문에 변경이 발생되었을때, 재컴파일해야만한다!
         ▷ 결합도가 높다. 응집도가 낮다.
      ▶ 응집도를 높여야한다! == 파일을 분리해라.
      ▶ SQL문을 .java파일 외부에 작성하자!!!
         == 프레임워크의 설정파일 .xml 에 작성하자!!!!!
         MyBatis 프레임워크의 설정파일
         == SQL을 저장하는 파일
         == mapper.xml


MyBatis 프레임워크를 활용하면
   1. 응집도를 높일수있음
      SQL은 .xml에, JAVA는 .java에 작성할수있음
   2. 결합도를 낮출수있음
      SQL을 변경해도, JAVA 재컴파일이 필요없음
   3. id 개념이 생겨서 searchCondition 이 필요없음

 

searchCondition이..뭔가 인위적이다라는 생각이 들었고, 

체할방법이 없지 않을까? 라는생각이 들었었는데! 
MyBatis프레임워크를 사용하면서 id라는 개념이 생겨
id를 통해 원하는 쿼리문에 맵핑이 가능하다!


MemberDAO.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.koreait.day080.biz.member.IMemberDAO">
	<select id="selectAll" resultType="com.koreait.day080.biz.member.MemberDTO">
		SELECT MID,NAME FROM MEMBER
	</select>
	<select id="selectOne" resultType="com.koreait.day080.biz.member.MemberDTO">
		SELECT MID,NAME FROM MEMBER WHERE MID=#{mid} AND PASSWORD=#{password}
	</select>
</mapper>

IMemberDAO.java

package com.koreait.day080.biz.member;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface IMemberDAO {

	public List<MemberDTO> selectAll();
	public MemberDTO selectOne(Map<String,String> map); // 낮은 결합도를 유지하게해줌

}

추가되어야 하는 property와 gradle

application.properties


server.port = 8088

spring.mvc.view.prefix = /WEB-INF/views/
spring.mvc.view.suffix = .jsp

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/kimdb
spring.datasource.username = root
spring.datasource.password = 1234

spring.mvc.static-path-pattern = /resources/**

mybatis.mapper-locations=classpath:mapper/**.xml

 

build.gradle

plugins {
	id 'java'
	id 'war'
	id 'org.springframework.boot' version '3.2.4'
	id 'io.spring.dependency-management' version '1.1.4'
}

group = 'com.koreait'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	implementation 'jakarta.servlet:jakarta.servlet-api'
	implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'
	implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'
	runtimeOnly 'com.mysql:mysql-connector-j'
}

tasks.named('test') {
	useJUnitPlatform()
}

 

배우면 배울수록 배워야할게 끝도없이 나온다!

 

 

'코리아IT핀테크과정' 카테고리의 다른 글

Validator  (0) 2024.03.13
Lombok  (0) 2024.03.12
@PathVariable, 다양한 Ctrl 메서드  (0) 2024.03.11
MySQL 설치  (0) 2024.03.10
Command 객체  (2) 2024.03.07
Comments