SpringBoot/day48 / 23.11.13(월) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 11월 13일
0
post-thumbnail

P07_mybatis


# 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도 마찬가지


pom.xml

<?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>


resources


applicationContext.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: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>

books-mapping.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="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>

mybatis-config.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="books-mapping.xml" />
	</mappers>
</configuration>

db.properties

jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=dbtest
jdbc.password=a1234

com.mybatis.test


BooksVO.java





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 + " ]";
	}
}

BooksDAO.java





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;
		}
	}
}

BookService.inter





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);
	
}

BookServiceImpl.java





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);
	}
}

JDBCTest.java





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("없는 도서입니다~");
	}
}

SqlMapClientFactory.java

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();
	}
}



Q02_mybatis_quiz_score


pom.xml

<?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>

applicationContext.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: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>

score-mapping.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="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>


com.score.mybatis


ScoreVO.java

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 + " ]";
	}
}

ScoreService.inter

package com.score.mybatis;

import java.util.List;


public interface ScoreService {

	// 학생 한명의 성적 입력
	int insertScore(ScoreVO vo);

	// 학생 성적 목록
	List<ScoreVO> getScoreList(ScoreVO vo);
}

ScoreServiceImpl.java

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);
	}

	
}

SqlMapClientFactory.java

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();
	}
}

ScoreDAO.java

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;
	}
}

ScoreMain.java





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;
			}
		}
	}
}



P08_mvc

한글 깨짐

resources/WEB-INF/web.xml

  • web.xml 추가
	<!-- 한글 깨짐 처리 -->
	<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 -> / 로 변경



Spring_구조 및 처리 흐름



resources/WEB-INF/spring/appServlet/

servlet-context.xml

<?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>


com.mvc.root

MyController.java

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";
	}
	
}

member/index.jsp

<%@ 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> &nbsp; <a href="/root/logout"> 로그아웃 </a>
</body>
</html>

login.jsp

<%@ 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> &nbsp; <a href="/root/logout">로그아웃</a>
</body>
</html>

logout.jsp

<%@ 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> &nbsp; <a href="/root/login">로그인</a>
</body>
</html>


com.mvc2.di.ex01


di/index.jsp

<%@ 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>

MemberController.java

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"; 
	} 
}

MemberDAO.java

package com.mvc2.di.ex01;

public class MemberDAO {
	public void insert() {
		System.out.println("- 저장 되었습니다 -");
	}
}

MemberService.java

package com.mvc2.di.ex01;

public class MemberService {
	private MemberDAO dao;
	
	public void insert() {
		dao = new MemberDAO();
		dao.insert();
	}
}


com.mvc2.di.ex02


MemberController.java

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"; 
	} 
}

MemberDAO.java

package com.mvc2.di.ex02;

import org.springframework.stereotype.Component;

@Component
public class MemberDAO {
	
	public void insert() {
		System.out.println("- 저장 되었습니다 ㅋ -");
	}
}

MemberService.java

package com.mvc2.di.ex01;

public class MemberService {
	private MemberDAO dao;
	
	public void insert() {
		dao = new MemberDAO();
		dao.insert();
	}
}


com.mvc2.get_post


MemberController.java

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";
	}
	
}

get-post/index.jsp

<%@ 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>

result.jsp

<%@ 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>



Q03_mvc_quiz


pom.xml

<?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>

appServlet/servlet-context.xml

<?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>

MemberDTO.java

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;
	}
}

MemberService.java

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();
	}
}

MemberDAO.java

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;
	}
	
}

MemberController.java

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";
	}
	
}

index.jsp


<%@ 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>

joinForm.jsp


<%@ 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>

memberList.jsp


<%@ 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>

profile
Fintech

0개의 댓글