[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>