일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 생성자오버로드
- 자바
- GRANT VIEW
- cursor문
- 오라클
- 환경설정
- Java
- abstract
- 자동차수리시스템
- 어윈 사용법
- 참조형변수
- 예외미루기
- 사용자예외클래스생성
- 컬렉션프레임워크
- 대덕인재개발원
- 컬렉션 타입
- 집합_SET
- 한국건설관리시스템
- 메소드오버로딩
- 인터페이스
- 정수형타입
- 객체 비교
- NestedFor
- EnhancedFor
- 예외처리
- oracle
- exception
- 제네릭
- 추상메서드
- 다형성
- Today
- Total
거니의 velog
(11) 마이바티스 프레임워크 사용하기 2 본문
4. 마이바티스 이용해 회원 정보 CRUD 실습하기
* 이번에는 앞에서 실습한 selectList() 메서드 외에 마이바티스에서 제공하는 다른 메서드를 사용해 보자. 마이바티스의 SqlSession 클래스에서 제공하는 CRUD를 실행할 때 많이 사용되는 메서드를 다음의 표로 정리했다.
* 게시판을 포함해 대부분의 프로그램이 갖고 있는
Create(생성),
Read(읽기),
Update(갱신),
Delete(삭제)
기능을 CRUD 라고 부른다.
< SqlSession 클래스에서 제공하는 여러 가지 메서드 >
메서드 | 기능 |
List selectList(query_id) | id에 대한 select 문을 실행한 후 여러 레코드를 List로 반환한다. |
List selectList(query_id, 조건) | id에 대한 select 문을 실행하면서 사용되는 조건도 전달한다. |
T selectOne(query_id) | id에 대한 select 문을 실행한 후 지정한 타입으로 한 개의 레코드를 반환한다. |
T selectOne(query_id, 조건) | id에 대한 select 문을 실행하면서 사용되는 조건도 전달한다. |
Map<K, V> selectMap(query_id, 조건) | id에 대한 select 문을 실행하면서 사용되는 조건도 전달한다. Map 타입으로 레코드를 반환한다. |
int insert(query_id, Object obj) | id에 대한 insert 문을 실행하면서 obj 객체의 값을 테이블에 추가한다. |
int update(query_id, Object obj) | obj 객체의 값을 조건문의 수정 값으로 사용해 id에 대한 update문을 실행한다. |
int delete(query_id, Object obj) | obj 객체의 값을 조건문의 조건 값으로 사용해 id에 대한 delete문을 실행한다. |
* 그럼 이번에는 마이바티스의 메서드들을 이용해 회원 조회부터 추가, 수정, 삭제까지 회원 관리 기능(CRUD)을 구현해 보자.
(1) 회원의 ID와 비밀번호 조회
* 테이블의 회원 정보 중 문자열이나 정수와 같은 기본형 데이터를 조회해 보자.
1. 우선, 다음과 같이 com.spring.ex02 패키지를 만들고 필요한 실습 파일을 준비한다.
2. member.xml에 다음과 같이 SQL 문을 작성한다. <select> 태그의 SQL 문에 접근하기 위해 id를 설정한다. resultType은 SQL문을 실행했을 때 한 개의 데이터를 조회하므로 String(문자열), int(정수)로 지정한다.
<!-- MemberDAO에서 접근 시 사용할 SQL문의 id를 지정한다. -->
<!-- resultType 속성을 문자열로 지정해 SQL 문으로 조회한 이름(문자열)을 호출한 메서드로 반환한다. -->
<select id="selectName" resultType="String">
<![CDATA[
select name from t_member
where id = 'hong'
]]>
</select>
<!-- MemberDAO에서 접근 시 사용할 SQL문의 id를 지정한다. -->
<!-- resultType 속성을 int로 지정해 SQL 문으로 조회한 정수를 호출한 메서드로 반환한다. -->
<select id="selectPwd" resultType="int" >
<![CDATA[
select pwd from t_member
where id = 'hong'
]]>
</select>
3. MemberServlet을 다음과 같이 작성한다. 서블릿에서는 MemberDAO의 selectName()과 selectPwd() 메서드를 호출한 후 각 데이터를 브라우저에 알림창으로 출력한다.
package com.spring.ex02;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/mem2.do")
public class MemberServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
MemberDAO dao = new MemberDAO();
String name = dao.selectName(); // MemberDAO의 selectName() 메서드를 호출한다.
//int pwd = dao.selectPwd(); // MemberDAO의 selectPwd() 메서드를 호출한다
PrintWriter pw = response.getWriter();
pw.write("<script>");
pw.write("alert(' 이름: " + name +"');"); // 조회한 이름을 브라우저로 출력한다.
//pw.write("alert(' 비밀번호 : "+ pwd+"');");
pw.write("</script>");
}
}
4. MemberDAO 클래스를 다음과 같이 작성한다. member.xml의 <select> 태그의 id로 각각의 SQL문을 호출한 후 각 <select> 태그의 resultType에 설정한 같은 타입의 변수로 한 개의 데이터를 반환한다.
package com.spring.ex02;
import java.io.Reader;
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;
public class MemberDAO {
private static SqlSessionFactory sqlMapper = null;
private static SqlSessionFactory getInstance() {
if (sqlMapper == null) {
try {
String resource = "mybatis/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sqlMapper;
}
public String selectName() {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
String name = session.selectOne("mapper.member.selectName"); // selectOne() 메서드로 인자로 지정한 SQL문을 실행한 후 한 개의 데이터(문자열)를 반환한다.
return name;
}
public int selectPwd() {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int pwd = session.selectOne("mapper.member.selectPwd"); // selectOne() 메서드로 지정한 SQL문을 실행한 후 한 개의 데이터(정수)를 반환한다.
return pwd;
}
}
5. 다음의 주소로 요청한다. 서블릿에서 selectName() 메서드로 조회한 경우 아이디에 해당하는 회원 이름을 알림창으로 출력한다.
- http://localhost:8090/pro23/mem2.do
6. 서블릿에서 selectPwd() 메서드로 조회한 경우 아이디에 해당하는 비밀번호를 알림창으로 출력한다.
package com.spring.ex02;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/mem2.do")
public class MemberServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
MemberDAO dao = new MemberDAO();
//String name = dao.selectName(); // MemberDAO의 selectName() 메서드를 호출한다.
int pwd = dao.selectPwd(); // MemberDAO의 selectPwd() 메서드를 호출한다
PrintWriter pw = response.getWriter();
pw.write("<script>");
//pw.write("alert(' 이름: " + name +"');");
pw.write("alert(' 비밀번호 : "+ pwd+"');"); // 조회한 비밀번호를 브라우저로 출력한다.
pw.write("</script>");
}
}
(2) HashMap을 이용한 모든 회원 정보 조회
* 이번에는 자바의 HashMap을 이용해 모든 회원을 조회하는 기능을 실습해 보자.
* <resultMap> 태그의 type 속성에는 HashMap이 지정되어 있다. 즉, SQL 문 실행 시 레코드의 컬럼 이름을 key로 지정하고, 그 값을 value로 해서 HashMap에 차례대로 저장한다.
1. member.xml을 다음과 같이 수정한다.
<resultMap id="memResult" type="java.util.HashMap"> <!-- 조회한 레코드를 지정한 컬럼 이름을 key, 값을 value로 해서 저장한다. -->
<result property="id" column="id" />
<result property="pwd" column="pwd" />
<result property="name" column="name" />
<result property="email" column="email" />
<result property="joinDate" column="joinDate" />
</resultMap>
<select id="selectAllMemberList" resultMap="memResult"> <!-- 조회한 회원 정보를 HashMap에 저장한다. -->
<![CDATA[
select * from t_member order by joinDate desc
]]>
</select>
2. 브라우저에서 서블릿에 요청하면 selectAllMemberList() 메서드를 호출하여 조회한 회원 정보를 바인딩한 후 listMembers.jsp로 포워딩한다.
package com.spring.ex01;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/mem.do")
public class MemberServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
MemberDAO dao = new MemberDAO();
//List<MemberVO> membersList = dao.selectAllMemberList();
List<HashMap<String, String>> membersList = dao.selectAllMemberList(); // 모든 회원 정보를 조회한다.
request.setAttribute("membersList", membersList);
RequestDispatcher dispatch = request.getRequestDispatcher("test01/listMembers.jsp");
dispatch.forward(request, response);
}
}
3. MemberDAO 클래스에서는 selectList() 메서드를 호출하면서 id가 selectAllMemberList인 SQL문을 실행하도록 다음과 같이 코드를 수정한다.
package com.spring.ex01;
import java.io.Reader;
import java.util.HashMap;
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;
public class MemberDAO {
public static SqlSessionFactory sqlMapper = null;
private static SqlSessionFactory getInstance() {
if (sqlMapper == null) {
try {
String resource = "mybatis/SqlMapConfig.xml"; // MemberDAO의 각 메서드 호출 시 src/mybatis/SqlMapConfig.xml에서 설정 정보를 읽은 후 데이터베이스와의 연동 준비를 한다.
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader); // 마이바티스를 이용하는 sqlMapper 객체를 가져온다.
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sqlMapper;
}
// public List<MemberVO> selectAllMemberList() {
// sqlMapper = getInstance();
// SqlSession session = sqlMapper.openSession(); // 실제 member.xml의 SQL문을 호출하는 데 사용되는 SqlSession 객체를 가져온다.
// List<MemberVO> memlist = null;
// memlist = session.selectList("mapper.member.selectAllMemberList"); // 여러 개의 레코드를 조회하므로 selectList() 메서드에 실행하고자 하는 SQL문의 id를 인자로 전달한다.
// return memlist;
// }
public List<HashMap<String, String>> selectAllMemberList() {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
List<HashMap<String, String>> memlist = null;
memlist = session.selectList("mapper.member.selectAllMemberList"); // 모든 회원 정보를 조회한다.
return memlist;
}
}
4. 다음은 실행 결과이다. 이번에는 조회한 회원 정보를 HashMap에 저장해서 표시한다.
- http://localhost:8090/pro23/mem.do
'Java_Spring Framework part1' 카테고리의 다른 글
(13) 마이바티스 프레임워크 사용하기 4 (0) | 2023.11.10 |
---|---|
(12) 마이바티스 프레임워크 사용하기 3 (0) | 2023.11.10 |
(10) 마이바티스 프레임워크 사용하기 1 (0) | 2023.10.28 |
(9) 스프링 JDBC 기능 (0) | 2023.10.28 |
(8) 스프링 MVC 기능 3 (0) | 2023.10.26 |