Crescendo Code

5월 10일 (수) - [ myBatis 프레임워크를 통한 우편번호 검색기 / Simple 게시판 구현 ] 본문

KIC 백엔드 수업

5월 10일 (수) - [ myBatis 프레임워크를 통한 우편번호 검색기 / Simple 게시판 구현 ]

Crecok 2023. 5. 10. 17:44
반응형

◆ myBatis

- 데이터베이스의 데이터에 관한 처리 기능을 제공하는 프레임워크

- sql mapper framework 라고도 한다.

- XML과 애노테이션으로 설정할 수 있다.

 

▶ myBatis 사이트 : https://blog.mybatis.org

 

The MyBatis Blog

A blog about the the MyBatis data mapper framework.

blog.mybatis.org

Products - Links의 download 클릭
mybatis-3.5.13.zip (최선버전) 다운로드

 

 

▶ MyBatis 설정에 필요한 lib 및 파일

- lib : JDBC 드라이버 / MyBatis 프레임워크 / 로그 출력

- 설정 파일 : 데이터베이스 접속 / SQL mapper

- 위 설정의 불편함을 해소하기 위해 Dynamic → Maven(Gradle) Project로 변경을 많이 한다.

 


 

▶ 시작 전 세팅

 

1. 이클립스 java workspace로 변경

2. log4j-1.2.17.jar / mariadb-java-client-3.0.8.jar / mybatis-3.5.13.jar 이 3개의 lib를 API 폴더 안에 모아놓는다.

   - log4j-1.2.17.jar는 Filezilla에서 다운받을 수 있고, 위 링크에서 받았다면 더 최신 버전이다.

3. Filezilla에서 log4j.xml / mapper.xml / myBatisConfig.xml 다운로드

   - log4j.xml : 작업 진행에 대한 로그를 출력하는 프레임워크

   - myBatisConfig.xml : 데이터베이스에 접속하는 내용을 설정

 

▶ 새 프로젝트 MybatisEx01 생성

▶ 프로젝트 우클릭 - BuildPath - Configure Build Path 에서 classpath에 lib 3개 넣기

 

 

 src 폴더에 log4j.xml / myBatisConfig.xml 파일 복사해서 넣기

 

 

▶ log4j.xml 작성

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
     <appender name="console" class="org.apache.log4j.ConsoleAppender">
          <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1}:%-3L) %m%n" />
          </layout>
     </appender>
     <root>
     	<level value="DEBUG" />
     	<appender-ref ref="console" />
     </root>
</log4j:configuration>

 

 

▶ myBatisConfig.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>
	<environments default="mariadb1">
		<environment id="mariadb1">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="org.mariadb.jdbc.Driver" />
				<property name="url" value="jdbc:mariadb://localhost:3306/sample" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
		
		<environment id="mariadb2">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="org.mariadb.jdbc.Driver" />
				<property name="url" value="jdbc:mariadb://localhost:3306/project" />
				<property name="username" value="project" />
				<property name="password" value="1234" />
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="model1/mapper.xml" />
	</mappers>
</configuration>

 

 

▶ model1 패키지 생성 후, 그 안에 mapper.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="mybatis1">
	<!-- SQL문을 XML처럼 작성 -->
	<select id="deptlist" resultType="model1.DeptTO">
		select deptno, dname, loc
		from dept
		where deptno = 10
	</select>
</mapper>

 

 

▶ model1 패키지 안에 DeptTO.java 클래스 생성 및 코드 작성

package model1;

public class DeptTO {

	private String deptno;
	private String dname;
	private String loc;
	
