[MYHEWON 테이블] 생성
create table myhewon(hewon_id varchar2(50) primary key, hewon_name varchar2(50)
, hewon_phone varchar2(20), hewon_email varchar2(100), hewon_status number(1));
MYHEWON 테이블 : 회원정보를 저장하기 위한 테이블
[MyHewon] DTO 클래스 선언
공개범위에 어떤 값이 저장되어있느냐에 따라 사용자에게 공개되는 정보가 달라지게 만들어 볼것이다.
package xyz.itwill.dto;
/*
이름 널? 유형
------------ -------- -------------
HEWON_ID NOT NULL VARCHAR2(50) - 아이디
HEWON_NAME VARCHAR2(50) - 이름
HEWON_PHONE VARCHAR2(20) - 전화번호
HEWON_EMAIL VARCHAR2(100) - 이메일
HEWON_STATUS NUMBER(1) - 공개범위
공개범위 : 1(아이디), 2(아이디&이름), 3(아이디&이름&전화번호), 4(아이디&이름&전화번호&이메일)
*/
public class MyHewon {
private String id;
private String name;
private String phone;
private String email;
private int status;
public MyHewon() {
// TODO Auto-generated constructor stub
}
public MyHewon(String id, String name, String phone, String email, int status) {
super();
this.id = id;
this.name = name;
this.phone = phone;
this.email = email;
this.status = status;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
매퍼 파일 생성
xml 매퍼 파일
[MyHewonMapper.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xyz.itwill.mapper.MyHewonMapper">
<insert id="insertHewon" parameterType="MyHewon">
insert into myhewon values(#{id}, #{name}, #{phone}, #{email}, #{status})
</insert>
<resultMap type="MyHewon" id="myHewonReultMap">
<id column="hewon_id" property="id"/>
<result column="hewon_name" property="name"/>
<result column="hewon_phone" property="phone"/>
<result column="hewon_email" property="email"/>
<result column="hewon_status" property="status"/>
</resultMap>
<select id="selectHewonList" resultMap="myHewonReultMap">
select hewon_id, hewon_name, hewon_phone, hewon_email, hewon_status from myhewon order by hewon_id
</select>
</mapper>
인터페이스 매퍼 파일
[MyHewonMapper]
package xyz.itwill.mapper;
import java.util.List;
import xyz.itwill.dto.MyHewon;
public interface MyHewonMapper {
int insertHewon(MyHewon hewon);
List<MyHewon> selectHewonList();
}
DAO 생성
[MyHewonDAO]
package xyz.itwill.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import xyz.itwill.dto.MyHewon;
import xyz.itwill.mapper.MyHewonMapper;
public class MyHewonDAO extends AbstractSession {
private static MyHewonDAO _dao;
private MyHewonDAO() {
// TODO Auto-generated constructor stub
}
static {
_dao=new MyHewonDAO();
}
public static MyHewonDAO getDAO() {
return _dao;
}
public int insertHewon(MyHewon hewon) {
SqlSession sqlSession=getSqlSessionFactory().openSession(true);
try {
return sqlSession.getMapper(MyHewonMapper.class).insertHewon(hewon);
} finally {
sqlSession.close();
}
}
public List<MyHewon> selectHewonList() {
SqlSession sqlSession=getSqlSessionFactory().openSession(true);
try {
return sqlSession.getMapper(MyHewonMapper.class).selectHewonList();
} finally {
sqlSession.close();
}
}
}
JSP
[hewonInsert.jsp]
회원정보 삽입
<%@page import="xyz.itwill.dto.MyHewon"%>
<%@page import="xyz.itwill.dao.MyHewonDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
MyHewonDAO.getDAO().insertHewon(new MyHewon("aaa", "홍길동", "010-1234-5678", "aaa@itwill.xyz", 1));
MyHewonDAO.getDAO().insertHewon(new MyHewon("bbb", "임꺽정", "010-4764-3411", "bbb@itwill.xyz", 2));
MyHewonDAO.getDAO().insertHewon(new MyHewon("ccc", "전우치", "010-7825-2159", "ccc@itwill.xyz", 3));
MyHewonDAO.getDAO().insertHewon(new MyHewon("ddd", "일지매", "010-9124-7821", "ddd@itwill.xyz", 4));
MyHewonDAO.getDAO().insertHewon(new MyHewon("eee", "장길산", "010-4551-4454", "eee@itwill.xyz", 3));
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MYBATIS</title>
</head>
<body>
<h1>회원등록</h1>
<hr>
<h3>회원정보가 성공적으로 삽입 되었습니다.</h3>
</body>
</html>
[hewonListSelect.jsp]
회원정보 출력
<%@page import="xyz.itwill.dto.MyHewon"%>
<%@page import="xyz.itwill.dao.MyHewonDAO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
List<MyHewon> hewonList=MyHewonDAO.getDAO().selectHewonList();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MYBATIS</title>
<style type="text/css">
table {
border: 1px solid black;
border-collapse: collapse;
}
td {
border: 1px solid black;
text-align: center;
padding: 3px;
}
.id { width: 150px; }
.name { width: 150px; }
.phone { width: 200px; }
.email { width: 200px; }
.status { width: 100px; }
</style>
</head>
<body>
<h1>회원목록</h1>
<hr>
<table>
<tr>
<td class="id">아이디</td>
<td class="name">이름</td>
<td class="phone">전화번호</td>
<td class="email">이메일</td>
<td class="status">공개범위</td>
</tr>
<% if(hewonList.isEmpty()) { %>
<tr>
<td colspan="5">검색된 회원정보가 없습니다.</td>
</tr>
<% } else { %>
<% for(MyHewon hewon : hewonList) { %>
<tr>
<td><%=hewon.getId() %></td>
<td><%=hewon.getName() %></td>
<td><%=hewon.getPhone() %></td>
<td><%=hewon.getEmail() %></td>
<td><%=hewon.getStatus() %></td>
</tr>
<% } %>
<% } %>
</table>
</body>
</html>

discriminator
discriminator 엘리먼트 이용해 select 하기
discriminator : 검색행의 컬럼값을 비교하여 매핑정보를 다르게 제공하기 위한 엘리먼트
→ 하위 엘리먼트로 case 엘리먼트를 사용한다. case 엘리먼트로 검색행의 컬럼값을 비교하여 매핑정보를 제공한다.
- javaType 속성 : 검색행의 비교 컬럼값에 대한 Java 자료형을 속성값으로 설정한다.
→ Java 자료형 대신 typeAlias 엘리먼트로 제공된 별칭을 사용할 수 있다.
- column 속성 : 검색행에서 비교할 컬럼명을 속성값으로 설정한다.
xml매퍼
<resultMap type="MyHewon" id="myHewonDiscriminatorResultMap">
<discriminator javaType="int" column="hewon_status">
<case value="1">
<id column="hewon_id" property="id"/>
<result column="hewon_status" property="status"/>
</case>
<case value="2">
<id column="hewon_id" property="id"/>
<result column="hewon_name" property="name"/>
<result column="hewon_status" property="status"/>
</case>
<case value="3">
<id column="hewon_id" property="id"/>
<result column="hewon_name" property="name"/>
<result column="hewon_phone" property="phone"/>
<result column="hewon_status" property="status"/>
</case>
<case value="4">
<id column="hewon_id" property="id"/>
<result column="hewon_name" property="name"/>
<result column="hewon_phone" property="phone"/>
<result column="hewon_email" property="email"/>
<result column="hewon_status" property="status"/>
</case>
</discriminator>
</resultMap>
<select id="selectDiscriminatorHewonList" resultMap="myHewonDiscriminatorResultMap">
select hewon_id, hewon_name, hewon_phone, hewon_email, hewon_status from myhewon order by hewon_id
</select>
인터페이스 매퍼
public interface MyHewonMapper {
int insertHewon(MyHewon hewon);
List<MyHewon> selectHewonList();
List<MyHewon> selectDiscriminatorHewonList();
}
DAO
public List<MyHewon> selectHewonList() {
SqlSession sqlSession=getSqlSessionFactory().openSession(true);
try {
return sqlSession.getMapper(MyHewonMapper.class).selectHewonList();
} finally {
sqlSession.close();
}
}
JSP
[hewonListDiscriminatorSelect.jsp]
<%@page import="xyz.itwill.dto.MyHewon"%>
<%@page import="xyz.itwill.dao.MyHewonDAO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
List<MyHewon> hewonList=MyHewonDAO.getDAO().selectDiscriminatorHewonList();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MYBATIS</title>
<style type="text/css">
table {
border: 1px solid black;
border-collapse: collapse;
}
td {
border: 1px solid black;
text-align: center;
padding: 3px;
}
.id { width: 150px; }
.name { width: 150px; }
.phone { width: 200px; }
.email { width: 200px; }
.status { width: 100px; }
</style>
</head>
<body>
<h1>회원목록</h1>
<hr>
<table>
<tr>
<td class="id">아이디</td>
<td class="name">이름</td>
<td class="phone">전화번호</td>
<td class="email">이메일</td>
<td class="status">공개범위</td>
</tr>
<% if(hewonList.isEmpty()) { %>
<tr>
<td colspan="5">검색된 회원정보가 없습니다.</td>
</tr>
<% } else { %>
<% for(MyHewon hewon : hewonList) { %>
<tr>
<td><%=hewon.getId() %></td>
<td><%=hewon.getName() %></td>
<td><%=hewon.getPhone() %></td>
<td><%=hewon.getEmail() %></td>
<td><%=hewon.getStatus() %></td>
</tr>
<% } %>
<% } %>
</table>
</body>
</html>
xml 매퍼 select 다른 방법으로 만들어보자
다른방법1)
모든 case 엘리먼트에 공통적인 매핑정보가 존재할 경우에는 discriminator 엘리먼트가 아닌 다른 하위 엘리먼트를 사용하여 매핑 정보 제공이 가능하다.
<resultMap type="MyHewon" id="myHewonDiscriminatorResultMap">
<id column="hewon_id" property="id"/>
<result column="hewon_status" property="status"/>
<discriminator javaType="int" column="hewon_status">
<case value="2">
<result column="hewon_name" property="name"/>
</case>
<case value="3">
<result column="hewon_name" property="name"/>
<result column="hewon_phone" property="phone"/>
</case>
<case value="4">
<result column="hewon_name" property="name"/>
<result column="hewon_phone" property="phone"/>
<result column="hewon_email" property="email"/>
</case>
</discriminator>
</resultMap>
<select id="selectDiscriminatorHewonList" resultMap="myHewonDiscriminatorResultMap">
select hewon_id, hewon_name, hewon_phone, hewon_email, hewon_status from myhewon order by hewon_id
</select>
다른방법2)
extends 속성 이용하기
extends 속성 : resultMap 엘리먼트의 식별자를 속성값으로 설정할 수 있다.
→ 다른 resultMap 엘리먼트의 매핑정보를 상속받아 사용하기 위한 속성이다.
<resultMap type="MyHewon" id="myHewonOneResultMap">
<id column="hewon_id" property="id"/>
<result column="hewon_status" property="status"/>
</resultMap>
<!-- extends 속성 : resultMap 엘리먼트의 식별자를 속성값으로 설정 -->
<!-- => 다른 resultMap 엘리먼트의 매핑정보를 상속받아 사용하기 위한 속성 -->
<resultMap type="MyHewon" id="myHewonTwoResultMap" extends="myHewonOneResultMap">
<result column="hewon_name" property="name"/>
</resultMap>
<resultMap type="MyHewon" id="myHewonThreeResultMap" extends="myHewonTwoResultMap">
<result column="hewon_phone" property="phone"/>
</resultMap>
<resultMap type="MyHewon" id="myHewonFourResultMap" extends="myHewonThreeResultMap">
<result column="hewon_email" property="email"/>
</resultMap>
<resultMap type="MyHewon" id="myHewonDiscriminatorResultMap">
<discriminator javaType="int" column="hewon_status">
<!-- case 엘리먼트에 resultMap 속성을 사용하여 다른 resultMap 엘리먼트의 매핑정보를 제공받아 사용 가능 -->
<case value="1" resultMap="myHewonOneResultMap"/>
<case value="2" resultMap="myHewonTwoResultMap"/>
<case value="3" resultMap="myHewonThreeResultMap"/>
<case value="4" resultMap="myHewonFourResultMap"/>
</discriminator>
</resultMap>
<select id="selectDiscriminatorHewonList" resultMap="myHewonDiscriminatorResultMap">
select hewon_id, hewon_name, hewon_phone, hewon_email, hewon_status from myhewon order by hewon_id
</select>
'학원 > 복기' 카테고리의 다른 글
[Mybatis] 전달값 표현식 / bind 엘리먼트 (0) | 2023.07.23 |
---|---|
[MyBatis] 매퍼에 등록된 SQL 명령에 필요한 값 전달하기 / Map 객체 이용하기 (0) | 2023.07.21 |
[MyBatis] 조인예제(3) / collection 엘리먼트, autoMapping 속성 (0) | 2023.07.21 |
[MyBatis] 조인예제(2) / association 엘리먼트의 속성 (0) | 2023.07.21 |
[MyBatis] 비교연산자가 엘리먼트로 인식되는 에러 해결 (0) | 2023.07.21 |