반응형
# 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>
반응형
'인프런 강의 학습 > MVC 프레임워크_나프2탄' 카테고리의 다른 글
인프런 나프_2탄 6일차 : MVC06_03~05 세션 (0) | 2021.06.26 |
---|---|
인프런 나프_2탄 5일차 : MVC06_01~02 회원 로그인 페이지 작성, 회원 로그인 기능(세션 바인딩) (0) | 2021.06.25 |
인프런 나프_2탄 4일차 : MVC05_05 마무리 (0) | 2021.06.24 |
인프런 나프_2탄 2일차 : MVC05_01~02 JDBC와 MyBatis 설정, Connection Pool (0) | 2021.06.23 |
인프런 나프_2탄 1일차 : 개발환경 구축, 데이터베이스 설정 (0) | 2021.06.22 |