2022.10.17 Spring

sofia·2022년 11월 16일
0

Spring

목록 보기
10/11
post-thumbnail


현재 표준형으로

mybatis와 서비스단 추가하여 사용

파라미터 데이터는 hashmap으로 진행중

xml파일은 파라미터 타입으로 해서 hashmap 사용하여 순서에 상관없이 필드명을 찾아감.(param.)

서비스단은 인터페이스와 파일 병합(lmpl)를 사용하여 진행

예제 1


pom.xml

<!-- JDBC Template -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.1.4.RELEASE</version>
		</dependency>

		<!-- mybatis-->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>
		
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>

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.javalec.spring_test_item_std" />
		
	<!-- 추가된 부분 -->

	<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></beans:property>
		<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></beans:property>
		<beans:property name="username" value="scott"></beans:property>
		<beans:property name="password" value="tiger"></beans:property>
	</beans:bean>	
	
	<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<beans:property name="dataSource" ref="dataSource"></beans:property>
		<beans:property name="mapperLocations" value="classpath:com/javalec/spring_test_item_std/dao/mapper/*.xml"></beans:property>
	</beans:bean>
	
	<beans:bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<beans:constructor-arg index="0" ref="sqlSessionFactory"></beans:constructor-arg>
	</beans:bean>

	<!-- 추가된 부분 끝 -->
	
	
</beans:beans>

ItemController.java

package com.javalec.spring_test_item_std.controller;

import java.util.ArrayList;
import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.javalec.spring_test_item_std.dto.ItemDto;
import com.javalec.spring_test_item_std.service.ItemService;

@Controller
public class ItemController {
	
	@Autowired
	private ItemService service;
	
	@RequestMapping("/write")
	public String write() {
		System.out.println("@@@### write()");
		
		return "itemWrite";
	}
	/////////////////////////////////////////////////////////////
	
	
	@RequestMapping("/writeResult")
	public String writeResult(@RequestParam HashMap<String, String> param, Model model) {
		System.out.println("@@@### ItemController.writeResult() start");

		service.write(param);
		
		System.out.println("@@@### ItemController.writeResult() end");
		return "writeResult";
	}
//	
	@RequestMapping("/content_view")
	public String content_view(Model model) {
		System.out.println("@@@### ItemController.content_view() start");
		
		ArrayList<ItemDto> dtos = service.contentView();
		model.addAttribute("content_view",dtos);
		System.out.println("@@@### ItemController.content_view() end ");
		
		return "content_view";
	}
	
}

ItemDto.java

package com.javalec.spring_test_item_std.dto;

public class ItemDto {
	String name;
	int price;
	String description;
	
	public ItemDto() {
		// TODO Auto-generated constructor stub
	}
	
	public ItemDto(String name, int price, String description) {
		this.name = name;
		this.price = price;
		this.description = description;
	}

	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 getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	
}

