기존의 JDBC
- connection → Statement 객체 생성 → SQL문 전송 → 결과 반환 → close 과정으로 작업
- SQL문이 프로그래밍 코드에 섞여 코드가 복잡 => 사용, 유지 보수가 어려움
++ 마이바티스 ++
- 마이바티스 프레임워크를 도입 => SQL문의 가독성을 높여서 사용이 편리
- 코드와 SQL문을 분리 -> 사용, 유지 보수가 편리
- SQL 실행 결과를 자바 빈즈 또는 Map 객체에 매핑해 주는 Persisitence 솔루션으로 관리
- SQL을 소스 코드가 아닌 XML로 분리
- SQL문과 프로그래밍 코드를 분리해서 구현
- 데이터소스(DataSource) 기능과 트랜잭션 처리 기능 제공
- SqlMapConfig.xml에 각 기능별로 실행할 SQL문을 SqlMap.xml에 미리 작성한 후 등록
- 애플리케이션에서 데이터베이스와 연동하는 데 필요한 데이터를 각각의 매개변수에 저장한 후 마이바티스에 전달
- 애플리케이션에서 요청한 SQL문을 SqlMap.xml에서 선택
- 전달한 매개변수와 선택한 SQL문을 결합
- 매개변수와 결합된 SQL문을 DBMS에서 실행
- DBMS에서 반환된 데이터를 애플리케이션에서 제공하는 적당한 매개변수에 저장한 후 반환
필요 JAR파일 라이브러리에 추가
마이바티스 설정 파일
설정 파일 | function |
SqlMapConfig.xml | 데이터베이스 연동 시 반환되는 값을 저장할 빈, 트랜잭션, 데이터소스 등 마이바티스 관련 정보 설정 |
member.xml | 회원 정보 관련 SQL문 설정 |
SqlSession 클래스의 메소드들
method | function |
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(quert_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문을 실행 |
경로를 꼭 이대로 해야한다!!! (형식이 정해진 것)
**src 패키지 아래에 SqlMapConfig.xml은 mybatis 패키지에,
**member.xml은 /mybatis/mappers 패키지에 위치
마이바티스 회원 정보 출력 실습 #1
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="com.spring.ex01.MemberVO" alias="memberVO" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="org.mariadb.jdbc.Driver" />
<property name="url" value="jdbc:mariadb://localhost:3306/membertable" />
<property name="username" value="root" />
<property name="password" value="1234" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/mappers/member.xml" />
</mappers>
</configuration>
SqlMapConfig.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="mapper.member">
<resultMap id="memResult" type="memberVO">
<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">
<![CDATA[
select * from t_member order by joinDate desc
]]>
</select>
<select id="selectName" resultType="String">
<![CDATA[
select name from t_member
where id = 'kongdol'
]]>
</select>
<select id="selectPwd" resultType="int">
<![CDATA[
select pwd from t_member
where id = 'kongdol'
]]>
</select>
<select id="selectMemberById" resultType="memberVO" parameterType="String">
<![CDATA[
select * from t_member
where id=#{id}
]]>
</select>
<select id="selectMemberByPwd" resultMap="memResult" parameterType="int">
<![CDATA[
select * from t_member
where pwd=#{pwd}
]]>
</select>
<insert id="insertMember" parameterType="memberVO">
<![CDATA[
insert into t_member(id,pwd,name,email)
values(#{id},#{pwd},#{name},#{email})
]]>
</insert>
<insert id="insertMember2" parameterType="java.util.Map">
<![CDATA[
insert into t_member(id,pwd,name,email)
values(#{id},#{pwd},#{name},#{email})
]]>
</insert>
<update id="updateMember" parameterType="memberVO">
<![CDATA[
update t_member
set pwd=#{pwd}, name=#{name}, email=#{email}
where id=#{id}
]]>
</update>
<delete id="deleteMember" parameterType="String">
<![CDATA[
delete from t_member
where id=#{id}
]]>
</delete>
<!-- 동적 SQL문 -->
<select id="searchMember" parameterType="memberVO" resultMap="memResult">
<![CDATA[
select * from t_member
]]>
<where>
<if test=" name != '' and name != null">
name=#{name}
</if>
<if test=" email != '' and email != null">
and email=#{email}
</if>
</where>
order by joinDate desc
</select>
<select id="foreachSelect" resultMap="memResult" parameterType="java.util.Map">
<![CDATA[
select * from t_member
]]>
where name in
<foreach item="item" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
order by joinDate desc
</select>
<insert id="foreachInsert" parameterType="java.util.Map">
insert INTO t_member(id, pwd, name, email)
VALUES
<foreach item="item" collection="list" index="index" separator=",">
(#{item.id}, #{item.pwd}, #{item.name}, #{item.email})
</foreach>
</insert>
<!-- like 검색 -->
<select id="selectLike" resultMap="memResult" parameterType="String">
<![CDATA[
select * from t_member
where
name like '%' || #{name} || '%'
]]>
</select>
</mapper>
member.xml
<result>태그 안 속성 : property --> MemberVO객체안 / column --> DB
<![CDATA[ ...query문...]]> : 없어도 되지만, 간혹 오류가 발생하므로 꼭 넣어주기
DB표현언어 ===> #{..}
package com.spring.ex01;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
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 {
public void init(ServletConfig config) throws ServletException {
System.out.println("init 호출");
}
public void destroy() {
System.out.println("destroy 호출");
}
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();
request.setAttribute("membersList", membersList);
RequestDispatcher dispatch = request.getRequestDispatcher("test01/listMembers.jsp");
dispatch.forward(request, response);
}
}
MemberServlet.java
package com.spring.ex01;
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 {
public 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 List<MemberVO> selectAllMemberList() {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
List<MemberVO> memlist = null;
memlist = session.selectList("mapper.member.selectAllMemberList");
return memlist;
}
}
MemberDAO.java
MemberVO.java (그대로)
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.util.*,com.spring.ex01.*" isELIgnored="false"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<% request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>회원정보 출력창</title>
<style type="text/css">
.cls1 { font-size: 40px; text-align: center; }
.cls2 { text-align: center; }
</style>
</head>
<body>
<table align="center" width="80%" border="1">
<tr align="center" bgcolor="lightblue">
<td>ID</td>
<td>PASSWORD</td>
<td>NAME</td>
<td>EMAIL</td>
<td>JOINDATE</td>
</tr>
<c:forEach var="member" items="${membersList}">
<tr align="center">
<td>${member.id}</td>
<td>${member.pwd}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td>${member.joinDate}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
test01폴더 안 listMembers.jsp 파일
-- 결과 --
마이바티스 회원 (ID, 비밀번호 조회) 실습 #2
member.xml
SqlMapConfig.xml 등 기본설정 실습 #1과 동일
package com.spring.ex02;
...
@WebServlet("/mem2.do")
public class MemberServlet extends HttpServlet {
...
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();
// int pwd = dao.selectPwd();
PrintWriter pw = response.getWriter();
pw.write("<script>");
pw.write(" alert('이름 : " + name + "');");
// pw.write(" alert('비밀번호 : " + pwd + "');");
pw.write("</script>");
}
}
MemberServlet.java
com.spring.ex02 패키지 생성해서 넣기
package com.spring.ex02;
...
public class MemberDAO {
public 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");
return name;
}
public int selectPwd() {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int pwd = session.selectOne("mapper.member.selectPwd");
return pwd;
}
}
MemberDAO.java
마찬가지로 ex02패키지에..
-- 결과 --
pwd부분 주석 풀고, id관련 부분 주석처리
마이바티스 회원 (조건값으로 정보 조회) 실습 #3
- MemberDAO에서 메서드 호출 시 전달된 조건 값은 매개변수 이름으로 SQL문의 조건식에 전달
- SQL문에서 조건값 사용 방법 : #{전달된_매개변수명}
member.xml
SqlMapConfig.xml
MemberVO.java 등 기본설정 실습 #1과 동일
MemberVO는 com.spring.ex01의 MemberVO를 import해와서 사용
package com.spring.ex03;
...
import com.spring.ex01.MemberVO;
@WebServlet("/mem3.do")
public class MemberServlet extends HttpServlet {
...
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
MemberDAO dao = new MemberDAO();
MemberVO memberVO = new MemberVO();
String action = request.getParameter("action");
String nextPage = "";
if(action==null || action.equals("listMembers")) {
List membersList = dao.selectAllMemberList();
request.setAttribute("membersList", membersList);
nextPage = "test02/listMembers.jsp";
} else if(action.equals("selectMemberById")) {
String id = request.getParameter("value");
memberVO = dao.selectMemberById(id);
request.setAttribute("member", memberVO);
nextPage = "test02/memberInfo.jsp";
} else if(action.equals("selectMemberByPwd")) {
int pwd = Integer.parseInt(request.getParameter("value"));
List<MemberVO> membersList = dao.selectMemberByPwd(pwd);
request.setAttribute("membersList", membersList);
nextPage = "test02/listMembers.jsp";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
}
MemberServlet.java
package com.spring.ex03;
...
import com.spring.ex01.MemberVO;
public class MemberDAO {
public 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 List<MemberVO> selectAllMemberList() {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
List<MemberVO> memlist = null;
memlist = session.selectList("mapper.member.selectAllMemberList");
return memlist;
}
public MemberVO selectMemberById(String id) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
MemberVO memberVO = session.selectOne("mapper.member.selectMemberById", id);
return memberVO;
}
public List<MemberVO> selectMemberByPwd(int pwd) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
List<MemberVO> membersList = null;
membersList = session.selectList("mapper.member.selectMemberByPwd", pwd);
return membersList;
}
}
MemberDAO.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<% request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 검색창</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/mem3.do">
입력 : <input type="text" name="value" />
<select name="action">
<option value="listMembers">전체</option>
<option value="selectMemberById">아이디</option>
<option value="selectMemberByPwd">비밀번호</option>
</select><br>
<input type="submit" value="검색" />
</form>
</body>
</html>
search.jsp
test02폴더 생성 후,
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<% request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<table border="1" width="100%" align="center">
<tr align=center bgcolor="lightblue">
<td><b>아이디</b></td>
<td><b>비밀번호</b></td>
<td><b>이름</b></td>
<td><b>이메일</b></td>
<td><b>가입일</b></td>
</tr>
<tr align=center>
<td>${member.id}</td>
<td>${member.pwd}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td>${member.joinDate}</td>
</tr>
</table>
</body>
</html>
memberInfo.jsp
마찬가지로 test02폴더 안에
-- 결과 --
search.jsp 서버로 실행
초기 실행 화면
'kongdol'을 입력후, 아이디 선택-> 검색
id가 'kongdol'인 회원 정보가 출력된다.
다시 되돌아가,
비밀번호가 '1234'인 회원정보 검색
해당 회원 정보가 출력된다.
마이바티스 회원 (추가) 실습 #4
...
<insert id="insertMember" parameterType="memberVO">
<![CDATA[
insert into t_member(id,pwd,name,email)
values(#{id},#{pwd},#{name},#{email})
]]>
</insert>
...
member.xml 위와 동일한데, 이 부분을 쓰는 것!
resultMap : 위쪽에서 만든 것
...
else if(action.equals("insertMember")) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
memberVO.setId(id);
memberVO.setPwd(pwd);
memberVO.setName(name);
memberVO.setEmail(email);
dao.insertMember(memberVO);
nextPage = "/mem4.do?action=listMembers";
}
...
MemberServlet.java
doHandle()함수 제일 밑에 :
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
위 두 줄은 나중에 xml로 빼야한다. -> 흐름에 관계없으니까!
...
public int insertMember(MemberVO memberVO) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = 0;
result = session.insert("mapper.member.insertMember", memberVO);
session.commit();
return result;
}
...
MemberDAO.java
session.insert("mapper.member.insertMember", memberVO);
=> 지정한 id의 SQL문에 memberVO의 값을 전달 -> 회원 정보를 테이블에 추가.
session.commit();
=> 수동 커밋 -> 반드시 commit()메소드 호출해서 영구 반영.
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" isELIgnored="false"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<% request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>회원가입 창</title>
</head>
<body>
<form method="post" action="${contextPath}/mem4.do?action=insertMember">
<h1 style="text-align: center">회원가입창</h1>
<table align="center">
<tr>
<td width="200"><p align="right">아이디</p></td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200"><p align="right">비밀번호</p></td>
<td width="400"><input type="password" name="pwd"></td>
</tr>
<tr>
<td width="200"><p align="right">이름</p> </td>
<td width="400"><input type="text" name="name"></td>
</tr>
<tr>
<td width="200"><p align="right">이메일</p></td>
<td width="400"><input type="text" name="email"></td>
</tr>
<tr>
<td width="200"></td>
<td width="80">
<input type="submit" value="가입하기">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
memberForm.jsp
(test03 폴더)
-- 결과 --
회원가입창이 나오면,
정보입력해서 받은 값.
데이터베이스에서도 확인 가능.
마이바티스 회원 (HashMap 사용 추가) 실습 #5
...
<insert id="insertMember2" parameterType="java.util.Map">
<![CDATA[
insert into t_member(id,pwd,name,email)
values(#{id},#{pwd},#{name},#{email})
]]>
</insert>
...
member.xml
동일함! 위 부분을 사용
...
else if(action.equals("insertMember2")) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
Map memberMap = new HashMap();
memberMap.put("id", id);
memberMap.put("pwd", pwd);
memberMap.put("name", name);
memberMap.put("email", email);
dao.insertMember2(memberMap);
nextPage = "/mem4.do?action=listMembers";
}
...
MemberServlet.java 에 추가
(com.spring.ex04)
...
public int insertMember2(Map<String, String> memberMap) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = session.insert("mapper.member.insertMember2", memberMap);
session.commit();
return result;
}
...
MemberDAO.java 에 추가
(com.spring.ex04)
...
<form method="post" action="${contextPath}/mem4.do?action=insertMember2">
...
memberForm.jsp
<form>태그의 action 속성값 수정!! insertMember에서 insertMember2로
-- 결과 --
실습 #4와 동일한 결과
마이바티스 회원 (수정, 삭제) 실습 #6
...
<update id="updateMember" parameterType="memberVO">
<![CDATA[
update t_member
set pwd=#{pwd}, name=#{name}, email=#{email}
where id=#{id}
]]>
</update>
<delete id="deleteMember" parameterType="String">
<![CDATA[
delete from t_member
where id=#{id}
]]>
</delete>
...
member.xml
동일함! 위부분사용
...
else if(action.equals("updateMember")) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
memberVO.setId(id);
memberVO.setPwd(pwd);
memberVO.setName(name);
memberVO.setEmail(email);
dao.updateMember(memberVO);
nextPage = "/mem4.do?action=listMembers";
} else if(action.equals("deleteMember")) {
String id = request.getParameter("id");
dao.deleteMember(id);
nextPage = "/mem4.do?action=listMembers";
}
...
MemberServlet.java 에 추가
dao.updateMember(memberVO); => 회원 수정창에서 전송된 회원 정보를 MemberVO의 속성에 설정,
=> 후 updateMember()호출하면서 MemberVO객체를 전달
delete는 id를 가지고와서 전달된 ID를 deleteMember()메소드를 호출해 SQL문으로 전달.
...
public int updateMember(MemberVO memberVO) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = session.update("mapper.member.updateMember", memberVO);
session.commit();
return result;
}
public int deleteMember(String id) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = session.delete("mapper.member.deleteMember", id);
session.commit();
return result;
}
...
MemberDAO.java 에 추가
session.update("mapper.member.updateMember", memberVO);
=> update문 호출 시 SqlSession의 update()메서드 사용
updateMember() 메소드 성공하면 1리턴.
update 함수에서는 꼭 session.commit(); 필수!!! => 임시로 업데이트한 것이므로 확정해야한다.
session.delete("mapper.member.deleteMember", id);
=>SqlSession의 delete()메소드 사용.
마찬가지로 SQL문 실행한 후, 커밋하기
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" isELIgnored="false"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<% request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>회원정보 수정창</title>
</head>
<body>
<form method="post" action="${contextPath}/mem4.do?action=updateMember">
<h1 style="text-align: center">회원 정보 수정창</h1>
<table align="center">
<tr>
<td width="200"><p align="right">아이디</p></td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200"><p align="right">비밀번호</p></td>
<td width="400"><input type="password" name="pwd"></td>
</tr>
<tr>
<td width="200"><p align="right">이름</p> </td>
<td width="400"><input type="text" name="name"></td>
</tr>
<tr>
<td width="200"><p align="right">이메일</p></td>
<td width="400"><input type="text" name="email"></td>
</tr>
<tr>
<td width="200"></td>
<td width="80">
<input type="submit" value="수정하기">
</td>
</tr>
</table>
</form>
</body>
</html>
modMember.jsp
test03폴더에 추가
...
<td>수정</td>
<td>삭제</td>
...
<td><a href="${contextPath}/mem4.do?action=updateMember">수정</a></td>
<td><a href="${contextPath}/mem4.do?action=deleteMember&id=${member.id}">삭제</a></td>
...
listMembers.jsp
에 수정/삭제 열 추가
-- 결과 --
mem4.do호출해서 회원정보 출력창
김우유 수정창을 눌러서
id가 dou인 회원의 비밀번호, 이름, 이메일을 수정하기 위해 해당칸에 다른 데이터를 입력.
회원 출력창과 데이터베이스에서
해당 회원의 정보가 수정된 것을 확인할 수 있다.
id가 iamJsp인 회원의 정보를 삭제
(삭제클릭)
삭제되었다.
마이바티스 회원 (검색) 실습 #7
...
<!-- 동적 SQL문 -->
<select id="searchMember" parameterType="memberVO" resultMap="memResult">
<![CDATA[
select * from t_member
]]>
<where>
<if test=" name != '' and name != null">
name=#{name}
</if>
<if test=" email != '' and email != null">
and email=#{email}
</if>
</where>
order by joinDate desc
</select>
...
member.xml
...
else if(action.equals("searchMember")) {
String name = request.getParameter("name");
String email = request.getParameter("email");
memberVO.setName(name);
memberVO.setEmail(email);
List membersList = dao.searchMember(memberVO);
request.setAttribute("membersList", membersList);
nextPage = "test03/listMembers.jsp";
}
...
MemberServlet.java 에 추가
...
public List searchMember(MemberVO memberVO) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
List list = session.selectList("mapper.member.searchMember", memberVO);
return list;
}
...
MemberDAO.java 에 추가
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.util.*,com.spring.ex01.*" isELIgnored="false"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<% request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>회원 검색</title>
<style type="text/css">
.cls1 {
font-size: 40px;
text-align: center;
}
.cls2 {
text-align: center;
}
</style>
</head>
<body>
<h2>회원검색</h2>
<form action="${contextPath}/mem4.do">
<input type="hidden" name="action" value="searchMember" />
이름 : <input type="text" name="name" /><br>
이메일 : <input type="text" name="email" /><br>
<input type="submit" value="검색" />
</form>
</body>
</html>
searchMember.jsp 추가
...
<a href="${contextPath}/test03/searchMember.jsp"><h3 style="text-align: center">회원검색</h3></a>
...
listMembers.jsp 에 추가
-- 결과 --
마이바티스 회원 (foreach로 한번에 검색) 실습 #8
...
<select id="foreachSelect" resultMap="memResult" parameterType="java.util.Map">
<![CDATA[
select * from t_member
]]>
where name in
<foreach item="item" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
order by joinDate desc
</select>
...
member.xml
...
else if(action.equals("foreachSelect")) {
List<String> nameList = new ArrayList<String>();
nameList.add("김자바");
nameList.add("김디비");
nameList.add("김제이");
List membersList = dao.foreachSelect(nameList);
request.setAttribute("membersList", membersList);
nextPage = "test03/listMembers.jsp";
}
...
MemberServlet.java 에 추가
...
public List foreachSelect(List<String> nameList) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
List list = session.selectList("mapper.member.foreachSelect", nameList);
return list;
}
...
MemberDAO.java 에 추가
-- 결과 --
http://localhost:8080/prosp03r/mem4.do?action=foreachSelect 로 요청
nameList.add("김자바");
nameList.add("김디비");
nameList.add("김제이");
데이터베이스에 존재하는 두 회원의 정보가 나온다.
마이바티스 회원 (foreach로 한번에 추가) 실습 #9
...
<insert id="foreachInsert" parameterType="java.util.Map">
insert INTO t_member(id, pwd, name, email)
VALUES
<foreach item="item" collection="list" index="index" separator=",">
(#{item.id}, #{item.pwd}, #{item.name}, #{item.email})
</foreach>
</insert>
...
member.xml
...
else if(action.equals("foreachInsert")) {
List<MemberVO> memList = new ArrayList();
memList.add(new MemberVO("m1", "1234", "박길동", "m1@test.com"));
memList.add(new MemberVO("m2", "1234", "정길동", "m2@test.com"));
memList.add(new MemberVO("m3", "1234", "최길동", "m3@test.com"));
int result = dao.foreachInsert(memList);
nextPage="/mem4.do?action=listMembers";
}
...
MemberServlet.java 에 추가
...
public int foreachInsert(List<MemberVO> memList) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = session.insert("mapper.member.foreachInsert", memList);
session.commit();
return result;
}
...
MemberDAO.java 에 추가
-- 결과 --
http://localhost:8080/prosp03r/mem4.do?action=foreachInsert 로 요청
memList.add(new MemberVO("m1", "1234", "박길동", "m1@test.com"));
memList.add(new MemberVO("m2", "1234", "정길동", "m2@test.com"));
memList.add(new MemberVO("m3", "1234", "최길동", "m3@test.com"));
데이터베이스에 한번에 추가된 것을 확인할 수 있다.
'Spring' 카테고리의 다른 글
Spring #5 : 마이바티스 - 동적 SQL문(230118) (0) | 2023.01.18 |
---|---|
Spring #4 : 마이바티스 - 회원 최종(230118) (0) | 2023.01.18 |
Spring #2 : 스프링 MVC (230116) (0) | 2023.01.17 |
Spring : 스프링 AOP (230116)xxx (0) | 2023.01.16 |
Spring #1 : 의존성 주입, 초기 개발환경 설정 (230116) (0) | 2023.01.16 |
댓글