반응형

# MVC05_03 JDBC를 MyBatis로 변경_1

## 회원 리스트 가져오는 기능 작업

1. MemberDAO

  • MemberMapper와 연결을 위한 코드 작성
package kr.bit.model;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

// JDBC -> MyBatis
public class MemberDAO {
	private static SqlSessionFactory sqlSessionFactory;	// DB를 연결하고 있는 객체들이 존재.
	
	// 초기화 블럭 => 프로그램 실행 시 딱 한번만 실행되는 코드.
	static {
		try {
			String resource = "kr/bit/mybatis/config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);	// 읽기
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}	
	
	// 회원 리스트 조회 기능
	public List<MemberVO> memberList() {
		// SqlSession 은 Connection + Statement 의 기능을 합쳐 놓은 것.
		SqlSession session = sqlSessionFactory.openSession();
		List<MemberVO> list = session.selectList("memberList");		// mapper와 연결 ""에는 id이름 적기 일반적으로 해당 매서드 이름적음.
		session.close();	// 연결 종료(반납)
		return list;
	}
}

2. MemberMapper.xml

  • 쿼리의 id의 경우 DAO에서 입력한 id값과 동일하게 해주기.
  • resultType는 해당 쿼리문의 결과에 의해 묶어지는 타입정보 작성
<?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">
<!-- namerspace는 이름. -->
<mapper namespace="kr.bit.mybatis.MemberMapper">
  
    <select id="memberList" resultType="kr.bit.model.MemberVO">
		SELECT *
		FROM member
    </select>
    
</mapper>
  • 쿼리문 작성 시 마다 resultType에 kr.bit.model.MemberVO로 작성하는 번거로움이 있는데, 이를 해소하기 위해서 config.xml에 아래와 같이 설정을 해줘야 한다. type에 해당하는 것을 alias에 적은 별칭으로 사용하겠다는 의미.
<typeAliases><!-- 별칭설정 -->
	    <typeAlias type="kr.bit.model.MemberVO" alias="memberVO"/>
</typeAliases>

### 정리

  • MemberDAO에서 memberList 실행
  • MemberMapper.xml 에서 동일한 id의 쿼리문 실행, 실행된 쿼리는 설정된 resultType으로 묶어진다.

## 회원가입 기능 작업

1. MemberDAO

  • MemberMapper와 연결을 위한 코드 작성
  • Insert의 경우 mapper의 id 와 값을 넘겨주기 위한 vo 2개의 매개변수를 넣어줘야 한다.
  • 저장, 수정 등의 경우 데이터베이스의 정보가 변경되므로 commit을 해줘야 한다. (session.commit();)
// 회원 가입 기능
public int memberInsert(MemberVO vo) {
  SqlSession session = sqlSessionFactory.openSession();
  int cnt = session.insert("memberInsert", vo);
  session.commit();	// DB 내용이 수정되므로 commit을 해줘야 한다.
  session.close();	// 연결 종료(반납)
  return cnt;
}

2. MemberMapper.xml

