ÃֽŠ°Ô½Ã±Û(JAVA)
2022.05.02 / 15:48

[JSP] 8. ¿µ¼ÓÇÁ·¹ÀÓ¿öÅ© MyBatis¸¦ È°¿ëÇÑ CRUD ±¸Çö - JSP¿Í Oracle(XML ¹æ½Ä)

ÄÚÄÚ·Î
Ãßõ ¼ö 111

[JSP] 8. ¿µ¼ÓÇÁ·¹ÀÓ¿öÅ© MyBatis¸¦ È°¿ëÇÑ CRUD ±¸Çö - JSP¿Í Oracle(XML ¹æ½Ä)


Á¶±Ý ¾Ë±â ½±°Ô ÀÛ¼ºÇÏ¿´´Ù.

"¿µ¼Ó ÇÁ·¹ÀÓ¿öÅ©"¶ó°í º¸¸é µÈ´Ù.

¿µ¼Ó ÇÁ·¹ÀÓ¿öÅ©¶ó´Â °ÍÀº DAO °´Ã¼¿¡¼­ µ¥ÀÌÅͺ£À̽º µ¥ÀÌÅÍÀÇ Ã³¸® ±â´ÉÀ» Á¦°øÇÏ´Â ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù.


´ëÇ¥ÀûÀÎ °Í: myBatis, Hibernate°¡ ÀÖ´Ù.


»ç¿ëµÇ´Â ¾ð¾î: JSP / Servlet,
µ¥ÀÌÅͺ£À̽º: Oracle 12 ÀÌ»ó (Oracle 18g¿¡¼­ ŽºÆ® ¿Ï·á ÇÏ¿´À½.)

ÇÁ·¹ÀÓ¿öÅ©: mybatis-3.5.5

[÷ºÎ(Attachments)]

mybatis-3.5.5.jar

mybatis-3.5.5(¿øº»).7z



1. ÃÖ¼ÒÇÑ °ü·Ã ÇÁ·¹ÀÓ¿öÅ©¿¡ ´ëÇؼ­ ÀÌÇØÇغ¸±â


ÇÁ·¹ÀÓ¿öÅ©ÀÇ Æ¯Â¡¿¡ ´ëÇؼ­ °£´ÜÇÏ°Ô ÀÛ¼ºÇغ¸¾Ò´Ù.


[Ư¡]


myBatis¶õ ±×³ª¸¶ ÇнÀÇϱ⠽±°í, »ç¿ë¹æ¹ýÀÌ °£´ÜÇÔ.

Ãʱ⠼ÂÆÃÀ» Á¶±ÝÇÑ ÈÄ¿¡ ³ª¸ÓÁö´Â SQL¸í·É¹®°ú °£´ÜÇÑ ÀÚ¹Ù ¼Ò½ºÄÚµå·Î ±¸ÇöÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖÀ½.

(iBatis ÇÁ·ÎÁ§Æ®·Î ½ÃÀÛÇؼ­ ÇöÀç´Â Apache Foundation¿¡¼­ °ü¸®ÇÏ´Â ÀÚ¹Ù ¿ÀǼҽº ÇÁ·¹ÀÓ¿öÅ©)


http://www.mybatis.org


hibernate¶õ ORM(Object-Relational Mapping) ÇÁ·¹ÀÓ¿öÅ©¶ó´Â ¿µ¼Ó ÇÁ·¹ÀÓ¿öÅ©·Î¼­ ÀÚ¹Ù¿Í °´Ã¼¿Í µ¥ÀÌÅͺ£À̽º¸¦ ¸ÅÇÎÇÏ¿© µ¥ÀÌÅ͸¦ ó¸®ÇϹǷΠ¿£ÅÍÇÁ¶óÀÌÁî ȯ°æ¿¡ ÀûÇÕÇÑ Æ¯Â¡À» °¡Áö°í ÀÖÀ½.

(¹è¿ì±â ¾î·Á¿ò. - °´Ã¼ ¸ðµ¨¸µ °æÇèÀÌ ¿ä±¸µÊ.)


http://hibernate.org 



[»ý°¢Çغ¸±â]


»ý°¢À» Á¶±ÝÇغ»´Ù¸é, ²À ¹Ýµå½Ã À¥ ÇÁ·ÎÁ§Æ®¿¡¸¸ MyBatis¸¦ È°¿ëÇÒ ÇÊ¿ä°¡ ¾øÀ½.
ÀϹÝÀûÀÎ Swing ÇÁ·ÎÁ§Æ® ¿¬½À µî¿¡¼­µµ »ç¿ëÇغ¼ ¼öµµ ÀÖ°ÚÀ½.

