Adventure Time - Finn 3
본문 바로가기
카테고리 없음

Mybatis

by hyun9_9 2024. 4. 2.

[M 파트]
버전 1 JDBC 응집도를 높이기 위해 JDBCUtil 클랫스를 생성
버전 2 "이관 작업" 오라클 => MySQL
DBMS를 변경하는 작업
버전 3 JDBCTemplate 템플릿 패턴
복잡하거나 반복되는 작업을 템플릿화 해둔 객체를 사용하는 방법
JDBC 연결로직이 반복이되기때문에 사용
버전 4 MyBatis 프레임워크 
            자바의 DTO(엔티티,커맨드 객체 ,POJO)와
              ㄴsql 수행결과(rs)를 매핑시켜주는 역할을 담당하는 프레임워크 >> RowMapper와 유사한 역할
            -> SQL문이 JAVA코드에 작성이 되어있음!
            ->SQL문에 변셩이 발생되었을떄 ,재컴파일 해야만한다!
            ->a가 변했는데 b도 변경되는 것 -> 결합도가 높다 응집도가 낮다
            ->응집도를 높여야한다! == 파일을 분리해라.
            -> SQL문을 .java파일 외부에 작성하자!!
           ==프레임 워크의 설정 파일 .xml 에 작성하자!!
           MyBatis프레임워크의 설정파일
           ==SQL을 저장하는 파일
          ==mapper.xml
         mapper는 모든 xml를 의미하는구나

 

로우매퍼 클래스 ==템플릿패턴
매퍼 파일 == 마이바티스

classpath란 src/main/resources를 의미한다


ibatis -> mybatis의 시초 

MemberSErvoceImpl 에서 IMemberDAO mDAO 사용가능하게됨

 

메퍼 xml 시작 스키마

<mapper nameSpce="">
</mapper>
루트 엘리먼트에는 namespace="" 필요 -> 경로삽입
ex)com.dat080.member.IMemberDAO



<mapper nameSpce="">
<select id="selectAll"> <- 메서드명 삽입
//sql문 삽입
      SELECT MID,NAME FROM MEMBER
</select>
</mapper>


아웃풋 MID,NAME을 전에는 로우 맵퍼 클래스를 사용하여 반환했었음


<mapper nameSpce="">
<select id="selectAll" resultType="com.MemberDTO"> <- 반환할 DTO 삽입
//sql문 삽입
      SELECT MID,NAME FROM MEMBER
</select>
</mapper>

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

파라미터 없을때

인터페이스

package com.koreait.day080;

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

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface IMemberDAO {
	
	public List<MemberDTO> selectAll();
	
	
	

}

 

MemberDAO를 사용안하고

IMemberDAO 인터페이스 사용

package com.koreait.day080;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MemberServiceImpl implements MemberService {

	@Autowired
	private IMemberDAO mDAO;

	@Override
	public List<MemberDTO> selectAll(MemberDTO mDTO) {
		return mDAO.selectAll();
	}

	@Override
	public MemberDTO selectOne(MemberDTO mDTO) {
		
	}

	@Override
	public boolean insert(MemberDTO mDTO) {
		return false;
		
		//mDAO.insert(mDTO); // 성공
		//return//mDAO.insert(mDTO); // 실패
	}

	@Override
	public boolean update(MemberDTO mDTO) {
		return false;
		
		//return //mDAO.update(mDTO);
	}

	@Override
	public boolean delete(MemberDTO mDTO) {
		
		return false;
		//return mDAO.delete(mDTO);
	}

}

 

 

 

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.day080.biz.member.IMemberDAO">
   <select id="selectAll">
      SELECT MID,NAME FROM MEMBER
   </select>
   
</mapper>

 

 

파라미터 있을때 (하나하나 지정)

package com.koreait.day080;

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(String mid, String password);
	
	

}
package com.koreait.day080;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MemberServiceImpl implements MemberService {

	@Autowired
	private IMemberDAO mDAO;

	@Override
	public List<MemberDTO> selectAll(MemberDTO mDTO) {
		return mDAO.selectAll();
	}

	@Override
	public MemberDTO selectOne(MemberDTO mDTO) {
		return mDAO.selectOne(mDTO.getMid(), mDTO.getPassword());
		
	}

	@Override
	public boolean insert(MemberDTO mDTO) {
		return false;
		
		//mDAO.insert(mDTO); // 성공
		//return//mDAO.insert(mDTO); // 실패
	}

	@Override
	public boolean update(MemberDTO mDTO) {
		return false;
		
		//return //mDAO.update(mDTO);
	}

	@Override
	public boolean delete(MemberDTO mDTO) {
		
		return false;
		//return mDAO.delete(mDTO);
	}

}
<?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.day080.biz.member.IMemberDAO">
   <select id="selectAll">
      SELECT MID,NAME FROM MEMBER
   </select>
   
   <select id="selectOne" resultType="com.day080.">
   	 SELECT MID,NAME FROM MEMBER WHERE MID=#{mid} AND PASSWORD=#{password}
   </select>
   
</mapper>

 

 

파라미터 있을때 (Map)

package com.koreait.day080;

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(String mid, String password);
	public MemberDTO selectOne(Map<String,String> map);//낮은 결합도를 유지하게 해줌
	
	

}
package com.koreait.day080;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MemberServiceImpl implements MemberService {

	@Autowired
	private IMemberDAO mDAO;

	@Override
	public List<MemberDTO> selectAll(MemberDTO mDTO) {
		return mDAO.selectAll();
	}

	@Override
	public MemberDTO selectOne(MemberDTO mDTO) {
		//return mDAO.selectOne(mDTO.getMid(), mDTO.getPassword());
		Map<String,String>map=new HashMap<String,String>();
		map.put("mid",mDTO.getMid());
		map.put("password", mDTO.getPassword());
		return mDAO.selectOne(map);
	}

	@Override
	public boolean insert(MemberDTO mDTO) {
		return false;
		
		//mDAO.insert(mDTO); // 성공
		//return//mDAO.insert(mDTO); // 실패
	}

	@Override
	public boolean update(MemberDTO mDTO) {
		return false;
		
		//return //mDAO.update(mDTO);
	}

	@Override
	public boolean delete(MemberDTO mDTO) {
		
		return false;
		//return mDAO.delete(mDTO);
	}

}
<?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.day080.biz.member.IMemberDAO">
   <select id="selectAll">
      SELECT MID,NAME FROM MEMBER
   </select>
   
   <select id="selectOne" resultType="com.day080.biz.member.IMemberDAO">
   	 SELECT MID,NAME FROM MEMBER WHERE MID=#{mid} AND PASSWORD=#{password}
   </select>
   
</mapper>