	public String getDeptno() {
		return deptno;
	}
	public void setDeptno(String deptno) {
		this.deptno = deptno;
	}
	public String getName() {
		return dname;
	}
	public void setName(String name) {
		this.dname = name;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
	
}

 


◈ myBatis 예제 1

- myBatis 프레임워크의 연결과 설정(로그) 호출

 

 

▶ src - MyBatisEx01.java 클래스 파일 생성 / 작성 및 실행

import java.io.IOException;
import java.io.InputStream;

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 MyBatisEx01 {
	public static void main(String[] args) {

		String resource = "myBatisConfig.xml";
		
		InputStream is = null;
		SqlSession sqlSession = null;
		
		try {
			is = Resources.getResourceAsStream( resource );
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
			System.out.println( "설정 호출" );
			
			// session
			sqlSession = sqlSessionFactory.openSession();
			System.out.println( "연결 성공" );
			
		} catch (IOException e) {
			System.out.println( "[에러] " + e.getMessage() );
		} finally {
			if ( sqlSession != null ) sqlSession.close();
			if ( is != null ) try { is.close(); } catch ( IOException e ) {}
		}
		
	}
}

 


◈ myBatis 예제 2

 

- select문 한 줄의 데이터 출력

 

 

▶ src - MyBatisEx02.java 클래스 파일 생성 / 작성 및 실행

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import model1.DeptTO;

public class MyBatisEx02 {
	public static void main(String[] args) {

		String resource = "myBatisConfig.xml";
		
		InputStream is = null;
		SqlSession sqlSession = null;
		
		try {
			is = Resources.getResourceAsStream( resource );
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
			System.out.println( "설정 호출" );
			
			sqlSession = sqlSessionFactory.openSession();
			System.out.println( "연결 성공" );
			
			// 한 줄의 데이터 : selectOne
			// 여러 줄의 데이터 : selectList
			
			DeptTO to = (DeptTO)sqlSession.selectOne( "deptlist" );
			System.out.println( to.getDeptno() );
			System.out.println( to.getDname() );
			System.out.println( to.getLoc() );
			
		} catch (IOException e) {
			System.out.println( "[에러] " + e.getMessage() );
		} finally {
			if ( sqlSession != null ) sqlSession.close();
			if ( is != null ) try { is.close(); } catch ( IOException e ) {}
		}
		
	}
}

 


◈ myBatis 예제 3

- select문 여러 줄의 데이터 출력

 

 

▶ mapper.xml 파일에 아래 코드 추가

	<select id="selectall" resultType="model1.DeptTO">
		select deptno, dname, loc
		from dept
	</select>

 

 

▶ src - MyBatisEx03.java 클래스 파일 생성 / 작성 및 실행

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import model1.DeptTO;

public class MyBatisEx03 {
	public static void main(String[] args) {

		String resource = "myBatisConfig.xml";
		
		InputStream is = null;
		SqlSession sqlSession = null;
		
		try {
			is = Resources.getResourceAsStream( resource );
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
			System.out.println( "설정 호출" );
			
			sqlSession = sqlSessionFactory.openSession();
			System.out.println( "연결 성공" );
			
			// 한 줄의 데이터 : selectOne
			// 여러 줄의 데이터 : selectList
			
			// List<DeptTO> lists = sqlSession.selectList( "selectall" );
			ArrayList<DeptTO> lists = (ArrayList)sqlSession.selectList( "selectall" );
			for( DeptTO to : lists ) {
				System.out.println( to.getDeptno() );
				System.out.println( to.getDname() );
				System.out.println( to.getLoc() );
			}
				
		} catch (IOException e) {
			System.out.println( "[에러] " + e.getMessage() );
		} finally {
			if ( sqlSession != null ) sqlSession.close();
			if ( is != null ) try { is.close(); } catch ( IOException e ) {}
		}
		
	}
}

- List 와 ArrayList 구문 둘 다 동일하게 출력된다.

 


◈ myBatis 예제 4

- 웹에서 구현하기

 

▶ 이클립스 jsp-workspace로 변경

▶ 아래와 같이 필요한 파일 및 문서 삽입

▶ DeptTO.java 안의 내용은 위 예제와 동일하게 작성

 

 

▶ log4j.xml 코드 작성

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
     <appender name="console" class="org.apache.log4j.ConsoleAppender">
          <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35c{1}:%-3L) %m%n" />
          </layout>
     </appender>
     <root>
     	<level value="DEBUG" />
     	<appender-ref ref="console" />
     </root>