- ÇÁ·¹ÀÓ¿öÅ© »ç¿ëÇϱâ Àü¿¡ °í¹ÎÇØ¾ß ÇÒ Á¡

1. ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â JDBC ±¸Çö¿¡ ´ëÇؼ­µµ »ý°¢Çغ¸±â

(ÀÌÀ¯: ÀÚ¹Ù¿¡¼­ ÀÚüÀûÀ¸·Î Á¦°øÇÏ´Â jdbc ±¸Çö(¿¹: ResultSet, prepareStatement µî)¿¡ ´ëÇؼ­ ÀÌÇØÇÏ°í ÀÖÀ¸¸é ÁÁÀ½.)


2. ÇÁ·¹ÀÓ¿öÅ©¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¸¸´ÉÀÎÁö, °í¹ÎÇϱâ

3. SQL Injection µîÀÇ º¸¾È ¹®Á¦¿¡ ´ëÇؼ­ »ý°¢Çϱâ

   (ÇÁ·¹ÀÓ¿öÅ©¸¦ »ç¿ëÇϸé, SQL Injection ¹®Á¦´Â °£´ÜÇÏ°Ô ÇؼҵȴÙ.)


°á·ÐÀº ÁÁ±ä ÁÁ´Ù. ÇÁ·¹ÀÓ¿öÅ©!!!


[ÄÚµå ºñ±³Çϱâ] 


 Mybatis »ç¿ëÀü ÄÚµå ¹æ½Ä

 Mybatis »ç¿ëÈÄ ÄÚµå ¹æ½Ä

 

public Entity selectFAQList(UserConnection conn, Entity param)  throws SQLException 

{

    UserStatement stmt = null; //stmt ÃʱⰪ ¼±¾ð
    ResultSet rslt = null; //rslt ÃʱⰪ ¼±¾ð
    StringBuffer sql = new StringBuffer();
    sql.append("\n SELECT *"); //
    sql.append("\n FROM"); //ÄÚµå Ãß°¡
    sql.append("\n TABLE1");
    stmt = conn.prepareStatement(sql.toString());
    rslt = stmt.executeQuery();
    Entity _DATA = new Entity();
    _DATA.put("_DATA", EntityUtil.ResultSetToClobList(rslt));
    return _DATA;
}

 <?xml version="1.0" encoding="UTF-8"?>

  <ENTITY id="table.getTable1List" type="SQL" return="List">
    <![CDATA[
        SELECT *
            FROM
            TABLE1
    ]]>
    <PARAMS>    
    </PARAMS>
  </ENTITY>

// xml·Î »©³»¼­ Äõ¸®¹®À» ÀÛ¼ºÇÏ¸é ³»ºÎÀû 󸮴 Mybatis¿¡¼­ // ¸ðµÎ ó¸®ÇØÁֹǷÎ
// Entity ID°ªÀ» java¿¡¼­ È£Ã⸸ÇÏ¸é µÈ´Ù.




2. Ãʱâ ȯ°æ¼³Á¤ ¼ÂÆÃÇϱâ


½ÃÁß ºí·Î±×¸¦ ´Ù¼ö °Ë»öÇÏ°í, ±³Á¦µîÀ» Âü°íÇÏ¿´À¸³ª ¿ÕÃʺ¸ ¼öÁØÀ¸·Î ¾Ë±â ½±°Ô Àû¿ëÇÏ´Â ¹æ¹ýÀº ³ª¿ÀÁö ¾ÊÀº °Å °°¾Æ¼­ ÀÛ¼ºÇغ¸·Á°í ÇÑ´Ù.



±×¸² 1. Ãʱ⠼ÂÆÃÇØÁà¾ß ÇÏ´Â ÇÁ·ÎÁ§Æ® ÆÄÀÏ


ÃÖ¼Ò ¸øÇصµ ±âº»ÀûÀ¸·Î °®ÃçÁà¾ß ÇÏ´Â ¼Ò½º ÆÄÀϵéÀ» ¸î °³ Âó¾îº¸¾Ò´Ù.


"Address_****.ÆÄÀÏÈ®ÀåÀÚ¸í"À¸·Î ±¸¼ºµÈ ÆÄÀÏÀº »ç¿ëÀÚ¿¡ µû¶ó ÀÓÀÇÀûÀ¸·Î ±¸¼ºÇغÁµµ ¹«¹æÇÏ´Ù.


ojdbc8_g.jarÀº ¾îµð¿¡ Àִ°¡?

¿À¶óŬ ¼³Ä¡ÆÄÀÏÀÌ ÀÖ´Â Æú´õ¿¡ º¸¸é jdbc Æú´õ°¡ Àִµ¥ ÇØ´ç À§Ä¡¿¡ ÀÖ´Ù.



