어제 MyBatis 초기 세팅을 배웠는데
세팅을 하고 JDBC 4 단계가 MyBatis에서는 얼마나 어떻게
줄어드는 지 확인한다.
insert문을 먼저 만들건데,
전체적인 구조는 이렇다.
그 많은 JDBC 코드가 5줄 내로 줄었다.
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">
<mapper namespace="member">
<insert id="insert" parameterType="memberDTO">
insert into member values (#{id}, #{pw}, #{name}, #{tel})
</insert>
<!-- insert, update, delete문은 결과가 int임
mybatis에서는 resultType="int"가 자동으로 들어가있음 -->
</mapper>
MemberDAO
package com.multi.mvc04;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository // 어딘가에 저장하기 위한 용도의 어노테이션
public class MemberDAO {
@Autowired
SqlSessionTemplate my; // 100번 주소
public int insert(MemberDTO dto) {
// 기존에는 JDBC 4단계 일일이 코딩했음
return my.insert("member.insert", dto);
}
}
MemberController
package com.multi.mvc04;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MemberController {
@Autowired
MemberDAO dao; // di
@RequestMapping("insert")
public void insert(MemberDTO dto) {
int result = dao.insert(dto);
System.out.println(result);
}
}
다음은 update 부분도 만들어준다.
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">
<mapper namespace="member">
<insert id="insert" parameterType="memberDTO">
insert into member values (#{id}, #{pw}, #{name}, #{tel})
</insert>
<!-- insert, update, delete문은 결과가 int임
mybatis에서는 resultType="int"가 자동으로 들어가있음 -->
<!-- parameterType은 입력값 설정 -->
<update id="update" parameterType="memberDTO">
update member
set tel = #{tel}
where id = #{id}
</update>
</mapper>
MemberDAO
package com.multi.mvc04;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository // 어딘가에 저장하기 위한 용도의 어노테이션
public class MemberDAO {
@Autowired
SqlSessionTemplate my; // 100번 주소
public int insert(MemberDTO dto) {
// 기존에는 JDBC 4단계 일일이 코딩했음
return my.insert("member.insert", dto);
}
public int update(MemberDTO dto) {
return my.update("member.update", dto);
}
}
MemberController
package com.multi.mvc04;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MemberController {
@Autowired
MemberDAO dao; // di
@RequestMapping("insert")
public void insert(MemberDTO dto) {
int result = dao.insert(dto);
System.out.println(result);
}
@RequestMapping("update")
public void update(MemberDTO dto, Model model) {
int result = dao.update(dto);
System.out.println(result);
model.addAttribute("dto", dto);
}
}
수정요청된 데이터를 views 페이지에서 보여주기 위해
model을 사용했다.
검색하는 one이 좀 헷갈리는데
구조를 한 눈에 보기 위해 정리했다.
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">
<mapper namespace="member">
<insert id="insert" parameterType="memberDTO">
insert into member values (#{id}, #{pw}, #{name}, #{tel})
</insert>
<!-- insert, update, delete문은 결과가 int임
mybatis에서는 resultType="int"가 자동으로 들어가있음 -->
<!-- parameterType은 입력값 설정 -->
<update id="update" parameterType="memberDTO">
update member
set tel = #{tel}
where id = #{id}
</update>
<select id="one" parameterType="String" resultType="memberDTO">
select * from member
where id = #{id}
</select>
</mapper>
MemberDAO
package com.multi.mvc04;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository // 어딘가에 저장하기 위한 용도의 어노테이션
public class MemberDAO {
@Autowired
SqlSessionTemplate my; // 100번 주소
public int insert(MemberDTO dto) {
// 기존에는 JDBC 4단계 일일이 코딩했음
return my.insert("member.insert", dto);
}
public int update(MemberDTO dto) {
return my.update("member.update", dto);
}
public MemberDTO one(String id) {
return my.selectOne("member.one", id);
}
}
MemberController
package com.multi.mvc04;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MemberController {
@Autowired
MemberDAO dao; // di
@RequestMapping("insert")
public void insert(MemberDTO dto) {
int result = dao.insert(dto);
System.out.println(result);
}
@RequestMapping("update")
public void update(MemberDTO dto, Model model) {
int result = dao.update(dto);
System.out.println(result);
model.addAttribute("dto", dto);
}
@RequestMapping("one")
public void one(String id, Model model) {
MemberDTO dto = dao.one(id);
System.out.println(dto);
model.addAttribute("dto", dto);
}
}
마찬가지로 model을 통해 DB로부터 데이터를 끌어온다.
모든 데이터를 한 눈에 보기 위한 list 페이지를 만든다.
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">
<mapper namespace="member">
<insert id="insert" parameterType="memberDTO">
insert into member values (#{id}, #{pw}, #{name}, #{tel})
</insert>
<!-- insert, update, delete문은 결과가 int임
mybatis에서는 resultType="int"가 자동으로 들어가있음 -->
<!-- parameterType은 입력값 설정 -->
<update id="update" parameterType="memberDTO">
update member
set tel = #{tel}
where id = #{id}
</update>
<!-- 마이바티스에서 controller의 string id을 string에 받아서 저장 -->
<select id="one" parameterType="String" resultType="memberDTO">
select * from member
where id = #{id}
</select>
<select id="count" parameterType="String" resultType="int">
select count(id) from member
where name = ${name}
</select>
<select id="all" resultType="memberDTO">
select * from member
</select>
</mapper>
MemberDAO
package com.multi.mvc04;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository // 어딘가에 저장하기 위한 용도의 어노테이션
public class MemberDAO {
@Autowired
SqlSessionTemplate my; // 100번 주소
public int insert(MemberDTO dto) {
// 기존에는 JDBC 4단계 일일이 코딩했음
return my.insert("member.insert", dto);
}
public int update(MemberDTO dto) {
return my.update("member.update", dto);
}
public MemberDTO one(String id) {
return my.selectOne("member.one", id);
}
public List<MemberDTO> list() {
return my.selectList("member.all");
}
}
MemberController
package com.multi.mvc04;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MemberController {
@Autowired
MemberDAO dao; // di
@RequestMapping("insert")
public void insert(MemberDTO dto) {
int result = dao.insert(dto);
System.out.println(result);
}
@RequestMapping("update")
public void update(MemberDTO dto, Model model) {
int result = dao.update(dto);
System.out.println(result);
model.addAttribute("dto", dto);
}
@RequestMapping("one")
public void one(String id, Model model) {
MemberDTO dto = dao.one(id);
System.out.println(dto);
model.addAttribute("dto", dto);
}
@RequestMapping("list")
public void list(Model model) {
List<MemberDTO> list = dao.list();
model.addAttribute("list", list);
}
}
views 아래 list.jsp
<%@ page import="java.util.List" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- taglib 지시자, tomcat에게 미리 예고 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
회원 목록 검색<hr>
<c:forEach items="${list}" var="dto">
검색된 회원 ID : ${dto.id}<br>
검색된 회원 PW : ${dto.pw}<br>
검색된 회원 이름 : ${dto.name}<br>
검색된 회원 번호 : ${dto.tel}<hr>
</c:forEach>
</body>
</html>
마무리 팀프로젝트
- 추가할 table설정(항목 설정, 컬럼 제약조건설정)
- mybatis-config.xml에 추가할 내용 확인(mapper파일추가, alias추가)
- mapper파일 추가(이름, 어떤 crud를 사용할지 함께 정의)
- webapp아래 필요한 파일 확인
- views아래 필요한 파일 확인
- controller, dao확인
- dto확인
- 구현화면 + 에러(인원별 1개 이상)
- 에러(확인창 → 원인분석 → 해결과정)
나는 drug에 대한 목업 데이터를 받아서 진행했다.
drug_insert.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Drug Information</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0; /* 추가 */
display: flex;
flex-direction: column; /* 추가 */
justify-content: center;
align-items: center;
height: 95vh;
}
h3 {
margin-bottom: 10px;
}
table {
border-collapse: collapse;
width: 300px;
margin: 0 auto; /* 수정 */
}
th, td {
padding: 8px;
text-align: left;
}
.button-container {
text-align: center;
margin-top: 20px;
}
.button-container button {
padding: 10px 20px;
font-size: 16px;
background-color: #4CAF50;
border: none;
color: white;
cursor: pointer;
border-radius: 4px;
}
.button-container button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<h3>복용 약물 데이터 수집</h3><br>
<a href="drug_insert.jsp">
<button id="b1">첫페이지로</button>
</a><br>
<form action="drug_insert" method="post">
<table>
<tr>
<td>약물 ID :</td>
<td><input name="id" value="17"></td>
</tr>
<tr>
<td>약물 이름 :</td>
<td><input name="name" value="Nisoldipine"></td>
</tr>
<tr>
<td>제조사 :</td>
<td><input name="company" value="Washington"></td>
</tr>
<tr>
<td>약물 코드 :</td>
<td><input name="code" value="68428-228"></td>
</tr>
</table>
<div class="button-container">
<button type="submit" id="b2">Submit</button>
</div>
</form>
</body>
</html>
views / drug_insert.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="lightblue">
입력한 약물 정보<hr>
약물 ID : ${dto.id}<br>
약물 이름 : ${dto.name}<br>
제조사 : ${dto.company}<br>
약물 코드 : ${dto.code}
</body>
</html>
출력 결과
drug_update.jsp
views/ drug_update.jsp
출력 결과
drug_one.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Drug Information Read</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0; /* 추가 */
display: flex;
flex-direction: column; /* 추가 */
justify-content: center;
align-items: center;
height: 95vh;
}
h3 {
margin-bottom: 10px;
}
table {
border-collapse: collapse;
width: 300px;
margin: 0 auto; /* 수정 */
}
th, td {
padding: 8px;
text-align: left;
}
.button-container {
text-align: center;
margin-top: 20px;
}
.button-container button {
padding: 10px 20px;
font-size: 16px;
background-color: #4CAF50;
border: none;
color: white;
cursor: pointer;
border-radius: 4px;
}
.button-container button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<h3>복용 약물 목록</h3><br>
<a href="drug_one.jsp">
<button id="b1">첫페이지로</button>
</a><br>
<form action="drug_one" method="post">
<table>
<tr>
<td class="t1">약물 이름 :</td>
<td><input name="name" value="ZYFLO"></td>
</tr>
</table>
<div class="button-container">
<button type="submit" id="b2">Submit</button>
</div>
</form>
</body>
</html>
views / drug_one.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="lightblue">
입력한 약물 정보<hr>
약물 ID : ${dto.id}<br>
약물 이름 : ${dto.name}<br>
제조사 : ${dto.company}<br>
약물 코드 : ${dto.code}
</body>
</html>
출력 결과
DrugController.java
package com.multi.mvc04;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DrugController {
@Autowired
DrugDAO dao; //di
@RequestMapping("drug_insert")
public void insert(DrugDTO dto, Model model) {
int result = dao.insert(dto);
System.out.println(result);
model.addAttribute("dto", dto);
}
@RequestMapping("drug_update")
public void update(DrugDTO dto, Model model) {
int result = dao.update(dto);
System.out.println(result);
model.addAttribute("dto", dto);
}
@RequestMapping("drug_one")
public void one(String name, Model model) {
System.out.println(name);
DrugDTO dto = dao.one(name);
System.out.println(dto);
model.addAttribute("dto", dto);
}
}
DrugDAO.java
package com.multi.mvc04;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class DrugDAO {
@Autowired
SqlSessionTemplate mysql;
public int insert(DrugDTO dto) {
return mysql.insert("drug.insert", dto);
}
public int update(DrugDTO dto) {
return mysql.update("drug.update", dto);
}
public DrugDTO one(String name) {
return mysql.selectOne("drug.one", name);
}
}
DrugDTO.java
package com.multi.mvc04;
public class DrugDTO {
private String id;
private String name;
private String company;
private String code;
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 getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString() {
return "DrugDTO [id=" + id + ", name=" + name + ", company=" + company + ", code=" + code + "]";
}
}
drugMapper.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="drug">
<insert id="insert" parameterType="drugDTO">
insert into drug values (#{id}, #{name}, #{company}, #{code})
</insert>
<!-- parameterType은 입력값 설정 -->
<update id="update" parameterType="drugDTO">
update drug
set code = #{code}
where id = #{id}
</update>
<!-- 마이바티스에서 controller의 string id을 string에 받아서 저장 -->
<select id="one" parameterType="String" resultType="drugDTO">
select * from drug
where name = #{name}
</select>
</mapper>
'Back > Spring' 카테고리의 다른 글
Day49_Spring에서 MyBatis 사용하기 위한 세팅 (0) | 2023.07.05 |
---|---|
Day47_Library & Framework 차이점 (0) | 2023.07.04 |
Day46_STS로 CRUD 회원가입 페이지 구현_0703 (0) | 2023.07.03 |
Day42_Spring 정리 (0) | 2023.06.30 |
Day41_[Mac OS]Spring/STS 설치 및 세팅 (0) | 2023.06.30 |