0510 프레임워크

조성현·2023년 5월 10일
0

프레임워크

장점

단점

종류

- myBatis(sql mapper framework)
참고사이트 : http://blog.mybatis.org

필요라이브러리

  • jdbc드라이버
  • mybatis 프레임워크
  • log출력 : 작업 진행에 대한 로그를 출력하는 프레임워크

설정파일

  • 데이터베이스 접속
  • SQL mapper

=> Maven(Gradle) Project로 변경해서 만드는것이 편리하다

myBatis를 java project로 만들어보기

1. 라이브러리 추가하기

2. xml파일 추가하기

3. 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>

4. myBatisConfig.xml을 통해 연결할 DB설정

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

클래스 생성

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

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

public class MyBatisEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 파일 선택
		String resource = "myBatisConfig.xml";
		
		// db연결
		InputStream is = null;
		try {
			is = Resources.getResourceAsStream(resource);
			SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
			
			System.out.println("설정 호출");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("에러 : " + e.getMessage());
		} finally {
			if(is != null) try {is.close();} catch(IOException e) {}
		}
	}

}

Dept 테이블 출력하기

DeptTO 생성

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 getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
}

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="maybatis1">
	<!-- xml처럼 sql문 작성 -->
	<select id="deptlist" resultType="model1.DeptTO">
		select deptno, dname, loc from dept
		where deptno = 10
	</select>
	
	<select id="selectall" resultType="model1.DeptTO">
		select deptno, dname, loc from dept
	</select>
</mapper>

클래스 생성

public class MyBatisEx02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 파일 선택
		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 or 여러줄의 데이터 : 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) {
			// TODO Auto-generated catch block
			System.out.println("에러 : " + e.getMessage());
		} finally {
			if(is != null) try {is.close();} catch(IOException e) {}
			if(sqlSession != null) sqlSession.close();
		}
	}
}

list

List<DeptTO> lists = sqlSession.selectList("selectall");
			for(DeptTO to : lists) {
				System.out.println(to.getDeptno());
				System.out.println(to.getDname());
				System.out.println(to.getLoc());
			}

ArrayList

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

myBatis를 webproject로 실행

라이브러리 추가 / xml파일 추가 / logj4.xml / myBatisConfig.xml 설정은 java와 동일

DeptTO

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 getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
}

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="maybatis1">
	<!-- xml처럼 sql문 작성 -->
	<select id="selectone" resultType="model1.DeptTO">
		select deptno, dname, loc from dept
		where deptno=10
	</select>
	
	<select id="selectparamone1" parameterType="String" resultType="model1.DeptTO">
		select deptno, dname, loc from dept
		where deptno=#{deptno}
	</select>
	
	<!-- 하나만 선택하는경우 파라미터타입 설정안해도된다 -->
	<select id="selectparamone2" resultType="model1.DeptTO">
		select deptno, dname, loc from dept
		where deptno=#{deptno}
	</select>
	
	<!-- 여러개 선택할 경우 -->
	<select id="selectparamone3" parameterType="model1.DeptTO" resultType="model1.DeptTO">
		select deptno, dname, loc from dept
		where deptno=#{deptno} and dname=#{dname}
	</select>
	
</mapper>

mybatis.jsp

<%@page import="org.apache.ibatis.reflection.SystemMetaObject"%>
<%@ 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>

mybatis2.jsp

		sqlSession = sqlSessionFactory.openSession();
		
	//	DeptTO to = (DeptTO)sqlSession.selectOne("selectparamone1", "20");
        DeptTO to = (DeptTO)sqlSession.selectOne("selectparamone2", "20");
		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>");

mybatis3.jsp

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

ename을 통해서 사원이름을 설정하고 해당 사원정보 출력하기

EmpTO

public class EmpTO {
	private String empno;
	private String ename;
	private String job;
	private String sal;
	
	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 getSal() {
		return sal;
	}
	public void setSal(String sal) {
		this.sal = sal;
	}
}

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="maybatis1">
	<!-- xml처럼 sql문 작성 -->
	<!-- 여러개 선택할 경우 -->
	<select id="selectparamone1" parameterType="model1.EmpTO" resultType="model1.EmpTO">
		select empno, ename, job, sal from emp
		where ename=#{ename}
	</select>
	
	<select id="selectparamone2" parameterType="model1.EmpTO" resultType="model1.EmpTO">
		select empno, ename, job, sal from emp
		where ename like #{ename}
	</select>
	
	<select id="selectparamone3" parameterType="model1.EmpTO" resultType="model1.EmpTO">
		select empno, ename, job, sal from emp
		where ename like concat(#{ename}, '%')
	</select>
</mapper>

mybatis.jsp

<%
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("selectparamone1", "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.getSal() + "</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();
	}
%>

mybatis2.jsp

		sqlSession = sqlSessionFactory.openSession();
		
		//List<EmpTO> lists = sqlSession.selectList("selectparamone2", "S%" );
		List<EmpTO> lists = sqlSession.selectList("selectparamone3", "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.getSal() + "</td>");
			sbHtml.append("</tr>");
		}
		sbHtml.append("</table>")

transaction

commit : 인정(적용시킴)
rollback : 되돌림

ZipcodeTO
ZipcodeDAO
- Spring

0개의 댓글