±×¸² 2. ¿À¶óŬ ¼³Ä¡ ÆÄÀÏÀÌ ÀÖ´Â Æú´õ



±×¸² 3. jdbc Æú´õ¿¡ ÀÖ´Â readme.txt



±×¸² 4. jdbc/lib Æú´õ ³»¿¡ ÀÖÀ½.



[÷ºÎ(Attachments)]

oracle12lib.z01

oracle12lib.z02

oracle12lib.zip


(Âü°í·Î ¹ÝµðÁýÀ» ÅëÇؼ­ ¾ÐÃàÀ» Ç® ¼ö ÀÖÀ½.)


¼Ò½ºÄڵ带 ÅëÇؼ­ »ìÆ캸´Â °ÍÀÌ Á¶±Ý ºü¸¦ ¼ö ÀÖ´Ù°í ÁÖÀåÇØ º»´Ù.



3. µ¥ÀÌÅͺ£À̽º ¼³°èÇϱâ


¿¹Á¦ µ¥ÀÌÅͺ£À̽º¸¦ ¼³°èÇϵµ·Ï ÇÏ°Ú´Ù.


tableName(Å×À̺í¸í): addressbook


 Å°

 Ç׸ñ¸í

 ¼Ó¼º 

 PK(±âº»Å°)

num

À妽º(ID)

 

name

nvarchar

 

address

nvarchar

 

birthdate

date




±×¸² 5. Å×ÀÌºí ¸¸µé±â(¿À¶óŬ)


±×¸² 5´Â SQL Developer¸¦ ÅëÇؼ­ Å×À̺íÀ» »ý¼ºÇÑ ¸ð½ÀÀÌ´Ù. 

¿ø·¡ º¹ÀâÇÏ°Ô Äõ¸®¶ó´Â °ÍÀ» ÅëÇؼ­ ÀÛ¼ºÇØ¾ß Çϴµ¥, ¼¼»óÀÌ ½Ã°£ÀÌ Áö³ª´Ùº¸´Ï Æí¸®ÇØÁø °Íµµ ÀÖ´Ù°í ÁÖÀåÇÑ´Ù.