ItemDao.xml

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

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.javalec.spring_test_item_std.dao.ItemDao">

	<insert id="write" parameterType="hashmap">
   		insert into item (name, price, description) values(#{name}, #{price}, #{description})
    </insert>
    
	<select id="contentView" parameterType="hashmap" resultType="com.javalec.spring_test_item_std.dto.ItemDto">
   		select name, price, description from item
    </select >
    
</mapper>

ItemDao.java

package com.javalec.spring_test_item_std.dao;

import java.util.ArrayList;
import java.util.HashMap;

import com.javalec.spring_test_item_std.dto.*;

public interface ItemDao {
	
	public void write(HashMap<String, String> param);
	
	public ArrayList<ItemDto> contentView();

}

ItemService.java

package com.javalec.spring_test_item_std.service;

import java.util.ArrayList;
import java.util.HashMap;

import com.javalec.spring_test_item_std.dto.ItemDto;

public interface ItemService {

	public void write(HashMap<String, String> param);
	
	public ArrayList<ItemDto> contentView();

	
}

ItemServiceImpl.java

package com.javalec.spring_test_item_std.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;

import com.javalec.spring_test_item_std.dao.*;
import com.javalec.spring_test_item_std.dto.ItemDto;

@Service("ItemService")
public class ItemServiceImpl implements ItemService {
	
	@Autowired
	private SqlSession sqlSession;

	@Override
	public void write(HashMap<String, String> param) {
		System.out.println("@@@### ItemServiceImpl.write() start");
		ItemDao dao = sqlSession.getMapper(ItemDao.class);
		
		dao.write(param);
		System.out.println("@@@### ItemServiceImpl.write() end");		
	}

	@Override
	public ArrayList<ItemDto> contentView() {
		System.out.println("@@@### ItemServiceImpl.contentView() start");
		ItemDao dao = sqlSession.getMapper(ItemDao.class);
		ArrayList<ItemDto> dtos = dao.contentView();
		System.out.println("@@@### ItemServiceImpl.contentView() end");	
		return dtos;
	}
	
}

writeResult.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<a href="content_view">결과 보기</a>
</body>
</html>

ItemWrite.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<form method="post" action="writeResult">
		<table>
			<tr>
				<td>상품명</td>
				<td>
					<input type="text" name="name">
				</td>
			</tr>
			<tr>
				<td>가격</td>
				<td>
					<input type="text" name="price">
				</td>
			</tr>
			<tr>
				<td>설명</td>
				<td>
					<input type="text" name="description">
				</td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" value="전송">
					<input type="reset" value="취소">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

content_view.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<table width="500" border="1">
		<tr>
			<td>상품명</td>
			<td>가격</td>
			<td>설명</td>
		</tr>
		<c:forEach items="${content_view}" var="dto">
			<tr>
				<td>${dto.name}</td>
				<td>${dto.price}</td>
				<td>${dto.description}</td>
			</tr>
		</c:forEach>
	</table>
</body>
</html>

예제2


pom.xml

<!-- JDBC Template -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.1.4.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>
		
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>

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.javalec.spring_test_member_std" />
	
	<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></beans:property>
		<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></beans:property>
		<beans:property name="username" value="scott"></beans:property>
		<beans:property name="password" value="tiger"></beans:property>
	</beans:bean>	
	
	<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<beans:property name="dataSource" ref="dataSource"></beans:property>
		<beans:property name="mapperLocations" value="classpath:com/javalec/spring_test_member_std/dao/mapper/*.xml"></beans:property>
	</beans:bean>
	
	<beans:bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<beans:constructor-arg index="0" ref="sqlSessionFactory"></beans:constructor-arg>
	</beans:bean>	
	
</beans:beans>

MemServiceImpl.java

package com.javalec.spring_test_member_std.service;

import java.util.ArrayList;
import java.util.HashMap;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.javalec.spring_test_member_std.dao.*;
import com.javalec.spring_test_member_std.dto.MemDto;

@Service
public class MemServiceImpl implements MemService{

	@Autowired
	private SqlSession sqlSession;
	
	@Override
	public ArrayList<MemDto> loginYn(HashMap<String, String> param) {
		IMemDao dao = sqlSession.getMapper(IMemDao.class);
		ArrayList<MemDto> dtos = dao.loginYn(param);
		
		return dtos;
	}

	@Override
	public void write(HashMap<String, String> param) {
		IMemDao dao = sqlSession.getMapper(IMemDao.class);
		dao.write(param);
	}

}

MemService.java

package com.javalec.spring_test_member_std.service;

import java.util.ArrayList;
import java.util.HashMap;

import com.javalec.spring_test_member_std.dto.MemDto;

public interface MemService {
	public ArrayList<MemDto> loginYn(HashMap<String, String> param);
	public void write(HashMap<String, String> param);
}

MemDto.java

package com.javalec.spring_test_member_std.dto;

public class MemDto {
	String mem_uid;
	String mem_pwd;
	String mem_name;
	
	public MemDto() {
		// TODO Auto-generated constructor stub
	}
	
	public MemDto(String mem_uid, String mem_pwd, String mem_name) {
		this.mem_uid = mem_uid;
		this.mem_pwd = mem_pwd;
		this.mem_name = mem_name;
	}

	public String getMem_uid() {
		return mem_uid;
	}
	public void setMem_uid(String mem_uid) {
		this.mem_uid = mem_uid;
	}
	public String getMem_pwd() {
		return mem_pwd;
	}
	public void setMem_pwd(String mem_pwd) {
		this.mem_pwd = mem_pwd;
	}
	public String getMem_name() {
		return mem_name;
	}
	public void setMem_name(String mem_name) {
		this.mem_name = mem_name;
	}
	
}

IMemDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.javalec.spring_test_member_std.dao.IMemDao">
    
    <select id="loginYn" parameterType="hashmap" resultType="com.javalec.spring_test_member_std.dto.MemDto">
        select mem_pwd from MVC_MEMBER WHERE mem_uid=#{mem_uid}
    </select>

    <insert id="write" parameterType="hashmap">
    	insert into mvc_member values(#{mem_uid},#{mem_pwd},#{mem_name})
    </insert>
    
</mapper>

IMemDao.java

package com.javalec.spring_test_member_std.dao;

import java.util.ArrayList;
import java.util.HashMap;

import com.javalec.spring_test_member_std.dto.*;

public interface IMemDao {
	public ArrayList<MemDto> loginYn(HashMap<String, String> param);
	public void write(HashMap<String, String> param);
}

MemController.java

package com.javalec.spring_test_member_std.controller;

import java.util.ArrayList;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.javalec.spring_test_member_std.dto.*;
import com.javalec.spring_test_member_std.service.MemService;

@Controller
public class MemController {

	@Autowired
	private MemService service;
	
	@RequestMapping("/login")
	public String login() {
		System.out.println("@@@### login()");
		
		return "login";
	}
	
	@RequestMapping("/login_yn")
	public String login_yn(@RequestParam HashMap<String, String> param, Model model) {
		System.out.println("@@@### login_yn()");
		
		ArrayList<MemDto> dtos = service.loginYn(param);
		
		if (dtos.isEmpty()) {
			return "redirect:login";
		}else {
			if (param.get("mem_pwd").equals(dtos.get(0).getMem_pwd())) {
				return "redirect:login_ok";
			}else {
				return "redirect:login";
			}
		}
		
	}
	
	@RequestMapping("/login_ok")
	public String login_ok() {
		System.out.println("@@@### login_ok()");
		
		return "login_ok";
	}
	
	@RequestMapping("/register")
	public String register() {
		System.out.println("@@@### register()");
		
		return "register";
	}
	
	@RequestMapping("/registerOk")
	public String registerOk(@RequestParam HashMap<String, String> param, Model model) {
		System.out.println("@@@### registerOk()");
		
		service.write(param);
		
		return "redirect:login";
	}
	
}

register.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<table border="1" align="center">
		<form method="post" action="registerOk">
			<tr height="50">
				<td colspan="2">
					<h1>회원 가입 신청</h1>
				</td>
			</tr>
			<tr height="30">
				<td width="80">
					User ID
				</td>
				<td>
					<input type="text" size="20" name="mem_uid">
				</td>
			</tr>
			<tr height="30">
				<td width="80">
					암호
				</td>
				<td>
					<input type="text" size="20" name="mem_pwd">
				</td>
			</tr>
			<tr height="30">
				<td width="80">
					이름
				</td>
				<td>
					<input type="text" size="20" name="mem_name">
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="등록">
				</td>
			</tr>
		</form>
	</table>
</body>
</html>

login.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<table border="1" align="center">
		<form method="post" action="login_yn">
			<tr height="30">
				<td width="100">
					사용자ID
				</td>
				<td width="100">
					<input type="text" name="mem_uid">
				</td>
			</tr>
			<tr height="30">
				<td width="100">
					비밀번호
				</td>
				<td width="100">
					<input type="text" name="mem_pwd">
				</td>
			</tr>
			<tr height="30">
				<td colspan="2" align="center">
					<input type="submit" value="로그인">
					&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
					<!-- <input type="button" value="회원가입"> -->
					<a href="register">회원가입</a>
				</td>
			</tr>
		</form>
	</table>
</body>
</html>

login_ok.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	login ok~!!!
</body>
</html>

Char 18.트랜잭션(Transaction)

논리적 단위로 어떤 한 부분의 작업이 완료되었다 하더라도, 다른 부분의 작업이 완료되지 않을 경우 전체 취소되는 것입니다.

이때, 작업이 완료되는 것을 커밋(commit)이라고 하고, 작업이 취소되는 것을 롤백(rollback)이라고 합니다.

예로 트랜잭션을 하지 않았을 경우 rollback이 되지 않는 경우

트랜젝션 처리가 되어 있는 경우
(PlatformTransactionManger을 사용)

사용하기 전 설정

*. servlet-context.xml


<beans:bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<beans:property name="dataSource" ref="dataSource"></beans:property>
</beans:bean>

<beans:bean name="dao" class="com.javalec.spring_tran_apply.dao.TicketDao" >
<beans:property name="template" ref="template" />
<beans:property name="transactionManager" ref="transactionManager"></beans:property>
</beans:bean>
![](https://velog.velcdn.com/images/sofia_777/post/cefdee1c-08dc-4706-bdcd-696786fd96dc/image.png)

*. Dao

PlatformTransactionManager transactionManager;

public void setTransactionManager(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}

public void buyTicket(final TicketDto dto) {
TransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(definition);

try {
template.update(new PreparedStatementCreator() {
}
});

template.update(new PreparedStatementCreator() {
}
});

transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}
![](https://velog.velcdn.com/images/sofia_777/post/4bcd86fe-2ce1-4448-8caa-202d8afd67a2/image.png)

예제 1

테이블 생성

CREATE TABLE CARD
(consumerId VARCHAR2(10)
,amount NUMBER(1)
);

 CREATE TABLE TICKET
 (consumerId VARCHAR2(10)
 ,countNum NUMBER(1) CHECK(countNum < 5)
 );

pom.xml

<!-- JDBC Template -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.1.4.RELEASE</version>
		</dependency>

servlert-content.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.javalec.spring_tran" />
	
	<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></beans:property>
		<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></beans:property>
		<beans:property name="username" value="scott"></beans:property>
		<beans:property name="password" value="tiger"></beans:property>
	</beans:bean>	
	
	<beans:bean name="template" class="org.springframework.jdbc.core.JdbcTemplate">
		<beans:property name="dataSource" ref="dataSource"></beans:property>
	</beans:bean>		
	
	<beans:bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<beans:property name="dataSource" ref="dataSource"></beans:property>
	</beans:bean>
	<beans:bean name="dao" class="com.javalec.spring_tran.dao.TicketDao">
		<beans:property name="template" ref="template"></beans:property>
		<beans:property name="transactionManager" ref="transactionManager"></beans:property>
	</beans:bean>
</beans:beans>

HomeController.java

package com.javalec.spring_tran;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.javalec.spring_tran.dao.TicketDao;
import com.javalec.spring_tran.dto.TicketDto;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	private TicketDao dao;
	
	@Autowired
	public void setDao(TicketDao dao) {
		this.dao = dao;
	}

	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "redirect:buy_ticket";
	}

	@RequestMapping("buy_ticket")
	public String buy_ticket() {
		return "buy_ticket";
	}
	
	@RequestMapping("buy_ticket_card")
	public String buy_ticket_card(TicketDto ticketDto, Model model) {
		dao.buyTicket(ticketDto);
		model.addAttribute("ticketInfo", ticketDto);
		
		return "buy_ticket_end";
	}
	
}

TicketDto.java

package com.javalec.spring_tran.dto;

public class TicketDto {
	private String consumerId;
	private int countnum;
	
	public String getConsumerId() {
		return consumerId;
	}
	public void setConsumerId(String consumerId) {
		this.consumerId = consumerId;
	}
	public int getCountnum() {
		return countnum;
	}
	public void setCountnum(int countnum) {
		this.countnum = countnum;
	}
	
}

TicketDao.java

package com.javalec.spring_tran.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

import com.javalec.spring_tran.dto.TicketDto;

public class TicketDao {
	JdbcTemplate template;
	PlatformTransactionManager transactionManager;

	public void setTransactionManager(PlatformTransactionManager transactionManager) {
		this.transactionManager = transactionManager;
	}

	public void setTemplate(JdbcTemplate template) {
		this.template = template;
	}
	
	public void buyTicket(final TicketDto dto) {
		TransactionDefinition definition = new DefaultTransactionDefinition();
		TransactionStatus status = transactionManager.getTransaction(definition);
		
		try {
			template.update(new PreparedStatementCreator() {
				
				@Override
				public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
					String query="insert into card(consumerId, amount) values(?,?)";
					PreparedStatement pstmt = con.prepareStatement(query);
					pstmt.setString(1, dto.getConsumerId());
					pstmt.setInt(2, dto.getCountnum());
					
					return pstmt;
				}
			});
			
			template.update(new PreparedStatementCreator() {
				
				@Override
				public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
					String query="insert into ticket(consumerId, countnum) values(?,?)";
					PreparedStatement pstmt = con.prepareStatement(query);
					pstmt.setString(1, dto.getConsumerId());
					pstmt.setInt(2, dto.getCountnum());
					
					return pstmt;
				}
			});
			
			transactionManager.commit(status);
		} catch (Exception e) {
			e.printStackTrace();
			
			transactionManager.rollback(status);
		}

	}
	
}

buy_ticket.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<p>카드 결제</p>
	<form action="buy_ticket_card">
		고객 아이디 :<input type="text" name="consumerId"><br>
		티켓 구매수 :<input type="text" name="countnum"><br>
		<input type="submit" value="구매">
	</form>
</body>
</html>

buy_ticket_end.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	buy_ticket_end.jsp 입니다.<br>
	${ticketInfo.consumerId}<br>
	${ticketInfo.countnum}<br>
</body>
</html>

0개의 댓글