단순 코드 기록/Spring

Spring_myBatis_DML

일일일코_장민기 2024. 2. 15. 16:43
728x90
jdbc.properties
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.userid=scott
jdbc.passwd=tiger

 

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

<select id="testList" resultType="dept">
	select *
	from dept
</select>

<insert id="testInsert" parameterType="dept">
	INSERT INTO dept (deptno, dname, loc)
    VALUES (#{deptno}, #{dname}, #{loc})
</insert>

<update id="testUpdate" parameterType="dept">
	update dept 
	set dname = #{dname}, loc = #{loc}
	where deptno = #{deptno}
</update>

<delete id="testDelete" parameterType="int">
	delete from dept 
	where deptno = #{deptno}
</delete>


</mapper>

 

MainController
package com.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.dto.DeptDTO;
import com.service.MemberService;

@Controller
public class MainController {

	public MainController() {
		super();
		System.out.println("메인 기본 생성자 호출");
	}

	@Autowired
	SqlSessionTemplate session;
	
	@Autowired 
	MemberService service;
 
	@RequestMapping("/testList")
	public String testList(Model m) {
		System.out.println("main testList");
		List<DeptDTO> list = service.testList();
		m.addAttribute("list", list);
		return "list";
	}
	
	@RequestMapping("/testInsert")
	public String testInsert(Model m, DeptDTO dto) {
		System.out.println("main testInsert");
		service.testInsert(dto);
		List<DeptDTO> list = service.testList();
		m.addAttribute("list", list);
		return "list";
	}
	
	@RequestMapping("/testUpdate")
	public String testUpdate(Model m, DeptDTO dto) {
		System.out.println("main testUpdate");
		service.testUpdate(dto);
		List<DeptDTO> list = service.testList();
		m.addAttribute("list", list);
		return "list";
	}
	
	@RequestMapping("/testDelete/{deptno}")
	public String testDelete(Model m, @PathVariable("deptno") int deptno) {
		System.out.println("main testDelete");
		service.testDelete(deptno);
		List<DeptDTO> list = service.testList();
		m.addAttribute("list", list);
		return "list";
	}
	
//	@RequestMapping("/testDelete")
//	public String testDelete(Model m, int deptno) {
//		System.out.println("main testDelete");
//		service.testDelete(deptno);
//		List<DeptDTO> list = service.testList();
//		m.addAttribute("list", list);
//		return "list";
//	}

}

 

DAO
package com.dao;

import java.util.ArrayList;
import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.dto.DeptDTO;

@Repository
public class DeptDAO {
	
	public DeptDAO() {
		super();
		System.out.println("DAO 기본 생성자 호출");
	}

	@Autowired
	SqlSessionTemplate session;
	
	public List<DeptDTO> testList() {
		List<DeptDTO> list = session.selectList("testList");
		System.out.println(list);
		return list;
	}

	public void testInsert(DeptDTO dto) {
		int num = session.insert("testInsert", dto);
		if(num>0) {
		System.out.println("insert 성공");
		}
	}

	public void testUpdate(DeptDTO dto) {
		int num = session.update("testUpdate", dto);
		if(num>0) {
		System.out.println("update 성공");
		}
		
	}

	public void testDelete(int deptno) {
		int num = session.delete("testDelete", deptno);
		if(num>0) {
		System.out.println("delete 성공");
		}
	}
	
	
	
}

 

DTO(lombok 설명 추가)(Alias 주의)

 

package com.dto;

import org.apache.ibatis.type.Alias;

//  lombok 설정(lombok 디펜던시 추가할 경우)
//	@Alias위에 @Data @AllArgsConstructor를 입력
//	--> 오버라이드, 기본생성자, 필드, Getter/Setter 자동 설정(입력해줄 필요 없음)

@Alias("dept")
public class DeptDTO {
	
	private int deptno;
	private String dname;
	private String loc;
	@Override
	public String toString() {
		return "DeptDTO [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
	}
	public DeptDTO() {
		super();
		// TODO Auto-generated constructor stub
	}
	public DeptDTO(int deptno, String dname, String loc) {
		super();
		this.deptno = deptno;
		this.dname = dname;
		this.loc = loc;
	}
	public int getDeptno() {
		return deptno;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
}

 

Service
package com.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.dao.DeptDAO;
import com.dto.DeptDTO;

@Service
public class MemberService {
	
	public MemberService() {
		super();
		System.out.println("서비스 기본 생성자 호출");
	}

	@Autowired
	DeptDAO dao;
	
	
	public List<DeptDTO> testList() {
		System.out.println("service testList");
		List<DeptDTO> list = dao.testList();
		return list;
	}


	public void testInsert(DeptDTO dto) {
		System.out.println("service testInsert");
		dao.testInsert(dto);
	}


	public void testUpdate(DeptDTO dto) {
		System.out.println("service testUpdate");
		dao.testUpdate(dto);
		
	}


	public void testDelete(int deptno) {
		System.out.println("service testDelete");
		dao.testDelete(deptno);
		
	}
	
	
	

}

 

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"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
		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
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

	<annotation-driven />
	<default-servlet-handler/>

	<resources mapping="/resources/**" location="/resources/" />

	<view-controller path="/" view-name="main"/>

	<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.*" />
	
		<!-- ************** 컴포넌트 스캔을 안 쓸 경우 ************** -->
<!-- 	<context:annotation-config></context:annotation-config>
		<beans:bean class="com.controller.MainController" id="mainController"></beans:bean>
		<beans:bean class="com.service.MemberService" id="memberService"></beans:bean>
		<beans:bean class="com.dao.DeptDAO" id="deptDAO"></beans:bean> 			-->
	
	<!-- context:annotation이 기본으로 포함됨(생성할 필요 X) -->
	<!-- properties + SQLSessionFactory의 Bean생성은 root-context.xml -->
	
	
</beans:beans>

 

root-context.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:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans https://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
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

	<!-- 1. placeholder -->	
	<context:property-placeholder location="classpath:com/config/jdbc.properties"/>

	
	<!-- 2. jdbc연결 -->
	<bean id="myDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}"/>
		<property name="url" value="${jdbc.url}"/>
		<property name="username" value="${jdbc.userid}"/>
		<property name="password" value="${jdbc.passwd}"/>
	</bean>


	<!-- 3. transaction -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="myDataSource">						<!-- ref에 2번의 id -->
		</property>
	</bean>
	<tx:annotation-driven transaction-manager="txManager"/>
		
		
	<!-- 4. SQLSessionFactoryBean -->	
	<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="myDataSource">						<!-- ref에 2번의 id -->
		</property>
		<property name="mapperLocations">
			<list>
				<value>classpath:com/config/DeptMapper.xml</value>
			</list>
		</property>
		<property name="typeAliases">
			<list>
				<value>com.dto.DeptDTO</value>
			</list>
		</property>
	</bean>
	
	
	<!-- 5. SQLSessionTemplate : SQLSession 기능 -->
	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg name="sqlSessionFactory" ref="sessionFactory">		<!-- ref에 4번의 id -->
		</constructor-arg>
	</bean>
		
</beans>

 

main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>main.jsp</h1>


</body>
</html>

 

list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>list.jsp</h1>

${list}

<hr>

Insert<br>
<form action="testInsert">
deptno:	<input type="text" name="deptno"><br>
dname:	<input type="text" name="dname"><br>
loc:	<input type="text" name="loc"><br>
<input type="submit" value="submit">
</form>

<hr>

Update<br>
<form action="testUpdate">
deptno:	<input type="text" name="deptno"><br>
dname:	<input type="text" name="dname"><br>
loc:	<input type="text" name="loc"><br>
<input type="submit" value="submit">
</form>

<hr>

Delete<br>
<a href="testDelete/51">삭제하기</a>

<!-- Delete<br>
<a href="testDelete?deptno=51">삭제하기</a> -->
</form>





</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- post 한글 처리  -->
	 <filter>
	   <filter-name>filter</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>
	 </filter>
	 <filter-mapping>
	   <filter-name>filter</filter-name>
	   <url-pattern>/*</url-pattern>
	 </filter-mapping>

</web-app>

'단순 코드 기록 > Spring' 카테고리의 다른 글

Spring_암호화와 복호화  (0) 2024.02.24
Spring_myBatis_selectAll  (0) 2024.02.15
Spring_myBatis  (0) 2024.02.15
Spring_RESTFul  (0) 2024.02.15
Spring_Context주소  (0) 2024.02.15