CREATE TABLE "C##USER"."ADDRESSBOOK" 

   ( "NUM" NUMBER(*,0) NOT NULL ENABLE, 

"NAME" NVARCHAR2(20), 

"ADDRESS" NVARCHAR2(100), 

"BIRTHDATE" DATE, 

 CONSTRAINT "ADDRESSBOOK_PK" PRIMARY KEY ("NUM")



  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

...............................

(Áß·«)


ALTER TRIGGER "C##USER"."ADDRESSBOOK_TRG" ENABLE;



±×¸² 6. SQL¹®À¸·Î Create Table ±¸¼ºÇϱâ


±×¸² 6Àº ÈçÈ÷ CRUD(Create Read Update Delete)¿¡¼­ÀÇ Create¸¦ ÀǹÌÇÏ´Â ÀÛ¾÷ÀÌ´Ù.

¿¹¸¦ µé¸é ¿ø·¡´Â ÀÌ·¸°Ô º¹ÀâÇÏ°Ô ÀÛ¼ºÇØ¾ß Çϴµ¥ Áö±ÝÀº ÈξÀ ÆíÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù°í º¸¸é µÈ´Ù.




4. ÇÁ·ÎÁ§Æ® ±¸¼ºÇϱâ - °úÁ¤ ¼Ò°³ (¼Ò½ºÄڵ带 ÅëÇؼ­ »ìÆ캸´Â ÇÁ·ÎÁ§Æ® ±¸¼º)


1´Ü°è ¼³°è

SQL - Å×À̺í ÀÛ¼º


2´Ü°è ±âº» ȯ°æ¼³Á¤ ÀÛ¼º(Áغñ)

web.xmlÀ» ¸ÕÀú ÀÛ¼ºÇÑ´Ù.              (¾Ï±â°¡ µÇ´Â ºÎºÐÀΰ¡? ºÒ°¡´É. ÀÌ°Å ¿Ü¿ì´Â °Å ºÒ°¡´É.)

mybatis-config.xml                     (¾Ï±â°¡ µÇ´Â ºÎºÐÀΰ¡? ºÒ°¡´É. ÀÌ°Å ¿Ü¿ì´Â °Å ºÒ°¡´É.)

SqlMapSessionFactory.java           (¾Ï±â°¡ µÇ´Â ºÎºÐÀΰ¡? ºÒ°¡´É. ÀÌ°Å ¿Ü¿ì´Â °Å ºÒ°¡´É.)

AddressDto.java 

addressMapper.xml                    (¾Ï±â°¡ µÇ´Â ºÎºÐÀΰ¡? ºÒ°¡´É. ÀÌ°Å ¿Ü¿ì´Â °Å ºÒ°¡´É.)


3´Ü°è(°£´ÜÇÑ CRUD ÅÛÇø´ Áغñ)

addressDao.java                       (¾Ï±â°¡ µÇ´Â ºÎºÐÀΰ¡? ÄÚµå´Â °£´ÜÇϳª 2´Ü°è ¼ÂÆÃÀÌ ¾È µÇ¾î ÀÖÀ¸¸é ÀÇ¹Ì ¾øÀ½.)


4´Ü°è(ÀÎÅÍÆäÀ̽º ¼³°è ¹× ±¸ÇöºÎ ÀÛ¼º)

address.java 

addressImpl.java


5´Ü°è(ºä ÆäÀÌÁö ±¸¼ºÇϱâ)

web.xml (¼öÁ¤ - ÀÛ¾÷)

servlet ÆäÀÌÁö·Î ÁøÇà ¶Ç´Â jspÆÄÀÏ·Î ÁøÇàÇصµ ¹«¹æ




5. ¼Ò½ºÄÚµå


¼Ò½ºÄÚµå´Â ¼ø¼­´ë·Î ¼Ò°³ÇÏ°Ú´Ù.


(2´Ü°è - ¼Ò½ºÄÚµå)


<?xml version="1.0" encoding="UTF-8"?>


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">


<display-name>edu-mybatis</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>

<!-- Board List -->

<servlet>

<servlet-name>boardList</servlet-name>

<servlet-class>com.edu.view.BoardListServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>boardList</servlet-name>

<url-pattern>/board/list.do</url-pattern>

</servlet-mapping>

<!-- Board Insert -->

<servlet>

<servlet-name>boardInsert</servlet-name>

<servlet-class>com.edu.view.BoardInsertServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>boardInsert</servlet-name>

<url-pattern>/board/insert.do</url-pattern>

</servlet-mapping>

<!-- Board Delete -->

<servlet>

<servlet-name>boardDelete</servlet-name>

<servlet-class>com.edu.view.BoardDeleteServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>boardDelete</servlet-name>

<url-pattern>/board/delete.do</url-pattern>

</servlet-mapping>

</web-app>


* ÆÄÀϸí: web.xml


[÷ºÎ(Attachments)]

web.zip



¿¹¸¦ µé¸é, ÀÌ·± ÇüÅ·Π±¸¼ºÇؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

Å©°Ô ¾î·Æ°Ô ÀÛ¼ºÇÏÁø ¾Ê¾ÒÀ¸´Ï Âü°íÇÏ¸é µµ¿òÀÌ µÉ °Í °°´Ù.


<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 

"http://mybatis.org/dtd/mybatis-3-config.dtd">


<configuration>


<environments default="development">

    <environment id="development">

      <transactionManager type="JDBC"/>

      <dataSource type="POOLED">

        <property name="driver" value="oracle.jdbc.driver.OracleDriver" />

        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>

        <property name="username" value="»ç¿ëÀÚ °èÁ¤"/>

        <property name="password" value="ºñ¹Ð¹øÈ£"/>

      </dataSource>

    </environment>

  </environments>


  <mappers>

    <mapper resource="com/edu/db/addressMapper.xml"/>              // ¸®¼Ò½º Áõ°¡½Ã Ãß°¡Çؼ­ »ç¿ëÇغ¸±â

  </mappers>


</configuration>


* ÆÄÀϸí: mybatis-config.xml



[÷ºÎ(Attachments)]

mybatis-config.zip



package com.edu.db;


import java.io.IOException;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class SqlMapSessionFactory {

public static SqlSessionFactory ssf;


    static{


        String resource = "com/edu/db/mybatis-config.xml";

        InputStream inputStream = null;


        try {

            inputStream = Resources.getResourceAsStream(resource);

        } catch (IOException e) {

            e.printStackTrace();

        }


        ssf = new SqlSessionFactoryBuilder().build(inputStream);


    }

    

    public static SqlSessionFactory getSqlSessionFactory(){

        return ssf;

    }

    

}



* ÆÄÀϸí: SqlMapSessionFactory.java


[÷ºÎ(Attachments)]

SqlMapSessionFactory.zip


package com.edu.db;


import java.sql.Timestamp;


public class AddressDto {

private int num;

private String name;

private String address;

private Timestamp birthdate;

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Timestamp getBirthdate() {

return birthdate;

}

public void setBirthdate(Timestamp birthdate) {

this.birthdate = birthdate;

}

}



* ÆÄÀϸí: AddressDto.java


[÷ºÎ(Attachments)]

AddressDto.zip


<?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.edu.db.mappers.addressMapper">

<select id="allAddress" resultType="com.edu.db.AddressDto">

select * from addressbook

</select>


<select id="selectAddress" parameterType="Integer" resultType="com.edu.db.AddressDto">

select NUM, NAME, ADDRESS, BIRTHDATE

 from addressbook

  where num=#{num}

</select>


<insert id="insertAddress" parameterType="com.edu.db.AddressDto">

insert into

addressbook(NAME, ADDRESS, BIRTHDATE)

values

(#{name},#{address},#{birthdate})

</insert>


<delete id="deleteAddress" parameterType="Integer">

DELETE FROM AddressBook

WHERE NUM = #{num}

</delete>

<update id="updateAddress" parameterType="com.edu.db.AddressDto" >

update addressbook

set birthdate = #{birthdate}, name = #{name}, address =#{address}

where num = #{num}

</update>

</mapper>


* ÆÄÀϸí: addressMappper.xml


[÷ºÎ(Attachments)]

addressMapper.zip


(3´Ü°è - ¼Ò½ºÄÚµå)


package com.edu.db;

import java.io.*;

import java.util.*;

import org.apache.ibatis.io.*;

import org.apache.ibatis.session.*;


public class AddressDao {

private AddressDao() {}

    private static AddressDao dao;


    public static AddressDao getInstance(){


        if(dao == null){

            dao = new AddressDao();

        }


        return dao;

    }

    

    // SQL ¼¼¼Ç ¿­±â

    SqlSessionFactory factory = SqlMapSessionFactory.getSqlSessionFactory();


    public AddressDto selectAddress(Integer num) {


        SqlSession session = factory.openSession();


        AddressDto addressDTO = session.selectOne("com.edu.db.mappers.addressMapper.selectAddress", num);

        session.close();


        return addressDTO;


    }


 


    public int updateAddress(AddressDto addressDTO) {


        SqlSession session = factory.openSession();


        int update = session.update("com.edu.db.mappers.addressMapper.updateAddress", addressDTO);


        // update³ª deleteÀÇ °æ¿ì ¹Ýµå½Ã Ä¿¹Ô ÇÊ¿ä.

        // session.commit();À» ÇØÁְųª factory.openSession(true);·Î ¼³Á¤Çϸé ÀÚµ¿ Ä¿¹ÔµÈ´Ù.

        session.commit(); 

        session.close();


        return update;


    }

    

    

    public int insertAddress(AddressDto addressDTO) {

    

     SqlSession session = factory.openSession();

     int insert = session.insert("com.edu.db.mappers.addressMapper.insertAddress", addressDTO);

    

     session.commit();

     session.close();

    

     return insert;

    

    }

    

    public int deleteAddress(Integer num) {

    

     SqlSession session = factory.openSession();

     int delete = session.delete("com.edu.db.mappers.addressMapper.deleteAddress", num);

    

     session.commit();

     session.close();

    

     return delete;

    }


}


* ÆÄÀϸí: AddressDao.java


Ư¡: Singleton ÆÐÅÏÀ» Àû¿ëÇÔ.


[÷ºÎ(Attachments)]

AddressDao.zip



(4´Ü°è - ¼Ò½ºÄÚµå)


package com.edu.db;


public interface Address {


public AddressDto getAddress(Integer num);

public int updateAddress(AddressDto addressDTO);

public int insertAddress(AddressDto addressDTO); 

public int deleteAddress(Integer num);

}


* ÆÄÀϸí: Address.java


Ư¡: Interface ÆÄÀÏ


[÷ºÎ(Attachments)]

Address.zip


package com.edu.db;


public class AddressImpl implements Address {


AddressDao dao = AddressDao.getInstance();

@Override

public AddressDto getAddress(Integer num) {

return dao.selectAddress(num);

}


@Override

public int updateAddress(AddressDto addressDTO) {

return dao.updateAddress(addressDTO);

}

@Override

public int insertAddress(AddressDto addressDTO) {

return dao.insertAddress(addressDTO);

}

@Override

public int deleteAddress(Integer num) {

return dao.deleteAddress(num);

}


}


* ÆÄÀϸí: AddressImpl.java


Ư¡: Address ÀÎÅÍÆäÀ̽º ±¸ÇöÆÄÀÏ


[÷ºÎ(Attachments)]

AddressImpl.zip


(5´Ü°è - Servlet ÆÄÀÏ ¿¹)


package com.edu.view;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Timestamp;

import java.text.SimpleDateFormat;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.edu.db.Address;

import com.edu.db.AddressDto;

import com.edu.db.AddressImpl;


/**

 * Servlet implementation class boardListServlet

 */

public class BoardListServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public BoardListServlet() {

        super();

    }


/**

 * @see HttpServlet#doGet(HttpServletRequest req, HttpServletResponse res)

 */

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

res.setContentType("text/html;charset=UTF-8");

PrintWriter out = res.getWriter();

out.print("<br/>");

AddressImpl address = new AddressImpl();

AddressDto addressDto = address.getAddress(1);

out.println("<html><head><title>CRUD - List2</title></head>");

out.println("<body><h2>MyBatis - List</h2>");

SimpleDateFormat format1 = new SimpleDateFormat ( "yyyy-MM-dd" );

String birthdate = format1.format(addressDto.getBirthdate());

out.print(addressDto.getNum() + "/" + addressDto.getName() + "/");

out.print(addressDto.getAddress() + "/" + birthdate);

out.print("<br/>");

out.println("</body></html>");

out.close();

}

/**

 * @see HttpServlet#doPost(HttpServletRequest req, HttpServletResponse res)

 */

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

doGet(req, res);

}


}



