본문 바로가기
빅데이터 부트캠프/Spring Framework

빅데이터 부트캠프 93일차

by Mecodata 2022. 11. 17.

MyBatis

- Java 객체와 SQL 사이자동 매핑 기능을 지원함으로써 JDBC를 보다 편하게 사용할 수 있도록하는 ORM 프레임워크

- JDBC의 대부분의 기능을 제공

- SQL문을 Mapper XML 파일에 따로 저장해 놓음으로써 프로그래밍 코드와 분리되어 있어 SQL문에 변경이 있을시 따로 자바 코드를 수정할 필요 X

- Mapper 인터페이스 파일(src/main/java)에 있는 메소드에 대한 자세한 설정을 Mapper.xml(src/main/resources)에 작성 

- Mapper 인터페이스 파일에서 같은 이름의 메소드인데 입력받는 데이터 타입이 다른 경우 자동으로 오버로딩이 적용

- Mapper.xml에서 입력값을 쿼리문에 활용할때는 [#{컬럼명}] 형식을 이용

 

예시

Mapper.java (인터페이스)

package com.spring.mapper;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.spring.dto.Dept;

@Mapper
public interface DeptMapper {
	
	// String - dname
	public String getDnameByDeptno(int deptno);
	
	// 객체 - Dept 
	public Dept getDeptByDeptno(int deptno);
	
	// HashMap
	public HashMap<String, Object> getDeptHashMap(int deptno);
	
	// List
	public List<Dept> getAllDepts();
	
	// List - Map
	public List<HashMap<String, Object>> getAllDeptsHashMap(); // 오버로딩 => 인자 X
	public List<HashMap<String, Object>> getAllDeptsHashMap(int deptno); // 오버로딩 => 인자 O
	
	// insert - Dept
	public void insertDept(Dept dept);
}

Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.spring.mapper.DeptMapper">
	
	<!-- Mapper에 있는 메소드에 관한 정보 --> 
 	<select id="getDnameByDeptno" parameterType="_int" resultType="string">
 		SELECT dname FROM dept WHERE deptno = #{deptno};
 	</select>
 	
 	<select id="getDeptByDeptno" resultMap="selectDeptMap">
 		SELECT deptno, dname, loc FROM dept WHERE deptno = #{deptno};
 	</select>
 	
 	<select id="getDeptHashMap" resultMap="selectDeptHashMap">
 		SELECT deptno, dname, loc FROM dept WHERE deptno = #{deptno};
 	</select>
 	
 	<!-- 반환 객체 타입 - Map -->
 	<resultMap type="com.spring.dto.Dept" id="selectDeptMap">
 		<result column="deptno" property="deptno" />
 		<result column="dname" property="dname" />
 		<result column="loc" property="loc" />
 	</resultMap>
 	
 	<resultMap type="java.util.HashMap" id="selectDeptHashMap">
 		<result column="deptno" property="deptno" />
 		<result column="dname" property="dname" />
 		<result column="loc" property="loc" />
 	</resultMap>
 	
 	<select id="getAllDepts" resultType="com.spring.dto.Dept">
 		SELECT deptno, dname, loc FROM dept;
 	</select>
 	
 	<select id="getAllDeptsHashMap" resultType="java.util.HashMap">
 		SELECT deptno, dname, loc FROM dept;
 		<if test="deptno != null and deptno = ''">
 			WHERE deptno = #{deptno}
 		</if>
 	</select>
 	
 	<insert id="insertDept" parameterType="com.spring.dto.Dept">
 		INSERT INTO dept (deptno, dname, loc) VALUES (#{deptno}, #{dname}, #{loc});
 	</insert>
 	
 </mapper>

댓글