[JSP] 8. ¿µ¼ÓÇÁ·¹ÀÓ¿öÅ© MyBatis¸¦ È°¿ëÇÑ CRUD ±¸Çö - JSP¿Í Oracle(XML ¹æ½Ä)
[JSP] 8. ¿µ¼ÓÇÁ·¹ÀÓ¿öÅ© MyBatis¸¦ È°¿ëÇÑ CRUD ±¸Çö - JSP¿Í Oracle(XML ¹æ½Ä)
Á¶±Ý ¾Ë±â ½±°Ô ÀÛ¼ºÇÏ¿´´Ù.
"¿µ¼Ó ÇÁ·¹ÀÓ¿öÅ©"¶ó°í º¸¸é µÈ´Ù.
¿µ¼Ó ÇÁ·¹ÀÓ¿öÅ©¶ó´Â °ÍÀº DAO °´Ã¼¿¡¼ µ¥ÀÌÅͺ£À̽º µ¥ÀÌÅÍÀÇ Ã³¸® ±â´ÉÀ» Á¦°øÇÏ´Â ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù.
´ëÇ¥ÀûÀÎ °Í: myBatis, Hibernate°¡ ÀÖ´Ù.
* »ç¿ëµÇ´Â ¾ð¾î: JSP / Servlet,
* µ¥ÀÌÅͺ£À̽º: Oracle 12 ÀÌ»ó (Oracle 18g¿¡¼ ŽºÆ® ¿Ï·á ÇÏ¿´À½.)
* ÇÁ·¹ÀÓ¿öÅ©: mybatis-3.5.5
[÷ºÎ(Attachments)]
1. ÃÖ¼ÒÇÑ °ü·Ã ÇÁ·¹ÀÓ¿öÅ©¿¡ ´ëÇؼ ÀÌÇØÇغ¸±â
ÇÁ·¹ÀÓ¿öÅ©ÀÇ Æ¯Â¡¿¡ ´ëÇؼ °£´ÜÇÏ°Ô ÀÛ¼ºÇغ¸¾Ò´Ù.
[Ư¡]
myBatis¶õ ±×³ª¸¶ ÇнÀÇϱ⠽±°í, »ç¿ë¹æ¹ýÀÌ °£´ÜÇÔ.
Ãʱ⠼ÂÆÃÀ» Á¶±ÝÇÑ ÈÄ¿¡ ³ª¸ÓÁö´Â SQL¸í·É¹®°ú °£´ÜÇÑ ÀÚ¹Ù ¼Ò½ºÄÚµå·Î ±¸ÇöÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖÀ½.
(iBatis ÇÁ·ÎÁ§Æ®·Î ½ÃÀÛÇؼ ÇöÀç´Â Apache Foundation¿¡¼ °ü¸®ÇÏ´Â ÀÚ¹Ù ¿ÀǼҽº ÇÁ·¹ÀÓ¿öÅ©)
hibernate¶õ ORM(Object-Relational Mapping) ÇÁ·¹ÀÓ¿öÅ©¶ó´Â ¿µ¼Ó ÇÁ·¹ÀÓ¿öÅ©·Î¼ ÀÚ¹Ù¿Í °´Ã¼¿Í µ¥ÀÌÅͺ£À̽º¸¦ ¸ÅÇÎÇÏ¿© µ¥ÀÌÅ͸¦ ó¸®ÇϹǷΠ¿£ÅÍÇÁ¶óÀÌÁî ȯ°æ¿¡ ÀûÇÕÇÑ Æ¯Â¡À» °¡Áö°í ÀÖÀ½.
(¹è¿ì±â ¾î·Á¿ò. - °´Ã¼ ¸ðµ¨¸µ °æÇèÀÌ ¿ä±¸µÊ.)
[»ý°¢Çغ¸±â]
»ý°¢À» Á¶±ÝÇغ»´Ù¸é, ²À ¹Ýµå½Ã À¥ ÇÁ·ÎÁ§Æ®¿¡¸¸ 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)]
(Âü°í·Î ¹ÝµðÁýÀ» ÅëÇؼ ¾ÐÃàÀ» Ç® ¼ö ÀÖÀ½.)
¼Ò½ºÄڵ带 ÅëÇؼ »ìÆ캸´Â °ÍÀÌ Á¶±Ý ºü¸¦ ¼ö ÀÖ´Ù°í ÁÖÀåÇØ º»´Ù.
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)]
¿¹¸¦ µé¸é, ÀÌ·± ÇüÅ·Π±¸¼ºÇؼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
Å©°Ô ¾î·Æ°Ô ÀÛ¼ºÇÏÁø ¾Ê¾ÒÀ¸´Ï Âü°íÇÏ¸é µµ¿òÀÌ µÉ °Í °°´Ù.
<?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)]
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)]
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)]
<?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)]
(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)]
(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)]
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)]
(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)]
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)]
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)]
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)]
¼ø¼öÇÑ JSP ±â¹ÝÀÇ MyBatis ÇÁ·¹ÀÓ¿öÅ© »ç¿ë¹æ¹ý¿¡ ´ëÇؼ ¼Ò°³Çغ¸¾Ò´Ù.
¸¹Àº µµ¿òÀÌ µÇ¾úÀ¸¸é ÁÁ°Ú´Ù.
1. [JSP] 19. MyBatis-3.5.5 ¿Í Maven / Servlet ¿¬µ¿Çϱâ (Oracle 19g) - Java ¹æ½Ä, 2020-10-01
[Âü°í ÀÚ·á(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");