* ÆÄÀϸí: boardListServlet.java


¾î³ëÅ×À̼ÇÀ¸·Î ¸ÊÇÎÇÏÁö ¾Ê°í, web.xml¿¡ URL ¸ÊÇÎÇÏ¿´À½.


[÷ºÎ(Attachments)]

BoardListServlet.zip


package com.edu.view;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Timestamp;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.edu.db.Address;

import com.edu.db.AddressDto;

import com.edu.db.AddressImpl;


/**

 * Servlet implementation class boardInsertServlet

 */

public class BoardInsertServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public BoardInsertServlet() {

        super();

    }


/**

 * @see HttpServlet#doGet(HttpServletRequest req, HttpServletResponse res)

 */

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

res.setContentType("text/html;charset=UTF-8");

PrintWriter out = res.getWriter();

out.print("<br/>");

AddressImpl address = new AddressImpl();

AddressDto dbNode = new AddressDto(); 

dbNode.setName("µµµµ" + serialVersionUID);

dbNode.setAddress("Çູ½Ã Çູµ¿");

// ¹ö±×1: new Date() »ç¿ë¾ÈµÊ. (2020À» 3920À¸·Î ÀνÄÇÔ.) 

// ¹ö±×2: new Timestamp() »ç¿ë¾ÈµÊ. (2020À» 3920À¸·Î ÀνÄÇÔ.)