  • parameterType는 해당 쿼리문에 넘어가는 정보의 타입을 의미.
<insert id="memberInsert" parameterType="memberVO">
  INSERT INTO member(id, pass, name, age, email, phone) 
  values(#{id}, #{pass}, #{name}, #{age}, #{email}, #{phone})
</insert>

 

# MVC05_03 JDBC를 MyBatis로 변경_2

## 회원 삭제 기능 작업

1. MemberDAO

  • MemberMapper와 연결을 위한 코드 작성
// 회원 삭제 기능
public int memberDelete(int num) {
  SqlSession session = sqlSessionFactory.openSession();
  int cnt = session.delete("memberDelete", num);
  session.commit();	// DB 내용이 수정되므로 commit을 해줘야 한다.
  session.close();	// 연결 종료(반납)
  return cnt;
}

2. MemberMapper.xml

  • parameterType는 해당 쿼리문에 넘어가는 정보의 타입을 의미. 넘어가는 타입이 object이므로 Integer로 작성.
<delete id="memberDelete" parameterType="Integer">
  DELETE 
  FROM member
  WHERE num = #{num}
</delete>

## 회원 상세 보기 기능 작업

1. MemberDAO

  • MemberMapper와 연결을 위한 코드 작성
// 회원 상세보기
public MemberVO memberContent(int num) {
  SqlSession session = sqlSessionFactory.openSession();
  MemberVO vo = session.selectOne("memberContent", num);
  session.close();	// 연결 종료(반납)
  return vo;
}

2. MemberMapper.xml

  • 회원 상세보기의 경우 특정 회원의 번호를 받을 parameterType과 쿼리문의 결과로 조회된 대상의 정보를 넘겨줄 resultType이 필요하다.
<select id="memberContent" parameterType="Integer" resultType="memberVO">
  SELECT *
  FROM member
  WHERE num = #{num}
</select>

## 회원 수정하기 기능 작업

1. MemberDAO

  • MemberMapper와 연결을 위한 코드 작성
// 회원 수정하기
public int memberUpdate(MemberVO vo) {
  SqlSession session = sqlSessionFactory.openSession();
  int cnt = session.update("memberUpdate", vo);
  session.commit();	// DB 내용이 수정되므로 commit을 해줘야 한다.
  session.close();	// 연결 종료(반납)
  return cnt;
}

2. MemberMapper.xml

<update id="memberUpdate" parameterType="memberVO">
  UPDATE member 
  SET age = #{age}, email = #{email}, phone = #{phone} where num = #{num}
</update>

## 정리

1. MemberDAO

package kr.bit.model;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

// JDBC -> MyBatis
public class MemberDAO {
	private static SqlSessionFactory sqlSessionFactory;	// DB를 연결하고 있는 객체들이 존재.
	
	// 초기화 블럭 => 프로그램 실행 시 딱 한번만 실행되는 코드.
	static {
		try {
			String resource = "kr/bit/mybatis/config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);	// 읽기
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}	
	
	// 회원 리스트 조회 기능
	public List<MemberVO> memberList() {
		// SqlSession 은 Connection + Statement 의 기능을 합쳐 놓은 것.
		SqlSession session = sqlSessionFactory.openSession();
		List<MemberVO> list = session.selectList("memberList");		// mapper와 연결 ""에는 id이름 적기 일반적으로 해당 매서드 이름적음.
		session.close();	// 연결 종료(반납)
		return list;
	}
	
	// 회원 가입 기능
	public int memberInsert(MemberVO vo) {
		SqlSession session = sqlSessionFactory.openSession();
		int cnt = session.insert("memberInsert", vo);
		session.commit();	// DB 내용이 수정되므로 commit을 해줘야 한다.
		session.close();	// 연결 종료(반납)
		return cnt;
	}
	
	// 회원 삭제 기능
	public int memberDelete(int num) {
		SqlSession session = sqlSessionFactory.openSession();
		int cnt = session.delete("memberDelete", num);
		session.commit();	// DB 내용이 수정되므로 commit을 해줘야 한다.
		session.close();	// 연결 종료(반납)
		return cnt;
	}
	
	// 회원 상세보기
	public MemberVO memberContent(int num) {
		SqlSession session = sqlSessionFactory.openSession();
		MemberVO vo = session.selectOne("memberContent", num);
		session.close();	// 연결 종료(반납)
		return vo;
	}
	
	// 회원 수정하기
	public int memberUpdate(MemberVO vo) {
		SqlSession session = sqlSessionFactory.openSession();
		int cnt = session.update("memberUpdate", vo);
		session.commit();	// DB 내용이 수정되므로 commit을 해줘야 한다.
		session.close();	// 연결 종료(반납)
		return cnt;
	}
}

2. MemberMapper.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">
<!-- namerspace는 이름. -->
<mapper namespace="kr.bit.mybatis.MemberMapper">
  
    <!-- 회원 리스트(전체) -->
    <select id="memberList" resultType="memberVO">
	    SELECT *
    	FROM member
    </select>
    
    <!-- 회원 가입 -->
    <insert id="memberInsert" parameterType="memberVO">
        INSERT INTO member(id, pass, name, age, email, phone) 
        values(#{id}, #{pass}, #{name}, #{age}, #{email}, #{phone})
    </insert>
    
    <!-- 회원 삭제 -->
    <delete id="memberDelete" parameterType="Integer">
        DELETE 
        FROM member
        WHERE num = #{num}
    </delete>
    
    <!-- 회원 상세보기 -->
    <select id="memberContent" parameterType="Integer" resultType="memberVO">
        SELECT *
        FROM member
        WHERE num = #{num}
    </select>
    
    <!-- 회원 정보 수정 -->
    <update id="memberUpdate" parameterType="memberVO">
        UPDATE member 
        SET age = #{age}, email = #{email}, phone = #{phone} where num = #{num}
    </update>
    
</mapper>
반응형

+ Recent posts