재밌고 어려운 IT를 이해해보자~!
Model 파트의 4단진화 [MyBatis] 본문
버전 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 |