String userDate = "2020-02-01";

java.sql.Timestamp sqlDate = java.sql.Timestamp.valueOf(userDate);

dbNode.setBirthdate(sqlDate);

int result = address.insertAddress(dbNode);

AddressDto addressDto = address.getAddress(1);

out.println("<html><head><title>CRUD - Insert</title></head>");

out.println("<body><h2>MyBatis - Insert</h2>");

out.print("<br/>");

out.print("µî·Ï¿©ºÎ:" + result + "</br>");

out.print("<br/>");

out.print(addressDto.getNum() + "/" + addressDto.getName() + "/");

out.print(addressDto.getAddress() + "/" + addressDto.getBirthdate());

out.println("</body></html>");

out.close();

}

/**

 * @see HttpServlet#doPost(HttpServletRequest req, HttpServletResponse res)

 */

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

doGet(req, res);

}


}


* ÆÄÀϸí: boardInsertServlet.java


[÷ºÎ(Attachments)]

BoardInsertServlet.zip



package com.edu.view;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Timestamp;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.edu.db.Address;

import com.edu.db.AddressDto;

import com.edu.db.AddressImpl;


/**

 * Servlet implementation class boardInsertServlet

 */

public class BoardDeleteServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public BoardDeleteServlet() {

        super();

    }


/**

 * @see HttpServlet#doGet(HttpServletRequest req, HttpServletResponse res)

 */

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

res.setContentType("text/html;charset=UTF-8");

PrintWriter out = res.getWriter();

out.print("<br/>");

AddressImpl address = new AddressImpl();

int result = address.deleteAddress(5);

AddressDto addressDto = address.getAddress(5);

out.println("<html><head><title>CRUD - Delete</title></head>");

out.println("<body><h2>MyBatis - Delete</h2>");

out.print("<br/>");

out.print("»èÁ¦¿©ºÎ:" + result + "</br>");

out.print("<br/>");

