- myBatis(sql mapper framework)
참고사이트 : http://blog.mybatis.org
필요라이브러리
설정파일
=> Maven(Gradle) 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) {}
}
}
}
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());
}
라이브러리 추가 / 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>");
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>")
commit : 인정(적용시킴)
rollback : 되돌림
ZipcodeTO
ZipcodeDAO
- Spring