# MyBatis
- SQL 에 기반한 데이터베이스 등을 연결 시켜주는 역할을 하는 프레임워크
- Java 코드로 DB 연동을 처리
SQL 명령어를 자바코드에서 분리하여 xml 파일에 따로 관리
# SqlSession
- MyBatis 를 스프링과 함께 사용하려면 SqlSession 을 정의 해야 함
- MyBatis 는 SqlSession 을 생성하기 위해 SqlSessionFactory 를 사용함
# JavaORMPlugin
1. JavaORMPlugin 압축 풀기
2. features 폴더 안에 me.karthy.plugin.java.orm.feature_1.0.0.201411180016.jar
파일과 동일한 이름의 폴더를 생성하그 그 안에 넣기
3. 위의 폴더를 spring eclipse 폴더 안에 features 폴더 안에 복붙
4. 마찬가지로 JavaORMPlugin_1.0.0.201411180016.jar, artifacts.jar, content.jar
-> plugins 폴더 안에 복붙
이클립스 재시작
------------------------------------------------------------
pom.xml 에 추가
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mybatis spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
생성하면 위치가 src 인데 resource 로 이동시키기
mapper도 마찬가지
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.book</groupId>
<artifactId>template</artifactId>
<name>P07_mybatis</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>11</java-version>
<org.springframework-version>5.2.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<!-- 오라클 JDBC 드라이버를 가져오기 위해 리포지토리를 추가합니다. -->
<repositories>
<repository>
<id>oracle</id>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<!-- DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.5.0.0</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mybatis spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<bean id="booksDAO" class="com.mybatis.test.BooksDAO"/>
<bean id="bookService" class="com.mybatis.test.BookServiceImpl">
<property name="booksDAO" ref="booksDAO"/>
</bean>
</beans>
<?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="mybatis.booksMapper">
<insert id="insertBooks" parameterType="com.mybatis.test.BooksVO">
INSERT INTO books
VALUES(#{code}, #{name}, #{price}, #{maker})
</insert>
<select id="getBookList" resultType="com.mybatis.test.BooksVO">
SELECT * FROM books
</select>
<update id="updateBooks" parameterType="com.mybatis.test.BooksVO">
UPDATE books
SET NAME = #{name}, PRICE = #{price}, MAKER = #{maker}
WHERE CODE = #{code}
</update>
<delete id="deleteBooks" parameterType="com.mybatis.test.BooksVO">
DELETE FROM books
WHERE CODE = #{code}
</delete>
<select id="getBooks" resultType="com.mybatis.test.BooksVO">
SELECT * FROM books
WHERE CODE = #{code}
</select>
</mapper>
<?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>
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="MANAGED" /><!-- 자동 커밋 -->
<dataSource type="UNPOOLED"><!-- Connection 객체를 호출시 생성 -->
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="books-mapping.xml" />
</mappers>
</configuration>
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=dbtest
jdbc.password=a1234
package com.mybatis.test;
/*
CREATE TABLE books(
code VARCHAR2(20) PRIMARY KEY, -- 도서 코드
name VARCHAR2(100), -- 도서명
price NUMBER, -- 도서가격
maker VARCHAR2(50) -- 출판사
);
*/
public class BooksVO {
private String code;
private String name;
private int price;
private String maker;
public BooksVO() {}
public BooksVO(String code, String name, int price, String maker) {
super();
this.code = code;
this.name = name;
this.price = price;
this.maker = maker;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getMaker() {
return maker;
}
public void setMaker(String maker) {
this.maker = maker;
}
@Override
public String toString() {
return "[ 도서번호 : " + code + " - 도서명 : " + name + " - 가격 : " + price + " - 출판사 : " + maker + " ]";
}
}
package com.mybatis.test;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
//@Repository
//- DAO class 에 사용됩니다
//- database 에 접근하는 메서드를 가지고 있는 class 에 쓰입니다
@Repository
public class BooksDAO {
private SqlSession sqlSession;
public BooksDAO() {
sqlSession = SqlMapClientFactory.getSqlMapClientInstance();
}
// 도서 등록
public int insertBooks(BooksVO vo) {
int su = 0;
// SqlSession 객체를 사용해서 mapper.xml 의 SQL 문을 'namespace.id'로 실행
// -----namespace----------id-----
su = sqlSession.insert("mybatis.booksMapper.insertBooks", vo);
return su;
}
// insertBooks() end
// 도서 목록
public List<BooksVO> getBooksList(BooksVO vo){
List<BooksVO> list = sqlSession.selectList("mybatis.booksMapper.getBookList", vo);
return list;
}
// getBooksList() end
// 도서 정보 수정
public int updateBooks(BooksVO vo) {
int su = 0 ;
su = sqlSession.update("mybatis.booksMapper.updateBooks", vo);
return su;
}
// updateBooks() end
// 도서 삭제
public int deleteBooks(BooksVO vo) {
int su = 0;
su = sqlSession.update("mybatis.booksMapper.deleteBooks", vo);
return su;
}
// deleteBooks() end
// 도서 정보 확인
public BooksVO getBooks(BooksVO vo) {
try {
Object[] args = { vo.getCode() };
return sqlSession.selectOne("mybatis.booksMapper.getBooks", vo);
} catch (Exception e) {
return null;
}
}
}
package com.mybatis.test;
import java.util.List;
public interface BookService {
// 도서관련 CRUD 기능 메서드
// 도서 정보 등록
int insertBooks(BooksVO vo);
// 도서 목록 조회
List<BooksVO> getBooksList(BooksVO vo);
// 도서 정보 수정
int updateBooks(BooksVO vo);
// 도서 정보 확인
BooksVO getBooks(BooksVO vo);
// 도서 정보 삭제
int deleteBooks(BooksVO vo);
}
package com.mybatis.test;
import java.util.List;
// @Service
// - 비즈니스 로직을 수행하는 class 라는 것을 나타냅니다
public class BookServiceImpl implements BookService {
private BooksDAO booksDAO;
public void setBooksDAO(BooksDAO booksDAO) {
this.booksDAO = booksDAO;
}
@Override
public int insertBooks(BooksVO vo) {
// TODO Auto-generated method stub
return booksDAO.insertBooks(vo);
}
@Override
public List<BooksVO> getBooksList(BooksVO vo) {
// TODO Auto-generated method stub
return booksDAO.getBooksList(vo);
}
@Override
public int updateBooks(BooksVO vo) {
return booksDAO.updateBooks(vo);
}
@Override
public BooksVO getBooks(BooksVO vo) {
// TODO Auto-generated method stub
return booksDAO.getBooks(vo);
}
@Override
public int deleteBooks(BooksVO vo) {
// TODO Auto-generated method stub
return booksDAO.deleteBooks(vo);
}
}
package com.mybatis.test;
import java.util.List;
import java.util.Scanner;
import org.springframework.context.support.GenericXmlApplicationContext;
public class JDBCTest {
public static void main(String[] args) {
GenericXmlApplicationContext context =
new GenericXmlApplicationContext("applicationContext.xml");
BookService bookService = context.getBean("bookService", BookService.class);
BooksVO vo = new BooksVO();
int su = 0; // 등록, 수정, 삭제 결과
List<BooksVO> list = null; // 도서 목록
Scanner scanner = new Scanner(System.in);
//- 도서 등록 -//
System.out.println("--- 도서 정보 등록 ---");
System.out.print("도서 번호 >> ");
vo.setCode(scanner.next()); scanner.nextLine();
System.out.print("도서명 >> ");
vo.setName(scanner.nextLine());
System.out.print("도서 가격 >> ");
vo.setPrice(scanner.nextInt());
System.out.print("출판사 >> ");
vo.setMaker(scanner.next());
su = bookService.insertBooks(vo);
if(su > 0)
System.out.println("도서 등록 성공!!");
else
System.out.println("도서 등록 실패~");
//- 도서 목록 -//
System.out.println("--- 도 서 목 록 ---");
list = bookService.getBooksList(null);
for(BooksVO book : list) {
System.out.println(book);
}
System.out.println();
//- 도서 정보 수정 -//
System.out.println("--- 도서 정보 수정 ---");
System.out.print("도서 번호 >> ");
vo.setCode(scanner.next()); scanner.nextLine();
System.out.print("도서명 >> ");
vo.setName(scanner.nextLine());
System.out.print("도서 가격 >> ");
vo.setPrice(scanner.nextInt());
System.out.print("출판사 >> ");
vo.setMaker(scanner.next());
su = bookService.updateBooks(vo);
if(su > 0)
System.out.println("도서 수정 성공!!");
else
System.out.println("도서 성공 실패~");
//- 도서 삭제 -//
System.out.println("--- 도서 정보 삭제 ---");
System.out.print("도서 번호 >> ");
vo.setCode(scanner.next());
su = bookService.deleteBooks(vo);
if(su > 0)
System.out.println("도서 삭제 성공!!");
else
System.out.println("도서 삭제 실패~");
//- 도서 확인 -//
System.out.println("--- 도서 정보 확인 ---");
System.out.print("도서 번호 >> ");
vo.setCode(scanner.next());
vo = bookService.getBooks(vo);
if(vo != null)
System.out.println(vo);
else
System.out.println("없는 도서입니다~");
}
}
package com.mybatis.test;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlMapClientFactory {
private static SqlSessionFactory factory = null;
static {
try {
// 접속 정보를 가진 xml 경로
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
// SqlSessionFactory 생성
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
// DB 접속 객체를 사용해서 DB에 접속한 세션 반환
public static SqlSession getSqlMapClientInstance() {
return factory.openSession();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.score</groupId>
<artifactId>mybatis</artifactId>
<name>Q2_mybatis_quiz_score</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>11</java-version>
<org.springframework-version>5.2.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<!-- 오라클 JDBC 드라이버를 가져오기 위해 리포지토리를 추가합니다. -->
<repositories>
<repository>
<id>oracle</id>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<!-- DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.5.0.0</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mybatis spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>```
---
## resources
---
### db.properties
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=dbtest
jdbc.password=a1234
---
### mybatis-config.xml
```xml
<?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>
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="MANAGED" /><!-- 자동 커밋 -->
<dataSource type="UNPOOLED"><!-- Connection 객체를 호출시 생성 -->
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="score-mapping.xml" />
</mappers>
</configuration>
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<bean id="scoreDAO" class="com.score.mybatis.ScoreDAO"/>
<bean id="scoreService" class="com.score.mybatis.ScoreServiceImpl">
<property name="scoreDAO" ref="scoreDAO"/>
</bean>
</beans>
<?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="mybatis.scoreMapper">
<insert id="insertScore" parameterType="com.score.mybatis.ScoreVO">
INSERT INTO score
VALUES(#{no},#{name},#{kor},#{eng},#{mat},#{tot},#{avg},SYSDATE)
</insert>
<select id="getScoreList" resultType="com.score.mybatis.ScoreVO">
SELECT * FROM score
</select>
</mapper>
package com.score.mybatis;
/*
CREATE TABLE score(
no VARCHAR2(10) PRIMARY KEY, -- 학번
name VARCHAR2(30), -- 이름
kor NUMBER, -- 과목별 점수
eng NUMBER,
mat NUMBER,
tot NUMBER, -- 총점
avg NUMBER(10, 2), -- 평균
logtime date -- 등록일자
);
*/
public class ScoreVO {
private String no;
private String name;
private int kor;
private int eng;
private int mat;
private int tot;
private double avg;
private String logtime;
public ScoreVO() {}
public ScoreVO(String no, String name, int kor, int eng, int mat) {
super();
this.no = no;
this.name = name;
this.kor = kor;
this.eng = eng;
this.mat = mat;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
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;
}
public String getLogtime() {
return logtime;
}
public void setLogtime(String logtime) {
this.logtime = logtime;
}
@Override
public String toString() {
return "성적 [ no : " + no + ", name : " + name + ", kor : " + kor + ", eng : " + eng + ", mat : " + mat + ", tot : "
+ tot + ", avg : " + avg + " ]";
}
}
package com.score.mybatis;
import java.util.List;
public interface ScoreService {
// 학생 한명의 성적 입력
int insertScore(ScoreVO vo);
// 학생 성적 목록
List<ScoreVO> getScoreList(ScoreVO vo);
}
package com.score.mybatis;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("scoreService")
public class ScoreServiceImpl implements ScoreService{
private ScoreDAO scoreDAO;
public void setScoreDAO(ScoreDAO scoreDAO) {
this.scoreDAO = scoreDAO;
}
@Override
public int insertScore(ScoreVO vo) {
// TODO Auto-generated method stub
return scoreDAO.insertScore(vo);
}
@Override
public List<ScoreVO> getScoreList(ScoreVO vo) {
// TODO Auto-generated method stub
return scoreDAO.getScoreList(vo);
}
}
package com.score.mybatis;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlMapClientFactory {
private static SqlSessionFactory factory = null;
static {
try {
// 접속 정보를 가진 xml 경로
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
// SqlSessionFactory 생성
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
// DB 접속 객체를 사용해서 DB에 접속한 세션 반환
public static SqlSession getSqlMapClientInstance() {
return factory.openSession();
}
}
package com.score.mybatis;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
// @Repository
// - DAO class 에 사용됨
// - DB 에 접근하는 메서드를 가지고있는 class에 사용됨
@Repository
public class ScoreDAO {
private SqlSession sqlSession;
public ScoreDAO() {
sqlSession = SqlMapClientFactory.getSqlMapClientInstance();
}
// 학생 한명의 성적 입력
public int insertScore(ScoreVO vo) {
int su = 0;
su = sqlSession.insert("mybatis.scoreMapper.insertScore", vo);
return su;
}
// 학생 성적 목록
public List<ScoreVO> getScoreList(ScoreVO vo) {
List<ScoreVO> list = sqlSession.selectList("mybatis.scoreMapper.getScoreList", vo);
return list;
}
}
package com.score.mybatis;
import java.util.List;
import java.util.Scanner;
import org.springframework.context.support.GenericXmlApplicationContext;
public class ScoreMain {
public static void main(String[] args) {
GenericXmlApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
ScoreService scoreService = context.getBean("scoreService", ScoreService.class);
ScoreVO vo = new ScoreVO();
int su = 0;
List<ScoreVO> list =null;
Scanner sc = new Scanner(System.in);
// --- 학생 정보 ---
while(true) {
System.out.println("1. 학생 정보 등록"
+ "2. 리스트"
+ ">>");
String i=sc.next();
switch (i) {
case "1":
System.out.println("--- 학생 정보 등록 ---");
System.out.print("학번 >> ");
vo.setNo(sc.next());
System.out.print("이름 >> ");
vo.setName(sc.next());
System.out.print("국어 >> ");
vo.setKor(sc.nextInt());
System.out.print("영어 >> ");
vo.setEng(sc.nextInt());
System.out.print("수학 >> ");
vo.setMat(sc.nextInt());
int tot = vo.getKor() + vo.getEng() + vo.getMat();
double avg = tot/3.0;
vo.setTot(tot);
vo.setAvg(avg);
su = scoreService.insertScore(vo);
if(su>0) {
System.out.println("학생 정보 등록 성공");
} else {
System.out.println("학생 정보 등록 실패");
}
break;
case "2":
// --- 학생 정보 목록 ---
System.out.println("--- 학생 목록 조회 ---");
list = scoreService.getScoreList(null);
for(ScoreVO stu : list) {
System.out.println(stu);
}
break;
case "0":
System.out.print("종료");
System.exit(0);
default:
System.out.println("다시");
break;
}
}
}
}
<!-- 한글 깨짐 처리 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
추가
한글 깨짐 처리
서버 포트번호 뒤 설정
path="" /root -> / 로 변경
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<!-- @ 를 자동으로 bean 으로 주입 -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<!-- 정적 자원(hrml, css, ...) 의 절대 경로 mapping -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<!--
# ViewResolver 빈 등록 설정
- prefix : 접두어 / suffix : 접미어
단어의 앞과 뒤에 붙여줌 => /WEB-INF/views/이름.jsp
-->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!--
해당 package 에서 @ 을 확인해서 자동으로 bean 으로 등록
연습용과 같이 여러 팩키지에서 실행할 경우 사용중인 팩키지를 제외하고
나머지 팩키지의 스캔은 하지말자
-->
<!-- <context:component-scan base-package="com.mvc.root" />
<context:component-scan base-package="com.mvc2.di.ex01" /> -->
<!-- <context:component-scan base-package="com.mvc2.di.ex02" /> -->
<context:component-scan base-package="com.mvc2.get_post" />
</beans:beans>
package com.mvc.root;
import org.springframework.stereotype.Controller;
/*
* # @Controller
* - 웹 어플리케이션의 요청을 처리하는 class 에 선언
* - 클라이언트의 요청을 처리하고,
* 해당 요청에 대한 비즈니스 로직을 처리한 후 응답을 처리
*/
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class MyCoontroller {
// 요청 URL 을 어떤 메서드가 처리할지 결정
@RequestMapping(value = "/index")
private String memberIndex(Model model) { // Model 객체는 jsp 페이지로 데이터를 보낼 때 사용
model.addAttribute("index", "기본페이지");
return "member/index";
}
@RequestMapping(value = "/login")
private ModelAndView memberLogin() {
ModelAndView mv = new ModelAndView();
mv.addObject("login", "로그인 페이지"); // 보내지는 데이터 설정
mv.setViewName("member/login"); // view 페이지 이름 설정
return mv;
}
@RequestMapping(value = "/logout")
private String memberLogout(Model model) {
model.addAttribute("logout", "로그아웃이야");
return "member/logout";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.jsp</title>
</head>
<body>
<h1>${index }</h1>
<br>
<a href="/root/login"> 로그인 </a> <a href="/root/logout"> 로그아웃 </a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login.jsp</title>
</head>
<body>
<h1>안녕 나는 로그인페이지야</h1>
<h2>${login }</h2>
<h2><%=request.getAttribute("login") %></h2>
<br>
<a href="/root/index">index</a> <a href="/root/logout">로그아웃</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>logout.jsp</title>
</head>
<body>
<h1>안녕 나는 로그아웃페이지야</h1>
<h2>${logout }</h2>
<a href="/root/index">index</a> <a href="/root/login">로그인</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.jsp</title>
</head>
<body>
<h1>di/index.jsp</h1>
</body>
</html>
package com.mvc2.di.ex01;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MemberController {
private MemberService ms;
@RequestMapping("/insert")
private String insert(Model model) {
ms = new MemberService();
ms.insert();
return "di/index";
}
}
package com.mvc2.di.ex01;
public class MemberDAO {
public void insert() {
System.out.println("- 저장 되었습니다 -");
}
}
package com.mvc2.di.ex01;
public class MemberService {
private MemberDAO dao;
public void insert() {
dao = new MemberDAO();
dao.insert();
}
}
package com.mvc2.di.ex02;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MemberController {
@Autowired
private MemberService ms;
@RequestMapping("/insert")
private String insert(Model model) {
ms.insert();
return "di/index";
}
}
package com.mvc2.di.ex02;
import org.springframework.stereotype.Component;
@Component
public class MemberDAO {
public void insert() {
System.out.println("- 저장 되었습니다 ㅋ -");
}
}
package com.mvc2.di.ex01;
public class MemberService {
private MemberDAO dao;
public void insert() {
dao = new MemberDAO();
dao.insert();
}
}
package com.mvc2.get_post;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class MemberController {
@RequestMapping(value = "/index", method=RequestMethod.GET)// CRUD 처리할 때 명확하게 사용될 것임
public String index() {
return "/get_post/index";
}
@GetMapping("result")
public String memberResultGet(HttpServletRequest request, Model model) {
String name = request.getParameter("name");
String age = request.getParameter("age");
model.addAttribute("method", request.getMethod());
model.addAttribute("name", name);
model.addAttribute("age", age);
return "/get_post/result";
}
// @RequestParam : HttpServletRequest request 객체와 동일한 역할을 한다
// - @RequestParam("속성명") String 저장 변수
@PostMapping("result")
public String memberResultPost(@RequestParam("name") String name, @RequestParam("age") String age, HttpServletRequest request, Model model) {
model.addAttribute("method", request.getMethod());
model.addAttribute("name", name);
model.addAttribute("age", age);
return "/get_post/result";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.jsp</title>
</head>
<body>
<h1>get 방식</h1>
<form action="result">
이 름 : <input type="text" name="name"/>
<br>
나 이 : <input type="text" name="age"/>
<br>
<input type="submit" value="GET 전송"/>
</form>
<form action="result" method="post">
이 름 : <input type="text" name="name"/>
<br>
나 이 : <input type="text" name="age"/>
<br>
<input type="submit" value="POST 전송"/>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>result.jsp</title>
</head>
<body>
<h1>${method } 방식</h1>
<h1> 이름 : ${name }</h1>
<h1> 나이 : ${age +10}</h1>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.care</groupId>
<artifactId>member</artifactId>
<name>Q03_mvc_quiz</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>11</java-version>
<org.springframework-version>5.2.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<!-- 오라클 JDBC 드라이버를 가져오기 위해 리포지토리를 추가합니다. -->
<repositories>
<repository>
<id>oracle</id>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<!-- DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.5.0.0</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mybatis spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.care.member" />
<context:component-scan base-package="com.care.member.controller" />
</beans:beans>
package com.care.member.dto;
public class MemberDTO {
private String id;
private String pwd;
private String name;
public MemberDTO() {
super();
}
public MemberDTO(String id, String pwd, String name) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.care.member.service;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.care.member.dao.MemberDAO;
import com.care.member.dto.MemberDTO;
@Component
public class MemberService {
@Autowired
private MemberDAO dao;
// 회원가입
public void join(MemberDTO dto) {
dao.join(dto);
}
// 회원 목록
public ArrayList<MemberDTO> list() {
return dao.list();
}
}
package com.care.member.dao;
import java.util.ArrayList;
import org.springframework.stereotype.Component;
import com.care.member.dto.MemberDTO;
@Component
public class MemberDAO {
private ArrayList<MemberDTO> list;
public MemberDAO() {
list = new ArrayList<>();
}
// 회원가입
public void join(MemberDTO dto) {
list.add(dto);
System.out.println("등록 성공");
}
// 회원 목록
public ArrayList<MemberDTO> list() {
return list;
}
}
package com.care.member.controller;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.care.member.dto.MemberDTO;
import com.care.member.service.MemberService;
@Controller
public class MemberController {
@Autowired
private MemberService ms;
@RequestMapping("/index")
public String index() {
return "/member/index";
}
@RequestMapping("/joinForm")
public String join() {
return "/member/joinForm";
}
@PostMapping("join")
public String join(@RequestParam("id") String id,
@RequestParam("pwd") String pwd,
@RequestParam("name") String name,
HttpServletRequest request,
Model model) {
MemberDTO dto = new MemberDTO();
dto.setId(id);
dto.setPwd(pwd);
dto.setName(name);
ms.join(dto);
return "/member/index";
}
@RequestMapping("list")
public String list(Model model) {
model.addAttribute("list", ms.list());
return "/member/memberList";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<h1>Index</h1>
<a href="joinForm"> 회원가입</a>
<a href="list"> 모든 회원보기</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Join</title>
</head>
<body>
<h1>회원가입 페이지</h1>
<form action="join" method="post">
<input type="text" name="id" placeholder="id"/> <br>
<input type="text" name="pwd" placeholder="password"/> <br>
<input type="text" name="name" placeholder="name"/> <br>
<input type="submit" value="가입"/>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MemberList</title>
<style type="text/css">
th {
font-weight: bold;
}
</style>
</head>
<body>
<h1>MemberList</h1>
<table border="1">
<tr>
<th>id</th><th>password</th><th>name</th>
</tr>
<c:if test="${list.size()!=0 }">
<c:forEach var="dto" items="${list }" >
<tr>
<td>${dto.id }</td><td>${dto.pwd }</td><td>${dto.name }</td>
</tr>
</c:forEach>
</c:if>
<c:if test="${list.size()==0 }">
<tr>
<td colspan="3"><strong>데이터 없음</strong></td>
</tr>
</c:if>
<tr>
<td colspan="3"><a href="index">index</a></td>
</tr>
</table>
</body>
</html>