๋ชฉ์ฐจ
1. 2024.1.25(๋ชฉ)
F_MybatisWork03
ใด/MybatisWork03/src/com/test/mybatis
ใดใดGradeController.java
/* ==================================================
#09 GradeController.java
- Controller
=====================================================*/
package com.test.mybatis;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class GradeController
{
//์ฃผ์ ์์ฑ ๊ตฌ์ฑ
//mybatis ๊ฐ์ฒด ์์กด์ฑ(์๋) ์ฃผ์
@Autowired
private SqlSession sqlSession;
// ๋ฆฌ์คํธ ์กฐํ
@RequestMapping(value="/gradelist.action", method = RequestMethod.GET)
public String gradeList(ModelMap model)
{
IGradeDAO dao = sqlSession.getMapper(IGradeDAO.class);
model.addAttribute("count",dao.count());
model.addAttribute("list",dao.list());
return "/WEB-INF/view/GradeList.jsp";
}
// ์
๋ ฅ ํผ
@RequestMapping(value="/gradeinsertform.action")
public String studentInsertForm(String sid, ModelMap model)
{
IGradeDAO dao = sqlSession.getMapper(IGradeDAO.class);
GradeDTO grade = dao.search(Integer.parseInt(sid));
model.addAttribute("grade", grade);
return "/WEB-INF/view/GradeInsertForm.jsp";
}
// ์
๋ ฅ
@RequestMapping(value="/gradeinsert.action", method = RequestMethod.POST)
public String studentInsert(GradeDTO grade)
{
IGradeDAO dao = sqlSession.getMapper(IGradeDAO.class);
dao.add(grade);
return "redirect:gradelist.action";
}
// ์ญ์
@RequestMapping(value="/gradedelete.action", method = RequestMethod.GET)
public String studentDelete(String sid)
{
IGradeDAO dao = sqlSession.getMapper(IGradeDAO.class);
dao.remove(Integer.parseInt(sid));
return "redirect:gradelist.action";
}
// ์
๋ฐ์ดํธ ํผ
@RequestMapping(value= "/gradeupdateform.action", method = RequestMethod.GET)
public String studentUpdateForm(String sid, ModelMap model)
{
IGradeDAO dao = sqlSession.getMapper(IGradeDAO.class);
GradeDTO grade = dao.search(Integer.parseInt(sid));
model.addAttribute("grade", grade);
return "/WEB-INF/view/GradeUpdateForm.jsp";
}
// ์
๋ฐ์ดํธ
@RequestMapping(value= "/gradeupdate.action", method = RequestMethod.POST)
public String studentUpdate(GradeDTO grade)
{
IGradeDAO dao = sqlSession.getMapper(IGradeDAO.class);
dao.update(grade);
return "redirect:gradelist.action";
}
}
ใดใดGradeDTO.java
/* ==================================================
#03 GradeDTO.java
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ก ๊ฐ์ฒด ์๋ฃํ ํด๋์ค(DTO)
์ฑ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ์ก
=====================================================*/
package com.test.mybatis;
/*
CREATE TABLE TBL_GRADE
( SID NUMBER
, SUB1 NUMBER(3)
, SUB2 NUMBER(3)
, SUB3 NUMBER(3)
, CONSTRAINT GRADE_SID_PK PRIMARY KEY(SID)
, CONSTRAINT GRADE_SID_FK FOREIGN KEY(SID)
REFERENCES TBL_STUDENT(SID)
, CONSTRAINT GRADE_SUB1_CK CHECK(SUB1 BETWEEN 0 AND 100)
, CONSTRAINT GRADE_SUB2_CK CHECK(SUB2 BETWEEN 0 AND 100)
, CONSTRAINT GRADE_SUB3_CK CHECK(SUB3 BETWEEN 0 AND 100)
);
SELECT SID, NAME, SUB1, SUB2, SUB3, TOT, AVG, CH
FROM GRADEVIEW
ORDER BY SID;
*/
public class GradeDTO
{
// ์ฃผ์ ์์ฑ ๊ตฌ์ฑ
private String sid, name, ch; //-- ๋ฒํธ, ์ด๋ฆ, ํฉ๊ฒฉ/๋ถํฉ๊ฒฉ
private int sub1, sub2, sub3, tot; //-- ์ฑ์ 1, ์ฑ์ 2, ์ฑ์ 3, ํฉ๊ณ
private double avg; //-- ํ๊ท
// ์ฌ์ฉ์ ์ ์ ์์ฑ์ ์ ์ ์ํจ
// → default ์์ฑ์ ์๋ ์ฝ์
// getter / setter ๊ตฌ์ฑ
public String getSid()
{
return sid;
}
public void setSid(String sid)
{
this.sid = sid;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getCh()
{
return ch;
}
public void setCh(String ch)
{
this.ch = ch;
}
public int getSub1()
{
return sub1;
}
public void setSub1(int sub1)
{
this.sub1 = sub1;
}
public int getSub2()
{
return sub2;
}
public void setSub2(int sub2)
{
this.sub2 = sub2;
}
public int getSub3()
{
return sub3;
}
public void setSub3(int sub3)
{
this.sub3 = sub3;
}
public int getTot()
{
return tot;
}
public void setTot(int tot)
{
this.tot = tot;
}
public double getAvg()
{
return avg;
}
public void setAvg(double avg)
{
this.avg = avg;
}
}
ใดใดIGradeDAO.java
/* ==================================================
#05 IGradeDAO.java
- ์ธํฐํ์ด์ค
ํ์ ๋ฐ์ดํฐ ์ก์
์ฒ๋ฆฌ ๋ฉ์๋ ์ ์ธ
=====================================================*/
package com.test.mybatis;
import java.util.ArrayList;
public interface IGradeDAO
{
public ArrayList<StudentDTO> list(); //-- ๋ฆฌ์คํธ์กฐํ
public int count(); //-- ์ด ๊ฐ์
public int add(GradeDTO grade); //-- ์ฑ์ ๋ฐ์ดํฐ ์ถ๊ฐ
public int remove(int sid); //-- ์ฑ์ ๋ฐ์ดํฐ ์ญ์
public GradeDTO search(int sid); //-- ์ฑ์ ๋ฐ์ดํฐ ๊ฒ์
public int update(GradeDTO grade);//-- ์ฑ์ ๋ฐ์ดํฐ ์
๋ฐ์ดํธ
}
ใดใดIStudentDAO.java
/* ==================================================
#04 IStudentDAO.java
- ์ธํฐํ์ด์ค
ํ์ ๋ฐ์ดํฐ ์ก์
์ฒ๋ฆฌ ๋ฉ์๋ ์ ์ธ
=====================================================*/
package com.test.mybatis;
import java.util.ArrayList;
public interface IStudentDAO
{
public ArrayList<StudentDTO> list(); //-- ๋ฆฌ์คํธ์กฐํ
public int count(); //-- ์ด ๊ฐ์
public int add(StudentDTO student); //-- ํ์ ๋ฐ์ดํฐ ์ถ๊ฐ
public int remove(int sid); //-- ํ์ ๋ฐ์ดํฐ ์ญ์
public StudentDTO search(int sid); //-- ํ์ ๋ฐ์ดํฐ ๊ฒ์
public int update(StudentDTO student);//-- ํ์ ๋ฐ์ดํฐ ์
๋ฐ์ดํธ
public int maxId(); //-- ํ์ ๋ฒํธ ์ต๋๊ฐ
}
ใดใดStudentController.java
/* ==================================================
#08 StudentController.java
- Controller
=====================================================*/
package com.test.mybatis;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class StudentController
{
//์ฃผ์ ์์ฑ ๊ตฌ์ฑ
//mybatis ๊ฐ์ฒด ์์กด์ฑ(์๋) ์ฃผ์
@Autowired
private SqlSession sqlSession;
// ๋ฆฌ์คํธ ์กฐํ
@RequestMapping(value="/studentlist.action", method = RequestMethod.GET)
public String studentList(ModelMap model)
{
IStudentDAO dao = sqlSession.getMapper(IStudentDAO.class);
model.addAttribute("count",dao.count());
model.addAttribute("list",dao.list());
return "/WEB-INF/view/StudentList.jsp";
}
// ์
๋ ฅ ํผ
@RequestMapping(value="/studentinsertform.action")
public String studentInsertForm()
{
return "/WEB-INF/view/StudentInsertForm.jsp";
}
// ์
๋ ฅ
@RequestMapping(value="/studentinsert.action", method = RequestMethod.POST)
public String studentInsert(StudentDTO student)
{
IStudentDAO dao = sqlSession.getMapper(IStudentDAO.class);
int sid = dao.maxId();
student.setSid(String.format("%s", sid));
dao.add(student);
return "redirect:studentlist.action";
}
// ์ญ์
@RequestMapping(value="/studentdelete.action", method = RequestMethod.GET)
public String studentDelete(String sid)
{
IStudentDAO dao = sqlSession.getMapper(IStudentDAO.class);
dao.remove(Integer.parseInt(sid));
return "redirect:studentlist.action";
}
// ์
๋ฐ์ดํธ ํผ
@RequestMapping(value= "/studentupdateform.action", method = RequestMethod.GET)
public String studentUpdateForm(String sid, ModelMap model)
{
IStudentDAO dao = sqlSession.getMapper(IStudentDAO.class);
StudentDTO student = dao.search(Integer.parseInt(sid));
model.addAttribute("student", student);
return "/WEB-INF/view/StudentUpdateForm.jsp";
}
// ์
๋ฐ์ดํธ
@RequestMapping(value= "/studentupdate.action", method = RequestMethod.GET)
public String studentUpdate(StudentDTO student)
{
IStudentDAO dao = sqlSession.getMapper(IStudentDAO.class);
dao.update(student);
return "redirect:studentlist.action";
}
}
ใดใดStudentDTO.java
/* ==================================================
#02 StudentDTO.java
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ก ๊ฐ์ฒด ์๋ฃํ ํด๋์ค(DTO)
ํ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ์ก
=====================================================*/
package com.test.mybatis;
/*
CREATE TABLE TBL_STUDENT
( SID NUMBER
, NAME VARCHAR2(30)
, TEL VARCHAR2(40)
, CONSTRAINT STUDENT_SID_PK PRIMARY KEY(SID)
);
SELECT SID, NAME, TEL, SUB
FROM STUDENTVIEW
ORDER BY SID;
*/
public class StudentDTO
{
// ์ฃผ์ ์์ฑ ๊ตฌ์ฑ
private String sid, name, tel; //-- ๋ฒํธ, ์ด๋ฆ, ์ ํ๋ฒํธ
private int sub; //-- ์ญ์ ๊ฐ๋ฅ ์ฌ๋ถ
// ์ฌ์ฉ์ ์ ์ ์์ฑ์ ์ ์ ์ํจ
// → default ์์ฑ์ ์๋ ์ฝ์
// getter / setter
public String getSid()
{
return sid;
}
public void setSid(String sid)
{
this.sid = sid;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getTel()
{
return tel;
}
public void setTel(String tel)
{
this.tel = tel;
}
public int getSub()
{
return sub;
}
public void setSub(int sub)
{
this.sub = sub;
}
}
ใด/MybatisWork03/src/com/test/mybatis/mapper
ใดใดGradeDAO.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="com.test.mybatis.IGradeDAO">
<!-- ============================================
#07 GradeDAO.xml
- mybatis ํ๊ฒฝ ์ค์ ํ์ผ ํ์ฉ
================================================= -->
<select id="list" resultType="com.test.mybatis.GradeDTO">
SELECT SID, NAME, SUB1, SUB2, SUB3, TOT, AVG, CH
FROM GRADEVIEW
ORDER BY SID
</select>
<select id="search" resultType="com.test.mybatis.GradeDTO">
SELECT SID, NAME, SUB1, SUB2, SUB3, TOT, AVG, CH
FROM GRADEVIEW
WHERE SID = #{SID}
</select>
<select id="count" resultType="java.lang.Integer">
SELECT COUNT(*) AS COUNT
FROM TBL_GRADE
</select>
<insert id="add">
INSERT INTO TBL_GRADE(SID, SUB1, SUB2, SUB3)
VALUES(#{sid},#{sub1},#{sub2},#{sub3})
</insert>
<delete id="remove">
DELETE
FROM TBL_GRADE
WHERE SID=#{sid}
</delete>
<update id="update">
UPDATE TBL_GRADE
SET SUB1=#{sub1}, SUB2=#{sub2}, SUB3=#{sub3}
WHERE SID = #{sid}
</update>
</mapper>
ใดใดStudentDAO.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="com.test.mybatis.IStudentDAO">
<!-- ============================================
#06 StudentDAO.xml
- mybatis ํ๊ฒฝ ์ค์ ํ์ผ ํ์ฉ
================================================= -->
<select id="list" resultType="com.test.mybatis.StudentDTO">
SELECT SID, NAME, TEL, SUB
FROM STUDENTVIEW
ORDER BY SID
</select>
<select id="search" resultType="com.test.mybatis.StudentDTO">
SELECT SID, NAME, TEL, SUB
FROM STUDENTVIEW
WHERE SID = #{sid}
</select>
<select id="count" resultType="java.lang.Integer">
SELECT COUNT(*) AS COUNT
FROM TBL_STUDENT
</select>
<select id="maxId" resultType="java.lang.Integer">
SELECT MAX(SID)+1
FROM TBL_STUDENT
</select>
<insert id="add">
INSERT INTO TBL_STUDENT(SID, NAME, TEL)
VALUES(#{sid}, #{name}, #{tel})
</insert>
<delete id="remove">
DELETE
FROM TBL_STUDENT
WHERE SID = #{sid}
</delete>
<update id="update">
UPDATE TBL_STUDENT
SET NAME=#{name}, TEL=#{tel}
WHERE SID = #{sid}
</update>
</mapper>
ใด/MybatisWork03/WebContent/css
ใดใดmain.css
... ๊ธฐ์กด ํ์ผ๊ณผ ๊ฑฐ์ ๋์ผ ...
ใดใดstyle.css
@charset "UTF-8";
/* ์นํฐํธ-Pretendard ------------------------------------------------------ */
@import url("https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css");
/* ์ด๊ธฐ์
ํ
------------------------------------------------------ */
*{font-family: Pretendard;box-sizing: border-box;}
body{margin: 0;}
dl, ul, ol, menu, li{list-style: none;}
ul{padding: 0;margin:0;}
p {margin:0;padding:0;}
a {text-decoration: none;}
input, select, textarea {margin:0; padding:0; box-sizing:border-box; -webkit-box-sizing:border-box; -moz-box-sizing: border-box;}
:root {
--border: #333;
--btn-border: #ddd;
--text: #707070;
--text-bold: #111;
--bg-gray: #eef3ff;
--main: #21409a;
--light1: #f6f3c3;
--light2: #dec3f6;
--white: #ffffffc2;
--disabled: #fafafa;
--student: #0177a9;
--grade: #FF9800;
--insert: #FF8F8F;
--update: #62c8eb;
}
/* section ------------------------------------------------------ */
.section{max-width: 1200px;width:100%;margin:0 auto;padding-left: 20px;padding-right: 20px;}
.section h1{font-size: 28px;}
.section input + input{margin-left: 4px;}
.section input[readonly]{background: var(--btn-border) !important;}
.section input[type="text"],
.section input[type="password"],
.section input[type="tel"]{padding: 4px;border-radius: 5px;background: var(--white);border: 1px solid var(--btn-border);}
.section input[type="text"]:disabled{background: var(--disabled);}
.section textarea{padding: 4px;border: 1px solid var(--btn-border);background: #fff;border-radius: 5px;transition: 0.6s;}
.section table{border-spacing:0;border-collapse:collapse;}
.tbl_ty01{}
.section table{border-top: 1px solid var(--text);}
.section table th{padding: 4px;background: #F2F2F2;text-align:center;}
.section table td{padding: 4px;border-bottom: 1px solid var(--btn-border);text-align:center;}
.section table tr{}
.section .layout{}
.section .layout [class*="_box"]{padding-top: 14px;padding-bottom:14px;}
.section .layout form > div{padding-top: 14px; padding-bottom: 14px;}
.section .layout .tit{display:inline-flex; align-items:center;}
.section .layout .tit + input{margin-left: 4px;}
/* ์ ๋ณด์์ญ */
.info_box{background: var(--light1);padding-left: 20px;padding-right: 20px;border-radius: 10px;}
/* ์
๋ ฅ์์ญ */
.input_box{background: var(--light2);padding-left: 20px;padding-right: 20px;border-radius: 10px;}
/* ๋ฒํผ์์ญ */
.btn_box{display: flex;}
.btn_box.center{justify-content: center;}
.btn_box [type="button"],
.btn_box [type="reset"],
.btn_box [type="submit"],
.btn{min-width: 100px;height: 30px;padding: 4px;font-weight: bold;border: 1px solid var(--btn-border);background: #fff;border-radius: 5px;transition: 0.6s;}
.btn + .btn{margin-left: 8px;}
.btn_box [type="button"].w_auto,
.btn_box [type="reset"].w_auto,
.btn.w_auto{min-width:50px;width:auto;}
.btn_box [type="submit"]:hover,
.btn_box [type="submit"]:active,
.btn_box [type="button"]:hover,
.btn_box [type="button"]:active,
.btn_box [type="reset"]:hover,
.btn_box [type="reset"]:active,
.btn:hover,.btn:active{background: var(--bg-gray);border-color: var(--border);}
/* ๊ฒฐ๊ณผ ์์ญ */
.section .layout .result_box{}
.section .layout ul>li + li{margin-top: 6px;}
.section .layout ul>li .tit{display: inline-block;width: 100px;}
.section .layout >div>ul>li .ip_box{}
/* ------------------------------------------------------ */
.section .color_list{}
.section .color_insert{color: #FF8F8F;}
.section .color_update{color: #508D69;}
.section.grade .color_title{color: var(--grade);}
.section.student .color_title{color: var(--student);}
#menu{margin: 20px 0 40px;}
#menu > ul{display: flex;}
#menu > ul > li{flex: 1 1 auto;}
#menu > ul > li >a{display: block;width: 100%;text-align: center;padding: 20px;font-size: 20px;font-weight: 700;background: var(--student);}
#menu > ul > li >a:hover{opacity: 0.5;}
#menu > ul > li:nth-child(2n) >a{background: var(--grade);}
#menu > ul > li >a{color: #fff;}
.info_desc{text-align: right;margin-bottom: 4px;}
.c_red{color: var(--grade);}
ใด/MybatisWork03/WebContent/WEB-INF/view
ใดใดGradeInsertForm.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/style.css">
</head>
<body>
<body class="section grade">
<!-- ๊ณตํต ๋ฉ๋ด -->
<div>
<c:import url="ListMenu.jsp"></c:import>
</div>
<div>
<h1><span class="color_title">์ฑ์ </span> ๋ฐ์ดํฐ <span class="color_insert">์
๋ ฅ</span> ํ์ด์ง</h1>
</div>
<div class="layout">
<!-- ์ฑ์ ๋ฐ์ดํฐ ์
๋ ฅ ํผ ๊ตฌ์ฑ -->
<form action="gradeinsert.action" method="post" id="gradeScoreForm">
<table class="table">
<tr>
<th>๋ฒํธ</th>
<td style="text-align:left;">${grade.sid }</td>
<input type="hidden" id="sid" name="sid" value="${grade.sid }">
</tr>
<tr>
<th style="width: 150px;">์ด๋ฆ</th>
<td style="text-align:left;">${grade.name }</td>
<input type="hidden" id="name" name="name" value="${grade.name }">
</tr>
<tr>
<th>๊ตญ์ด์ ์</th>
<td style="text-align:left;">
<input type="text" id="sub1" name="sub1" value="">
</td>
</tr>
<tr>
<th>์์ด์ ์</th>
<td style="text-align:left;">
<input type="text" id="sub2" name="sub2" value="">
</td>
</tr>
<tr>
<th>์ํ์ ์</th>
<td style="text-align:left;">
<input type="text" id="sub3" name="sub3" value="">
</td>
</tr>
</table>
<div class="btn_box">
<button type="submit">์
๋ ฅํ๊ธฐ</button>
<input type="reset" value="์ทจ์ํ๊ธฐ" />
<a href="gradelist.action"><button type="button">๋ชฉ๋ก์ผ๋ก</button></a>
</div>
</form>
</div>
</body>
</body>
</html>
ใดใดGradeList.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>StudentList.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/style.css">
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$(".btnCancel").click(function ()
{
if(confirm("๋ฐ์ดํฐ๋ฅผ ์ ๋ง ์ญ์ ํ์๊ฒ ์ต๋๊น?"))
{
$(location).attr("href","gradedelete.action?sid="+$(this).val());
}
})
})
</script>
</head>
<body class="section grade">
<!-- ๊ณตํต ๋ฉ๋ด -->
<div>
<c:import url="ListMenu.jsp"></c:import>
</div>
<div>
<h1><span class="color_title">์ฑ์ </span> ๊ด๋ฆฌ ๋ฐ <span class="color_list">์ถ๋ ฅ</span> ํ์ด์ง</h1>
</div>
<div class="info_desc">์ฑ์ ์ฒ๋ฆฌ ์ธ์์: ${count }</div>
<!-- ๋ฒํธ ์ด๋ฆ ๊ตญ์ด์ ์ ์์ด์ ์ ์ํ์ ์ ์ด์ ํ๊ท ์ฑ์ ์ฒ๋ฆฌ(์
๋ ฅ ์์ ์ญ์ ) -->
<table>
<tr>
<th style="width: 10%">๋ฒํธ</th>
<th style="width: 10%">์ด๋ฆ</th>
<th>๊ตญ์ด์ ์</th><th>์์ด์ ์</th><th>์ํ์ ์</th>
<th>์ด์ </th><th>ํ๊ท </th><th>ํฉ๊ฒฉ์ฌ๋ถ</th>
<th>์ฑ์ ์ฒ๋ฆฌ</th>
</tr>
<c:forEach var="grade" items="${list}">
<tr>
<td>${grade.sid}</td>
<td>${grade.name}</td>
<td>${grade.sub1 >-1 ? grade.sub1 : '<span class="c_red">๋ฏธ๋ฑ๋ก</span>'}</td>
<td>${grade.sub2 >-1 ? grade.sub2 : '<span class="c_red">๋ฏธ๋ฑ๋ก</span>'}</td>
<td>${grade.sub3 >-1 ? grade.sub3 : '<span class="c_red">๋ฏธ๋ฑ๋ก</span>'}</td>
<td>${grade.tot >-1 ? grade.tot : '<span class="c_red">๋ฏธ๋ฑ๋ก</span>'}</td>
<td>${grade.avg >-1 ? grade.avg : '<span class="c_red">๋ฏธ๋ฑ๋ก</span>'}</td>
<td>${grade.ch}</td>
<td>
<button type="button" class="btn01" ${grade.sub1 >-1 && grade.sub2 >-1 && grade.sub3 >-1 ? "disabled='disabled'" : "" }
onclick="location.href='gradeinsertform.action?sid=${grade.sid}'"
>์
๋ ฅ</button>
<button type="button" class="btn01" ${grade.sub1 >-1 && grade.sub2 >-1 && grade.sub3 >-1 ? "" : "disabled='disabled'" }
onclick="location.href='gradeupdateform.action?sid=${grade.sid}'"
>์์ </button>
<button type="button" class="btn01 btnCancel" ${grade.sub1 >-1 && grade.sub2 >-1 && grade.sub3 >-1 ? "" : "disabled='disabled'" }
value="${grade.sid}">์ญ์ </button>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
ใดใดGradeUpdateForm.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>GradeUpdateForm.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/style.css">
</head>
<body class="section grade">
<!-- ==================================================
#15 GradeUpdateForm.jsp
- view ํ์ด์ง
(์ฑ์ ๋ช
๋จ ์์ ํผ ๊ตฌ์ฑ)
===================================================== -->
<!-- ๊ณตํต ๋ฉ๋ด -->
<div>
<c:import url="ListMenu.jsp"></c:import>
</div>
<div>
<h1><span class="color_title">์ฑ์ </span> ๋ฐ์ดํฐ <span class="color_update">์์ </span> ํ์ด์ง</h1>
</div>
<div class="layout">
<div>
<!-- ์ฑ์ ๋ฐ์ดํฐ ์์ ํผ ๊ตฌ์ฑ -->
<form action="gradeupdate.action" method="post" id="gradeScoreForm">
<table class="table">
<tr>
<th>๋ฒํธ</th>
<td style="text-align:left;">${grade.sid }</td>
<input type="hidden" id="sid" name="sid" value="${grade.sid }">
</tr>
<tr>
<th style="width: 150px;">์ด๋ฆ</th>
<td style="text-align:left;">${grade.name }</td>
<input type="hidden" id="name" name="name" value="${grade.name }">
</tr>
<tr>
<th>๊ตญ์ด์ ์</th>
<td style="text-align:left;">
<input type="text" id="sub1" name="sub1" value="${grade.sub1 }">
</td>
</tr>
<tr>
<th>์์ด์ ์</th>
<td style="text-align:left;">
<input type="text" id="sub2" name="sub2" value="${grade.sub2 }"">
</td>
</tr>
<tr>
<th>์ํ์ ์</th>
<td style="text-align:left;">
<input type="text" id="sub3" name="sub3" value="${grade.sub3 }"">
</td>
</tr>
</table>
<div class="btn_box">
<button type="submit">์์ ํ๊ธฐ</button>
<input type="reset" value="์ทจ์ํ๊ธฐ" />
<a href="gradelist.action"><button type="button">๋ชฉ๋ก์ผ๋ก</button></a>
</div>
</form>
</div>
</div>
</body>
</html>โ
ใดใดListMenu.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<!-- -------------------------------------
#18 listMenu.jsp
- ๋ฉ์ธ ๋ฉ๋ด ํ์ด์ง ๊ตฌ์ฑ
------------------------------------------ -->
<div id="menu">
<ul>
<li><a href="studentlist.action" class="menu">ํ์ ์ ๋ณด</a></li>
<li><a href="gradelist.action" class="menu">์ฑ์ ์ ๋ณด</a></li>
</ul>
</div>
</body>
</html>โ
ใดใดStudentInsertForm.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>StudentList.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/style.css">
</head>
<body class="section student">
<!-- ==================================================
#11 StudentInsertForm.jsp
- view ํ์ด์ง
(ํ์ ๋ช
๋จ ์
๋ ฅ ํผ ๊ตฌ์ฑ)
===================================================== -->
<!-- ๊ณตํต ๋ฉ๋ด -->
<div>
<c:import url="ListMenu.jsp"></c:import>
</div>
<div>
<h1><span class="color_title">ํ์</span> ๋ฐ์ดํฐ <span class="color_insert">์
๋ ฅ</span> ํ์ด์ง</h1>
</div>
<div class="layout">
<div>
<!-- ํ์ ๋ฐ์ดํฐ ์
๋ ฅ ํผ ๊ตฌ์ฑ -->
<form action="studentinsert.action" method="post" id="StudentForm">
<table class="table" style="width: 600px">
<tr>
<th style="width: 150px;">์ด๋ฆ</th>
<td>
<input type="text" id="name" name="name">
</td>
</tr>
<tr>
<th>์ ํ๋ฒํธ</th>
<td>
<input type="text" id="tel" name="tel">
</td>
</tr>
</table>
<div class="btn_box">
<button type="submit">์
๋ ฅํ๊ธฐ</button>
<input type="reset" value="์ทจ์ํ๊ธฐ" />
<a href="studentlist.action"><button type="button">๋ชฉ๋ก์ผ๋ก</button></a>
</div>
</form>
</div>
</div>
</body>
</html>โ
ใดใดStudentList.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>StudentList.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/style.css">
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$(".btnCancel").click(function ()
{
if(confirm("๋ฐ์ดํฐ๋ฅผ ์ ๋ง ์ญ์ ํ์๊ฒ ์ต๋๊น?"))
{
$(location).attr("href","studentdelete.action?sid="+$(this).val());
}
})
})
</script>
</head>
<body class="section student">
<!-- ==================================================
#10 StudentList.jsp
- view ํ์ด์ง
(ํ์ ๋ช
๋จ ์ถ๋ ฅ ๋ ์ด์์ ๊ตฌ์ฑ)
===================================================== -->
<!-- ๊ณตํต ๋ฉ๋ด -->
<div>
<c:import url="ListMenu.jsp"></c:import>
</div>
<div>
<h1><span class="color_title">ํ์</span> ๊ด๋ฆฌ ๋ฐ <span class="color_list">์ถ๋ ฅ</span> ํ์ด์ง</h1>
</div>
<div class="layout">
<div class="btn_box">
<a href="studentinsertform.action"><button type="button">์ ๊ท ํ์ ๋ฑ๋ก</button></a>
</div>
<div class="info_desc">์ด ์ธ์์: ${count }</div>
<!-- ๋ฆฌ์คํธ ์ถ๋ ฅ -->
<table class="table">
<tr>
<th style="width: 25%">๋ฒํธ</th>
<th style="width: 25%">์ด๋ฆ</th>
<th style="width: 25%">์ ํ๋ฒํธ</th>
<th style="width: 25%">๊ด๋ฆฌ</th>
</tr>
<!--
<tr>
<td>1</td>
<td>ํ์1</td>
<td>010-1111-1111</td>
<td>
<a><button type="button" class="btnUpdate">์์ </button></a>
<a><button type="button" class="btnCancel">์ญ์ </button></a>
</td>
</tr>
-->
<c:forEach var="student" items="${list}">
<tr>
<td>${student.sid}</td>
<td>${student.name}</td>
<td>${student.tel}</td>
<td>
<a href="studentupdateform.action?sid=${student.sid}"><button type="button" class="btnUpdate" value="${student.sid }">์์ </button></a>
<%-- <button type="button" class="btn btn-default btn-xs btnInsert"
onclick="location.href='gradeinsertform.action?sid=${student.sid}'"
${student.sub == 0 ? "style=\"display:inline;\"" : "style=\"display:none;\"" }>์ฑ์ ์
๋ ฅ</button> --%>
<button type="button" class="btnCancel"
${student.sub >0 ? "disabled='disabled'": ""} value="${student.sid }">์ญ์ </button>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>โ
ใดใดStudentUpdateForm.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>StudentList.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/style.css">
</head>
<body class="section student">
<!-- ==================================================
#14 StudentUpdateForm.jsp
- view ํ์ด์ง
(ํ์ ๋ช
๋จ ์์ ํผ ๊ตฌ์ฑ)
===================================================== -->
<!-- ๊ณตํต ๋ฉ๋ด -->
<div>
<c:import url="ListMenu.jsp"></c:import>
</div>
<div>
<h1><span class="color_title">ํ์</span> ๋ฐ์ดํฐ <span class="color_update">์์ </span> ํ์ด์ง</h1>
</div>
<div class="layout">
<div>
<!-- ํ์ ๋ฐ์ดํฐ ์์ ํผ ๊ตฌ์ฑ -->
<form action="studentupdate.action" method="get" id="StudentForm">
<table class="table" style="width: 600px">
<tr>
<th style="width: 150px;">๋ฒํธ</th>
<td>
<input type="text" id="sid" name="sid" value="${student.sid}" readonly="readonly">
</td>
</tr>
<tr>
<th style="width: 150px;">์ด๋ฆ(*)</th>
<td>
<input type="text" id="name" name="name" value="${student.name}">
</td>
</tr>
<tr>
<th>์ ํ๋ฒํธ</th>
<td>
<input type="text" id="tel" name="tel" value="${student.tel}">
</td>
</tr>
</table>
<div class="btn_box">
<button type="submit">์์ ํ๊ธฐ</button>
<input type="reset" value="์ทจ์ํ๊ธฐ" />
<a href="studentlist.action"><button type="button">๋ชฉ๋ก์ผ๋ก</button></a>
</div>
</form>
</div>
</div>
</body>
</html>โ
ใด /MybatisWork03/WebContent/WEB-INF
ใดใด dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- โป ์ฌ์ฉ์ ์ ์ Controller ๊ฐ์ฒด ๋ฑ๋ก ๋ฐ URL ๋งคํ ์ฃผ์ ๋ฑ๋ก -->
<!-- - ใname=""ใ์์ฑ์ ๋งคํ ์ฃผ์๋ฅผ ๋ฑ๋กํ๋ค. -->
<!-- ์ด ๊ณผ์ ์์ Front Controller ๊ฐ ๊ฐ๊ณ ์๋ ํ์ฅ์์ ํํ๋ก ๊ตฌ์ฑํ๋ค. -->
<!-- - ใclass=""ใ์์ฑ -->
<!-- ์ Controller ๊ฐ์ฒด์ ํจํค์ง ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ํด๋์ค ์ด๋ฆ์ ๋ฑ๋กํ๋ค. -->
<!-- โ ๊ธฐ์กด ์ฝ๋ -->
<!-- โป Annotation ํ๊ธฐ๋ฒ์ผ๋ก Controller ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ ์ ์๋๋ก ํ๋ค. -->
<!-- <context:component-scan base-package="org.springframework.samples.petclinic.web" /> -->
<context:component-scan base-package="com.test.mybatis" />
<!-- โข mybatis ๋ฑ๋ก ๊ณผ์ ์์ ์๊ฒจ๋๋ ์ถ๊ฐ ์ฝ๋ ใ2ใ -->
<!-- โป mybatis ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ๊ฒฝ ์ค์ ์ ์ถ๊ฐํ๋ ๊ณผ์ ์์ -->
<!-- ํ์ํ datatSource ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ๊ฒฝ ์ค์ ์ถ๊ฐ -->
<bean id="localDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@211.238.142.167:1521:xe"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<!-- โก mybatis ๋ฑ๋ก ๊ณผ์ ์์ ์๊ฒจ๋๋ ์ถ๊ฐ ์ฝ๋ ใ1ใ -->
<!-- โป mybatis ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ๊ฒฝ ์ค์ ์ถ๊ฐ -->
<!-- → SqlSessionFactoryBean ๋ฑ๋ก -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- โฃ dataSource ๋ฅผ ๋ฑ๋กํ๊ณ ์์ ๋ค์ ์ถ๊ฐ -->
<property name="dataSource" ref="localDataSource"></property>
<!-- โค ๋งคํผ ํ์ผ์ ์์ฑํ๊ณ ์์ ๋ค์ ์ถ๊ฐ -->
<!-- value ๊ตฌ์ฑ ๊ณผ์ check~!!! -->
<property name="mapperLocations" value="classpath:com/test/mybatis/mapper/*.xml"></property>
</bean>
<!-- ** ์ธํฐํ์ด์ค ์์ ๋ฉ์๋๊ฐ ๋ค์ด๊ฐ ๊ฒ
์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ฒดํ ์์ผ์ ๋์๊ฐ๊ฒ ํ๋ ๊ฒ
** -->
<!-- โฅ mybatis ๋ฑ๋ก ๊ณผ์ ์์ ์๊ฒจ๋๋ ์ถ๊ฐ ์ฝ๋ ใ3ใ -->
<!-- โป SqlSession ์ ์ฌ์ฉํ๊ธฐ ์ํ ํ๊ฒฝ ์ค์ ์ถ๊ฐ -->
<!-- → SqlSessionTemplate ๋ฑ๋ก -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
<!-- ใ<constructor-arg>ใ: ์์ฑ์์ ์ธ์๊ฐ์ ๋๊ฒจ ์ฃผ๊ฒ ๋ค./ ใindex="0"ใ: 0๋ฒ์งธ ๋งค๊ฐ๋ณ์ ์ ๋ฌ -->
</bean>
</beans>
ใดใด web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>Mvc00</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- #18. web.xml -->
<!-- โป Spring MVC Framework ๋ฑ๋ก -->
<!-- → Front Controller ๋ฑ๋ก -->
<!-- → DispatcherServlet ๋ฑ๋ก -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- check~!!! -->
<!-- ํํฐ ๋ฑ๋ก → ์ธ์ฝ๋ฉ ํํฐ ๋ฑ๋ก → CharacterEncodingFilter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- **java ํ์ผ์์ ์์น ์ฐพ์์ค๊ธฐ -->
<!-- ํํฐ ์ค์ → ํํฐ ๊ฐ์ฒด์ ํ๋ผ๋ฏธํฐ ์ด๊ธฐ๊ฐ ์ค์ -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<!-- <url-pattern>*.action</url-pattern> --> <!-- **ใ*.actionใ: action์ผ ๊ฒฝ์ฐ ๋์ -->
<url-pattern>/*</url-pattern> <!-- **ใ/*ใ : ์ด๋ค ์ก์
์ด๋ ๋ชจ๋ ๋์ -->
</filter-mapping>
</web-app>
ใด /MybatisWork03/WebContent
ใดใด studentlist.action
... ๋ด์ฉ ์์ ...
ใดMybatisWork03_scott.sql
SELECT USER
FROM DUAL;
--==>> SCOTT
--โ ์ค์ต ํ
์ด๋ธ ์์ฑ
CREATE TABLE TBL_STUDENT
( SID NUMBER
, NAME VARCHAR2(30)
, TEL VARCHAR2(40)
, CONSTRAINT STUDENT_SID_PK PRIMARY KEY(SID)
);
--==>> Table TBL_STUDENT์ด(๊ฐ) ์์ฑ๋์์ต๋๋ค.
--โ ๋ฐ์ดํฐ ์
๋ ฅ
INSERT INTO TBL_STUDENT(SID, NAME, TEL)
VALUES(1, '์ ํ์ฑ', '010-1111-1111');
INSERT INTO TBL_STUDENT(SID, NAME, TEL)
VALUES(2, '์ด์ค์', '010-2222-2222');
INSERT INTO TBL_STUDENT(SID, NAME, TEL)
VALUES(3, '๊ฐํ์ฑ', '010-3333-3333');
INSERT INTO TBL_STUDENT(SID, NAME, TEL)
VALUES(4, '๋ฐ๋ฒ๊ตฌ', '010-4444-4444');
--==>> 1 ํ ์ด(๊ฐ) ์ฝ์
๋์์ต๋๋ค. * 4
--โ ํ์ธ
SELECT SID, NAME, TEL
FROM TBL_STUDENT;
--==>>
/*
1 ์ ํ์ฑ 010-1111-1111
2 ์ด์ค์ 010-2222-2222
3 ๊ฐํ์ฑ 010-3333-3333
4 ๋ฐ๋ฒ๊ตฌ 010-4444-4444
*/
--โ ์ปค๋ฐ
COMMIT;
--==>> ์ปค๋ฐ ์๋ฃ.
--โ ์ค์ตํ
์ด๋ธ ์์ฑ
CREATE TABLE TBL_GRADE
( SID NUMBER
, SUB1 NUMBER(3)
, SUB2 NUMBER(3)
, SUB3 NUMBER(3)
, CONSTRAINT GRADE_SID_PK PRIMARY KEY(SID)
, CONSTRAINT GRADE_SID_FK FOREIGN KEY(SID)
REFERENCES TBL_STUDENT(SID)
, CONSTRAINT GRADE_SUB1_CK CHECK(SUB1 BETWEEN 0 AND 100)
, CONSTRAINT GRADE_SUB2_CK CHECK(SUB2 BETWEEN 0 AND 100)
, CONSTRAINT GRADE_SUB3_CK CHECK(SUB3 BETWEEN 0 AND 100)
);
--==>> Table TBL_GRADE์ด(๊ฐ) ์์ฑ๋์์ต๋๋ค.
--โ ๋ฐ์ดํฐ ์
๋ ฅ
INSERT INTO TBL_GRADE(SID, SUB1, SUB2, SUB3)
VALUES(1,90,90,80);
INSERT INTO TBL_GRADE(SID, SUB1, SUB2, SUB3)
VALUES(2,92,92,92);
INSERT INTO TBL_GRADE(SID, SUB1, SUB2, SUB3)
VALUES(3,70,60,50);
--==>> 1 ํ ์ด(๊ฐ) ์ฝ์
๋์์ต๋๋ค. * 3
--โ ํ์ธ
SELECT *
FROM TBL_GRADE;
--==>>
/*
1 90 90 80
2 92 92 92
3 70 60 50
*/
--โ ์ปค๋ฐ
COMMIT;
--==>> ์ปค๋ฐ ์๋ฃ.
--โ ๋ทฐ ์์ฑ(STUDENTVIEW)
CREATE OR REPLACE VIEW STUDENTVIEW
AS
SELECT S.SID AS SID
, S.NAME AS NAME
, S.TEL AS TEL
, (SELECT COUNT(*)
FROM TBL_GRADE
WHERE SID = S.SID) AS SUB
FROM TBL_STUDENT S;
--==>> View STUDENTVIEW์ด(๊ฐ) ์์ฑ๋์์ต๋๋ค.
--โ ๋ทฐ ์์ฑ(GRADEVIEW)
CREATE OR REPLACE VIEW GRADEVIEW
AS
SELECT S.SID AS SID
, S.NAME AS NAME
, NVL(G.SUB1, -1) AS SUB1
, NVL(G.SUB2, -1) AS SUB2
, NVL(G.SUB3, -1) AS SUB3
, NVL((G.SUB1 + G.SUB2 + G.SUB3), -1) AS TOT
, NVL(ROUND((G.SUB1 + G.SUB2 + G.SUB3)/3,1),-1) AS AVG
, (CASE WHEN NVL((G.SUB1 + G.SUB2 + G.SUB3)/3, -1) <= 60 THEN '๋ถํฉ๊ฒฉ'
WHEN (G.SUB1<=40) OR (G.SUB2<=40) OR (G.SUB3<=40) THEN '๊ณผ๋ฝ'
ELSE 'ํฉ๊ฒฉ'
END) AS CH
-- ,RANK() OVER(ORDER BY (SUB1+SUB2+SUB3) DESC) AS RANK
FROM TBL_STUDENT S LEFT JOIN TBL_GRADE G
ON S.SID = G.SID;
--==>> View GRADEVIEW์ด(๊ฐ) ์์ฑ๋์์ต๋๋ค.
--โ ๋ทฐ(STUDENTVIEW) ์กฐํ
SELECT SID, NAME, TEL, SUB
FROM STUDENTVIEW
ORDER BY SID;
--==>>
/*
1 ์ ํ์ฑ 010-1111-1111 1
2 ์ด์ค์ 010-2222-2222 1
3 ๊ฐํ์ฑ 010-3333-3333 1
4 ๋ฐ๋ฒ๊ตฌ 010-4444-4444 0
*/
--โ
SELECT SID, NAME, TEL, SUB
FROM STUDENTVIEW
WHERE SID = 1;
--โ
UPDATE TBL_STUDENT
SET NAME='์์ ', TEL='010-7777-7777'
WHERE SID = 4;
ROLLBACK;
--โ ๋ทฐ(GRADEVIEW) ์กฐํ
SELECT SID, NAME, SUB1, SUB2, SUB3, TOT, AVG, CH
FROM GRADEVIEW
ORDER BY SID;
--==>>
/*
1 ์ ํ์ฑ 90 90 80 260 86.7 ํฉ๊ฒฉ
2 ์ด์ค์ 92 92 92 276 92 ํฉ๊ฒฉ
3 ๊ฐํ์ฑ 70 60 50 180 60 ๋ถํฉ๊ฒฉ
4 ๋ฐ๋ฒ๊ตฌ -1 -1 -1 -1 -1 ๋ถํฉ๊ฒฉ
*/
--โ ์ธ์ ์ ํ์ธ
SELECT COUNT(*) AS COUNT
FROM TBL_STUDENT;
--==>> 4
--โ ์ฑ์ ์ฒ๋ฆฌ ์ ํ์ธ
SELECT COUNT(*) AS COUNT
FROM TBL_GRADE;
--โ ํ์ ๋ฐ์ดํฐ ์ญ์
DELETE
FROM TBL_STUDENT
WHERE SID = 4;
--โ ์ฑ์ ๋ฐ์ดํฐ ์ญ์
DELETE
FROM TBL_GRADE
WHERE SID=3;
--โ
ROLLBACK;
COMMIT;