if ( addressDto != null ) {

out.print(addressDto.getNum() + "/" + addressDto.getName() + "/");

out.print(addressDto.getAddress() + "/" + addressDto.getBirthdate());

}

out.println("</body></html>");

out.close();

}


/**

 * @see HttpServlet#doPost(HttpServletRequest req, HttpServletResponse res)

 */

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

doGet(req, res);

}


}



* ÆÄÀϸí: BoardDeleteServlet.java


[÷ºÎ(Attachments)]

BoardDeleteServlet.zip



package com.edu.view;


import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Timestamp;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.edu.db.AddressDto;

import com.edu.db.AddressImpl;


@WebServlet("/board/update.do")

public class BoardUpdateServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public BoardUpdateServlet() {

        super();

    }


/**

 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

 */

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

res.setContentType("text/html;charset=UTF-8");

PrintWriter out = res.getWriter();

out.print("<br/>");

AddressImpl address = new AddressImpl();

AddressDto dbNode = new AddressDto();

dbNode.setNum(3);

dbNode.setName("µµµµ¼öÁ¤" + serialVersionUID);

dbNode.setAddress("Çູ½Ã Çູµ¿");


// ¹ö±×1: new Date() »ç¿ë¾ÈµÊ. (2020À» 3920À¸·Î ÀνÄÇÔ.) 

// ¹ö±×2: new Timestamp() »ç¿ë¾ÈµÊ. (2020À» 3920À¸·Î ÀνÄÇÔ.)

String userDate = "2020-07-01";

java.sql.Timestamp sqlDate = java.sql.Timestamp.valueOf(userDate);

dbNode.setBirthdate(sqlDate);

int result = address.updateAddress(dbNode);

AddressDto addressDto = address.getAddress(3);

out.println("<html><head><title>CRUD - Update</title></head>");

out.println("<body><h2>MyBatis - Update</h2>");

out.print("<br/>");

out.print("¼öÁ¤¿©ºÎ:" + result + "</br>");

out.print("<br/>");

out.print(addressDto.getNum() + "/" + addressDto.getName() + "/");

out.print(addressDto.getAddress() + "/" + addressDto.getBirthdate());

out.println("</body></html>");

out.close();

}


/**

 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

 */

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

doGet(req, res);

}


}



* ÆÄÀϸí: BoardUpdateServlet.java


Ư¡: web.xmlÀ¸·Î ¸ÊÇÎÇÏÁö ¾Ê°í, @WebServletÀ¸·Î ¾î³ëÅ×À̼ÇÀ» »ç¿ëÇÏ¿© ¸ÅÇÎó¸®ÇÔ.


[÷ºÎ(Attachments)]

BoardUpdateServlet.zip




6. ¸ÎÀ½±Û


¼ø¼öÇÑ JSP ±â¹ÝÀÇ MyBatis ÇÁ·¹ÀÓ¿öÅ© »ç¿ë¹æ¹ý¿¡ ´ëÇؼ­ ¼Ò°³Çغ¸¾Ò´Ù.

¸¹Àº µµ¿òÀÌ µÇ¾úÀ¸¸é ÁÁ°Ú´Ù.


1. [JSP] 19. MyBatis-3.5.5 ¿Í Maven / Servlet ¿¬µ¿Çϱâ (Oracle 19g) - Java ¹æ½Ä, 2020-10-01

https://yyman.tistory.com/1434



[Âü°í ÀÚ·á(Reference)]


1. [Java, OpenJDK] Timestamp Çü½Ä º¯È¯, https://infotake.tistory.com/16, Accessed by 2020-09-18, Last Modified 2018-09-13.

-> Âü°í ÀÌÀ¯: Timestamp ¸í·É »ç¿ë¹æ¹ý Âü°íÇÔ.


2. ³»°¡ ±×¸®´Â ¼¼»ó  DB(mysql)¿¡ timestamp·Î ÀúÀåµÈ °ª java¿¡¼­ ºÒ·¯¿À±â_getTimestamp(), https://yoonka.tistory.com/450, Accessed by 2020-09-18, Last Modified 2013-10-28.


3. [JSP] Mybatis »ç¿ëÇÏ±â  ¶Ç¸®¾ß °³¹ßÇÏÀÚ, https://ddoriya.tistory.com/entry/JSP-Mybatis-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0, Accessed by 2020-09-17, Last Modified 2014-11-18.

