일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- sql
- 웹개발
- jvm메모리구조
- 코드잇
- job
- mysql
- MVC
- 밤비노
- BCIT
- SpringFramework
- servlet
- Java
- 웹개발기초
- 안드로이드
- html
- CSS
- MSA
- coding test
- 웹개발자
- 리액트프로젝트
- Programming
- C
- 자바
- microservices
- Bambino
- DB
- msa개념
- jsp
- 데이터베이스
- two pointers
- Today
- Total
초보 개발자의 기록
MyBatis? 본문
RIA(Rich Internet Application) :
웹 애플리케이션의 장점은 유지하면서 기존 웹 브라우저 기반 인터페이스의 단점인 늦은 응답 속도, 데스크톱 애플리케이션에 비해 떨어지는 조작성 들을 개선하기 위한 기술의 통칭( 웹의 한계를 뛰어넘음)
웹의 새로고침 없이 마치 응용프로그램처럼 구현되는 류의 프로그램
-마이플랫폼(Miplatform): 국내 유일의 유무선 통합 UI 개발/운용 환경
-마이바티스(MyBatis) : 자바 퍼시스턴스 프레임워크의 하나로 XML서술자나 애너테이션(annotation) 을 사용하여
저장프로시저나 SQL문으로 객체들을 연결시킨다
IBatis의 포그이며, 원 개발자들이 포함된 팀에 의해 유지보수된다.
JDBC로 처리하는 상당부분의 코드와 파라미터 설정 및 결과 매핑을 대신해준다.
매핑(Mapping)? sql문과 VO 자동매칭
기술만 달라지고, VO,DAO 는 존재해야함
mybatis.org/mybatis-3/ko/getting-started.html#
MyBatis – 마이바티스 3 | 시작하기
Copyright © 2009–2020MyBatis.org. .
mybatis.org
이클립스이용 -아래 두가지 eclipse Marketplace에서 install
config.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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="jdbc:mariadb://localhost:3307/db1202"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!--매퍼들의 위치 등록 -->
<mappers>
<mapper resource="mybatis/config/DeptMapper.xml"/>
</mappers>
</configuration>
MyBatisManager.java
자바코드와 상관성이 없기때문에 자바가 xml파일을 읽어들이기 위해서는 fileStream이 필요함
SqlSessionFactory :SqlSession인스턴스 얻기위한 팩토리 - 다른곳에서 사용할 수 있도록 getter생성
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
/*
DB접속 정보 및 메퍼들에 대한 위치가 지정된 마이바티스의 설정파일을 읽어보자
* */
package db;
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 MybatisManager {
private SqlSessionFactory sqlSessionFactory; //SqlSession의 인스턴스를 얻기위한 팩토리 객체
public MybatisManager() {
String resource = "mybatis/config/config.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
} catch (IOException e) {
e.printStackTrace();
}
}
public SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
public static void main(String[] args) {
new MybatisManager();
}
}
MariaDB: db1202 dept table을 이용하여 CRUD수행
DeptMapper.xml
namespace?
패키지명, 해당 VO관련되도록 적어줌
네임스페이스은 인터페이스 바인딩을 가능하게 한다.
네임스페이스을 사용하고 자바 패키지의 네임스페이스을 두면 코드가 깔끔해지고 마이바티스의 사용성이 크게 향상됨
<?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="mybatis.config.Dept">
<!--
개발자는 mybatis를 이용할 경우, 자바코드에서 쿼리문을 작성하지 않으며,
수많은 jdbc관련 코드 또한 작성할 필요가 없고, 오직 쿼리문에만 집중하면 된다.
-->
<!--모든 글 가져오기-->
<select id="selectAll" resultType="emp.model.Dept">
SELECT * FROM dept ORDER BY deptno ASC
</select>
<!--한건가져오기-->
<select id="select" parameterType="int" resultType="emp.model.Dept">
SELECT * FROM dept WHERE deptno=#{deptno}
</select>
<!--글 등록 -->
<insert id="insert" parameterType="emp.model.Dept">
INSERT INTO dept (dname, loc) VALUES(#{dname}, #{loc})
</insert>
<!--한건 수정하기-->
<update id="update" parameterType="emp.model.Dept">
UPDATE dept SET dname=${dname}, loc=#{loc} WHERE deptno=#{deptno}
</update>
<!--삭제하기-->
<delete id="delete" parameterType="int">
DELETE FROM dept WHERE deptno=#{deptno}
</delete>
</mapper>
모든 글 가져오기
<select id="select" resultType="어디에 담을것인지? VO의 위치">
여러건인데 왜 VO에 담는가? ArrayList가 아닌지? List는 내부적으로 숨겨져있음
parameterType="자료형(int= java.lang.Integer)"
#{파라미터명}
Dept.java
package emp.model;
public class Dept {
private int deptno;
private String dname;
private String 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;
}
}
DeptDAO.java
SqlSessionFactory 에서 SqlSession 만들기 :
SqlSessionFactory 이름에서 보듯이 SqlSession 인스턴스를 만들수 있다.
SqlSession 은 데이터베이스에 대해 SQL명령어를 실행하기 위해 필요한 모든 메소드를 가지고 있다.
그래서 SqlSession 인스턴스를 통해 직접 SQL 구문을 실행할 수 있다.
/*
지금까지는 DAO의 코드 기술을 JDBC로 이용하였기 때문에 쿼리문보다 그 외의 코드가 더 장황했었다.
따라서, 이번 DAO에서는 mybatis 프레임웍을 도입하여, 코드를 보다 간결하게 작성해보겠다.
*/
package emp.model;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import db.MybatisManager;
public class DeptDAO {
//DAO에서 SQL문이 들어있는 xml을 호출하자!
//이때, 어떤 쿼리수행을 원하는지를 구분하기 위해서는
//xml태그에 부여한 id를 이용하면 된다.
//xml태그를 호출하기 위해서는 mybatis의 SqlSession이 필요하고,
//현재는 MyBatisManager 클래스의 멤버로두었다.
MybatisManager manager = new MybatisManager();
SqlSessionFactory factory;
public DeptDAO() {
factory = manager.getSqlSessionFactory();
}
//모든 데이터 가져오기
public List selectAll() {
SqlSession session = factory.openSession(); //쿼리문 수행객체 생성
return session.selectList("mybatis.config.Dept.selectAll");
}
}
list.jsp
<%@page import="emp.model.Dept"%>
<%@page import="java.util.List"%>
<%@page import="emp.model.DeptDAO"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
//DAO이용하여 부서 정보 출력해보자
DeptDAO dao = new DeptDAO();
List<Dept> list = dao.selectAll();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
</style>
<script>
</script>
</head>
<body>
<%for(int i=0; i<list.size(); i++){ %>
<%Dept dept =list.get(i);%>
부서번호<%=dept.getDeptno() %>, 부서명<%=dept.getDname() %>, 위치<%=dept.getLoc() %><br>
<%} %>
</body>
</html>
결과출력>
jenkwon92 - Overview
jenkwon92 has 9 repositories available. Follow their code on GitHub.
github.com