</log4j:configuration>

 

 

▶ myBatisConfig.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>
	<environments default="mariadb1">
		<environment id="mariadb1">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="org.mariadb.jdbc.Driver" />
				<property name="url" value="jdbc:mariadb://localhost:3306/sample" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="model1/mapper.xml" />
	</mappers>
</configuration>

 

 

▶ mapper.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="mybatis1">
	<select id="selectone" resultType="model1.DeptTO">
		select deptno, dname, loc
		from dept
		where deptno = 10
	</select>
</mapper>

 

 

▶ mybatis01.jsp 코드 작성 및 실행

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.io.IOException" %>
<%@ page import="java.io.InputStream" %>

<%@ page import="org.apache.ibatis.io.Resources" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactoryBuilder" %>

<%@ page import="model1.DeptTO" %>

<%
	String resource = "myBatisConfig.xml";

	InputStream is = null;
	SqlSession sqlSession = null;
	
	StringBuilder sbHtml = new StringBuilder();
	
	try {
		is = Resources.getResourceAsStream( resource );
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
		
		sqlSession = sqlSessionFactory.openSession();
		
		DeptTO to = (DeptTO)sqlSession.selectOne( "selectone" );
		
		sbHtml.append( "<table>" );
		sbHtml.append( "<tr>" );
		sbHtml.append( "<td>" + to.getDeptno() + "</td>" );
		sbHtml.append( "<td>" + to.getDname() + "</td>" );
		sbHtml.append( "<td>" + to.getLoc() + "</td>" );
		sbHtml.append( "</tr>" );
		sbHtml.append( "</table>" );
		
	} catch( IOException e ) {
		System.out.println( "[에러] " + e.getMessage() );
	} finally {
		if( sqlSession != null ) sqlSession.close();
		if( is != null ) is.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml %>
</body>
</html>

 


 

◈ myBatis 예제 5

- select 문으로 1개의 파라미터값을 받아서 처리할 때

 

 

▶ mapper.xml 문서에 아래 코드 추가

	<select id="selectparamone2" resultType="model1.DeptTO">
		select deptno, dname, loc
		from dept
		where deptno = #{deptno}
	</select>

 

 

▶ mybatis02.jsp 파일을 새로 복사한 후 Dept to 할당 부분을 아래 코드로 변경 후 실행

DeptTO to = (DeptTO)sqlSession.selectOne( "selectparamone2", "20" );

 


 

◈ myBatis 예제 6

- select 문으로 여러 개의 파라미터값을 받아서 처리할 때

 

 

▶ mapper.xml 문서에 아래 코드 추가

	<select id="selectparamone3" parameterType="model1.DeptTO" resultType="model1.DeptTO">
		select deptno, dname, loc
		from dept
		where deptno = #{deptno} and dname=#{dname}
	</select>

 

 

▶ mybatis03.jsp 파일을 새로 복사한 후 코드 작성 후 실행

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.io.IOException" %>
<%@ page import="java.io.InputStream" %>

<%@ page import="org.apache.ibatis.io.Resources" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactoryBuilder" %>

<%@ page import="model1.DeptTO" %>

<%
	String resource = "myBatisConfig.xml";

	InputStream is = null;
	SqlSession sqlSession = null;
	
	StringBuilder sbHtml = new StringBuilder();
	
	try {
		is = Resources.getResourceAsStream( resource );
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
		
		sqlSession = sqlSessionFactory.openSession();
		
		DeptTO paramTO = new DeptTO();
		paramTO.setDeptno( "30" );
		paramTO.setDname( "SALES" );
		
		DeptTO to = (DeptTO)sqlSession.selectOne( "selectparamone3", paramTO );
		
		sbHtml.append( "<table>" );
		sbHtml.append( "<tr>" );
		sbHtml.append( "<td>" + to.getDeptno() + "</td>" );
		sbHtml.append( "<td>" + to.getDname() + "</td>" );
		sbHtml.append( "<td>" + to.getLoc() + "</td>" );
		sbHtml.append( "</tr>" );
		sbHtml.append( "</table>" );
		
	} catch( IOException e ) {
		System.out.println( "[에러] " + e.getMessage() );
	} finally {
		if( sqlSession != null ) sqlSession.close();
		if( is != null ) is.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml %>
</body>
</html>

 


 

◈ ename을 통해 그 사원의 정보를 출력하는 Mybatis Project 만들기

 

 

▶ EmpTO.java 코드 작성

package model1;

public class EmpTO {

	private String empno;
	private String ename;
	private String job;
	private String mgr;
	
	public String getEmpno() {
		return empno;
	}
	public void setEmpno(String empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public String getMgr() {
		return mgr;
	}
	public void setMgr(String mgr) {
		this.mgr = mgr;
	}

}

 

 

▶ mapper.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="mybatis1">
	
	<select id="selectparamlist" resultType="model1.EmpTO">
		select empno, ename, job, mgr
		from emp
		where ename = #{ename}
	</select>
	
</mapper>

 

 

▶ mybatis01.jsp 파일 생성 후 실행

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.io.IOException" %>
<%@ page import="java.io.InputStream" %>

<%@ page import="org.apache.ibatis.io.Resources" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactoryBuilder" %>

<%@ page import="model1.EmpTO" %>

<%
String resource = "myBatisConfig.xml";

	InputStream is = null;
	SqlSession sqlSession = null;
	
	StringBuilder sbHtml = new StringBuilder();
	
	try {
		is = Resources.getResourceAsStream( resource );
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
		
		sqlSession = sqlSessionFactory.openSession();
		
		EmpTO to = (EmpTO)sqlSession.selectOne( "selectparamlist", "SCOTT" );
		
		sbHtml.append( "<table>" );
		sbHtml.append( "<tr>" );
		sbHtml.append( "<td>" + to.getEmpno() + "</td>" );
		sbHtml.append( "<td>" + to.getEname() + "</td>" );
		sbHtml.append( "<td>" + to.getJob() + "</td>" );
		sbHtml.append( "<td>" + to.getMgr() + "</td>" );
		sbHtml.append( "</tr>" );
		sbHtml.append( "</table>" );
		
	} catch( IOException e ) {
		System.out.println( "[에러] " + e.getMessage() );
	} finally {
		if( sqlSession != null ) sqlSession.close();
		if( is != null ) is.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml %>
</body>
</html>


 

◈ SQL의 일부 검색인 like를 통해 ename을 검색하고 사원 정보를 출력하기

 

 

▶ mapper.xml 파일에 아래 코드 추가

	<select id="selectparamlist2" resultType="model1.EmpTO">
		select empno, ename, job, mgr
		from emp
		where ename like #{ename}
	</select>

 

 

▶ mybatis02.jsp 생성 후 실행

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.io.IOException" %>
<%@ page import="java.io.InputStream" %>

<%@ page import="org.apache.ibatis.io.Resources" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactoryBuilder" %>

<%@ page import="java.util.List" %>
<%@ page import="model1.EmpTO" %>

<%
String resource = "myBatisConfig.xml";

	InputStream is = null;
	SqlSession sqlSession = null;
	
	StringBuilder sbHtml = new StringBuilder();
	
	try {
		is = Resources.getResourceAsStream( resource );
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
		
		sqlSession = sqlSessionFactory.openSession();
		
		List<EmpTO> lists = sqlSession.selectList( "selectparamlist2", "S%" );
		
		sbHtml.append( "<table>" );
		for( EmpTO to : lists ) {
			sbHtml.append( "<tr>" );
			sbHtml.append( "<td>" + to.getEmpno() + "</td>" );
			sbHtml.append( "<td>" + to.getEname() + "</td>" );
			sbHtml.append( "<td>" + to.getJob() + "</td>" );
			sbHtml.append( "<td>" + to.getMgr() + "</td>" );
			sbHtml.append( "</tr>" );
		}
		sbHtml.append( "</table>" );
		
	} catch( IOException e ) {
		System.out.println( "[에러] " + e.getMessage() );
	} finally {
		if( sqlSession != null ) sqlSession.close();
		if( is != null ) is.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml %>
</body>
</html>

 


 

◈ 위 예제를 DB 문법적으로 해결하기

 

 

▶ mapper.xml 파일에 아래 코드 추가

	<select id="selectparamlist3" resultType="model1.EmpTO">
		select empno, ename, job, mgr
		from emp
		where ename like concat( #{ename}, '%' )
	</select>

 

 

▶ mybatis02.jsp 파일의 일부를 아래 코드로 변경 후 실행

List<EmpTO> lists = sqlSession.selectList( "selectparamlist3", "S" );

- 실행시 위 예제와 동일한 결과가 출력된다.

 


 

◈ myBatis 예제 - DB insert 문

- Transaction : insert / update / delete 구문 시 데이터베이스에 직접 적용되는 것이 아니라, 데이터를 잠시 보관해둔다.

- Transaction은 commit / rollback 기능이 있다.

- 데이터베이스 적용은 commit 으로 한다.

 

 

▶ mapper.xml 파일에 아래 코드 추가

	<insert id="insert1" parameterType="model1.DeptTO">
		insert into dept2 ( deptno, dname, loc )
		values ( #{deptno}, #{dname}, #{loc} )
	</insert>

 

 

▶ mybatis04.jsp 파일 코드 작성 및 실행

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.io.IOException" %>
<%@ page import="java.io.InputStream" %>

<%@ page import="org.apache.ibatis.io.Resources" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactoryBuilder" %>

<%@ page import="model1.DeptTO" %>

<%
String resource = "myBatisConfig.xml";

	InputStream is = null;
	SqlSession sqlSession = null;
	
	StringBuilder sbHtml = new StringBuilder();
	
	try {
		is = Resources.getResourceAsStream( resource );
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
		
		// true - auto commit
		sqlSession = sqlSessionFactory.openSession( true );
		
		DeptTO to = new DeptTO();
		to.setDeptno( "90" );
		to.setDname( "총무부" );
		to.setLoc( "서울" );
		
		int result = sqlSession.insert( "insert1", to );
		if( result == 1) {
			// sqlSession.commit();
			sbHtml.append( "입력 성공 : " + result );
		}
		
	} catch( IOException e ) {
		System.out.println( "[에러] " + e.getMessage() );
	} finally {
		if( sqlSession != null ) sqlSession.close();
		if( is != null ) is.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml %>
</body>
</html>

 

 

▶ commit 기능의 수행 방법

1. sqlSession = sqlSessionFactory.openSession( true );

2. sqlSession.commit();

 

 


 

◈ myBatis 예제 - DB update / delete 문

 

 

▶ mapper.xml 파일에 아래 코드 추가

	<update id="update1" parameterType="model1.DeptTO">
		update dept2
		set dname=#{dname}
		where deptno=#{deptno}
	</update>
	
	<delete id="delete1" parameterType="model1.DeptTO">
		delete from dept2
		where deptno=#{deptno}
	</delete>

 

 

▶ mybatis05.jsp 파일 생성 / 코드 작성 및 실행 ( update )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.io.IOException" %>
<%@ page import="java.io.InputStream" %>

<%@ page import="org.apache.ibatis.io.Resources" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactoryBuilder" %>

<%@ page import="model1.DeptTO" %>

<%
String resource = "myBatisConfig.xml";

	InputStream is = null;
	SqlSession sqlSession = null;
	
	StringBuilder sbHtml = new StringBuilder();
	
	try {
		is = Resources.getResourceAsStream( resource );
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
		
		sqlSession = sqlSessionFactory.openSession( true );
		
		DeptTO to = new DeptTO();
		to.setDeptno( "90" );
		to.setDname( "회계부" );
		
		int result = sqlSession.update( "update1", to );
		if( result == 1) {
			sbHtml.append( "수정 성공" );
		}
		
	} catch( IOException e ) {
		System.out.println( "[에러] " + e.getMessage() );
	} finally {
		if( sqlSession != null ) sqlSession.close();
		if( is != null ) is.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml %>
</body>
</html>

 

 

 

▶ mybatis06.jsp 파일 생성 / 코드 작성 및 실행 ( delete )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.io.IOException" %>
<%@ page import="java.io.InputStream" %>

<%@ page import="org.apache.ibatis.io.Resources" %>
<%@ page import="org.apache.ibatis.session.SqlSession" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactory" %>
<%@ page import="org.apache.ibatis.session.SqlSessionFactoryBuilder" %>

<%@ page import="model1.DeptTO" %>

<%
String resource = "myBatisConfig.xml";

	InputStream is = null;
	SqlSession sqlSession = null;
	
	StringBuilder sbHtml = new StringBuilder();
	
	try {
		is = Resources.getResourceAsStream( resource );
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
		
		sqlSession = sqlSessionFactory.openSession( true );
		
		DeptTO to = new DeptTO();
		to.setDeptno( "90" );
		to.setDname( "회계부" );
		
		int result = sqlSession.delete( "delete1", to );
		if( result == 1) {
			sbHtml.append( "삭제 성공" );
		}
		
	} catch( IOException e ) {
		System.out.println( "[에러] " + e.getMessage() );
	} finally {
		if( sqlSession != null ) sqlSession.close();
		if( is != null ) is.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml %>
</body>
</html>

 


◈ myBatis 예제 - DAO

 

 

▶ mapper.xml 파일에 아래 코드 추가

	<select id="selectlist" resultType="model1.DeptTO">
		select deptno, dname, loc
		from dept
	</select>

 

 

▶ DeptDAO.java 클래스 생성 후 코드 작성

package model1;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionException;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class DeptDAO {
	
	private SqlSession sqlSession;
	
	public DeptDAO() {
		String resource = "myBatisConfig.xml";
		InputStream is = null;
		
		try {
			is = Resources.getResourceAsStream( resource );
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( is );
			
			this.sqlSession = sqlSessionFactory.openSession( true );
		} catch (IOException e) {
			System.out.println( "[에러] " + e.getMessage() );
		} finally {
			if( is != null ) try { is.close(); } catch ( IOException e ) {}
		}
		
	}
	
	public List<DeptTO> selectList() {
			
		List<DeptTO> lists = sqlSession.selectList( "selectlist" );
		if( sqlSession != null ) sqlSession.close();
		return lists;
	}
}

 

 

▶ dao01.jsp 생성 후 코드 작성 및 실행

<%@page import="model1.DeptTO"%>
<%@page import="java.util.List"%>
<%@page import="model1.DeptDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	DeptDAO dao = new DeptDAO();
	List<DeptTO> lists = dao.selectList();
	
	StringBuilder sbHtml = new StringBuilder();
	
	sbHtml.append( "<table>" );
	for( DeptTO to : lists ) {
		sbHtml.append( "<tr>" );
		sbHtml.append( "<td>" + to.getDeptno() + "</td>" );
		sbHtml.append( "<td>" + to.getDname() + "</td>" );
		sbHtml.append( "<td>" + to.getLoc() + "</td>" );
		sbHtml.append( "</tr>" );
	}
	sbHtml.append( "</table>" );
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=sbHtml %>
</body>
</html>

 


◈ myBatis를 활용해 우편번호 검색기 만들기

- 기법 : model1

 

완성자료 : F / 수업자료 / 우편번호 검색기 / MyBatis 프레임워크 활용 방식

 


◈ myBatis를 활용해 Simple 게시판 만들기

- 기법 : model1

 

완성자료 : F / 수업자료 / 게시판 / simple 게시판 - MyBatis - model1 방식

 

반응형
Comments