-> Ãßõ(60Á¡ ÀÌ»ó): ÀÌ »çÀÌÆ®ÀÇ ±Û¸¸ °¡Áö°í µû¶óÇϸé, ¿Ïº®ÇÏ°Ô µ¿ÀÛÀÌ µÇÁø ¾ÊÀ½. ¸î °¡Áö º¸ÃæÀ» ÇØÁà¾ß Çؼ­ Ãß°¡ÀûÀ¸·Î °Ë»öÇÏ¿´À½.
±×·¡µµ ¼ø¼öÇÑ MyBatis ¿ø¸®¿¡ ´ëÇؼ­ ¸¹Àº ¿µ°¨À» ¾ò¾úÀ½.


4. Oracle¿Í mybatis ¿¬µ¿ ½Ç½À, https://dlgkstjq623.tistory.com/228, Accessed by 2020-09-18, Last Modified 2019-06-05.

-> Ãßõ(40Á¡ ÀÌ»ó): ÀÌ »çÀÌÆ®ÀÇ ±ÛÀ» ÀÌÇØÇÏ·Á¸é, Spring Framework Áö½Ä°ú JSTL Áö½ÄÀÌ ÀÖ¾î¾ß ÇÔ.

   ±âº»ÀûÀÎ È帧 Á¤µµ ÆľÇÇϴµ¥ Âü°íÇÏ¿´À½. (ÀÌ·ÐÀûÀÎ ´À³¦À» ¾ò¾úÀ½.)


5. MyBatis – ¸¶À̹ÙƼ½º 3 | ¼Ò°³, https://mybatis.org/mybatis-3/ko/index.html, Accessed by 2020-09-18, Last Modified 2020-06-05.

-> Ãßõ(20Á¡ ÀÌ»ó): ¼³¸í¼­°¡ Á¶±Ý ¾î·Æ°Ô µÇ¾î ÀÖÀ½. ¼ÂÆà ÆÄÀÏÀ» °¡Áö°í ¼ÂÆÃÇÑ ÈÄ ¼³¸í¼­¸¦ Âü°íÇÏ¸é µµ¿òÀÌ µÉ ¼öµµ ÀÖÀ½.


6. 4. Spring Boot Oracle DB ¿¬µ¿(JSP, MyBatis), https://dotheright.tistory.com/173, Accessed by 2020-09-18, Last Modified 2020-07-15.

-> »ðÁúÇÏ¿© ½ÇÆÐ¿Í Å½±¸ µîÀÇ È½¼ö ±â·ÏÀÌ ´ã°ÜÁ® ÀÖÀ½. ("»ðÁúÀ» ÇÏ°Ô µÈ´Ù.??" ÀÌ·± ´À³¦À» º¸¿©ÁÜ.)

-> Spring Framework ±â¹ÝÀ¸·Î ¸¸µç ¼Ò½ºÄڵ带 ¼Ò°³ÇÏ°í ÀÖÀ½. (ÀÌ °Ô½Ã±Û ÀÛ¼º¿¡ À־ Å©°Ô ¿µÇâÀ» ÁÖÁö ¸øÇÔ.)


7. [JSP] JSP¿¡ MyBatis ¿¬°áÇϱâ, https://yuja-kong.tistory.com/8, Accessed by 2020-09-18, Last Modified 2018-04-17.

-> Ãßõ(50Á¡ ÀÌ»ó): ¼ø¼öÇÑ JSP¿Í MyBatis ¿¬°á¿¡ ´ëÇؼ­ ¼Ò°³ÇÏ°í Àִµ¥, ÀÌ ±ÛÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀ» ¸¸µé¾î ÁÜ.


8. JSP ¼­ºí¸´ ÇÑ±Û ¼¼ÆÃ(ÇÑ±Û ±úÁü ÇØ°á Çϱâ), https://developsd.tistory.com/100, Accessed by 2020-09-18, Last Modified 2019-05-18.

-> Ãßõ(20Á¡): ¿À¶óŬDB(ÀÌÇÏ "UTF-8 ¼ÂÆÃÇÑ ¿À¶óŬ")·Î µ¥ÀÌÅ͸¦ ºÒ·¯¿À·Á°í ÇßÀ» ¶§, ?????¶ó°í ÇѱÛÀ» ÀνÄÇÏÁö ¸øÇßÀ½.

   °£´ÜÇÑ ¸í·É¾î Çϳª·Î ÇØ°áÇÏ´Â µ¥ µµ¿òÀ» ¹Þ¾ÒÀ½. (°¡²ûÀº ½¬¿î °Ô ¾î·Æ°í, ¾î·Á¿î °Ô ½¬¿ï ¶§µµ ÀÖ´Ù´Â »ý°¢ÀÌ µë.)


1. ÆÄÀÏÀÇ ÀÎÄÚµù ¼Ó¼ºÀ» "UTF-8"À¸·Î º¯°æ

2. response.setContentType("text/html;charset=UTF-8");