๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ๋ฐฐ์šฐ๊ณ  ์ตํžˆ๊ธฐ +/Spring

(105)[Spring]16์ผ์ฐจ: ๐Ÿงจ๐ŸŽ‰โœจF_MybatisWork03: ํ•™์ƒ, ์„ฑ์  ๊ด€๋ฆฌโœจ๐ŸŽ‰๐Ÿงจ

by ์ข…์ด๋นจ๋Œ€ 2024. 1. 25.
TOP

๋ชฉ์ฐจ

    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;