재미있게 코딩합시다

스프링 - mybatis (마이바티스) 본문

IT /Spring(스프링)

스프링 - mybatis (마이바티스)

감민셔 2019. 1. 7. 18:15

마이바티스는 무엇인가?

마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.

-출처 : http://www.mybatis.org/mybatis-3/ko/index.html 에서 가지고 왔습니다-



마이바티스 환경설정파일 : 마이바티스에 대한 전반적인 설정정보들.

-  매핑설정파일이 어디에 있는지,

- DB에 어떻게 접속할껀지,

- 사용할 모델클래스에 대한 별명, 정보등....


매핑설정파일 :

- 사용할 SQL문들에 대한 정의


Session 빌드 및 사용

-실제 SQL문 실행


mybatis 하기 전에 pom.xml 에

코드보기


을 추가해주시면 됩니다.

전에 추가한거에서 마이바티스를 추가한거뿐입니다.

를 만들어주세요


http://www.mybatis.org/mybatis-3/ko/getting-started.html


configuration.xml에 붙여넣기!!!


1.사용할 모델 클래스에 대한 정보

2. DB 연결정보 +@

3.SQL문이 저장 돼있는 매퍼파일의 정보


를 안에 넣어봅니다.


직접 써보세요!!!!


<사용할 모델 클래스들의 대한 정보> ==>

type 에는 사용할 모델클래스의 풀 패키지명을 적어주시는것 잊지마세욤


<transactionManager>에는

2가지 타입의 transactionManager를  제공합니다.

1. JDBC - 이설정은 간단하게 commit과 rollback을 처리하기 위해서 사용됩니다.

트랜잭션의 스코프를 관리하기 위해 dataSource로 부터 커넥션을 가지고옵니다.


2. MANAGED - 이설정은 어떤것도 하지 않는다. 결코 commit이나 rollback 하지않습니다.

대신 컨테이너가 트랜잭션의 모든 생명주기를 관리합니다.


<dataSource>이 제공하는 2가지 dataSource를 보겟습니다.


1. UNPOOLED – 이 구현체는 매번 요청에 대해 커넥션을 열고 닫는 간단한 DataSource  입니다. 조금 늦긴 하지만 성능을 크게 필요로 하지                         않는 간단한 애플리케이션을 위해서는 괜찮은 선택. UNPOOLED DataSource 는 5 개의 프로퍼티만으로 설정됨

- driver – JDBC 드라이버의 패키지 경로를 포함한 결제 자바 클래스명 

- url – 데이터베이스 인스턴스에 대한 JDBC URL. 

- username – 데이터베이스에 로그인 할 때 사용할 사용자명

- password - 데이터베이스에 로그인 할 때 사용할 패스워드

- defaultTransactionIsolationLevel – 커넥션에 대한 디폴트 트랜잭션 격리 레벨


2.  POOLED – DataSource 에 풀링이 적용된 JDBC 커넥션을 위한 구현체이다. 이는 새로운 Connection 인스턴스를 생성하기 위해 매번 초기화하는 것을 피하게 해준다. 그래서 빠른 응답을 요구하는 웹 애플리케이션에서는 가장 흔히 사용되고 있다.

- poolMaximumActiveConnections – 주어진 시간에 존재할 수 있는 활성화된(사용중인) 커넥션의 수. 디폴트는 10 이다. 

- poolMaximumIdleConnections – 주어진 시간에 존재할 수 있는 유휴 커넥션의 수

- poolMaximumCheckoutTime – 강제로 리턴되기 전에 풀에서 “체크아웃” 될 수 있는 커넥션의 시간. 디폴트는 20000ms(20 초) 

- poolTimeToWait – 풀이 로그 상태를 출력하고 비정상적으로 긴 경우 커넥션을 다시 얻을려고 시도하는 로우 레벨 셋팅. 디폴트는 20000ms(20 초) 

- poolPingQuery – 커넥션이 작업하기 좋은 상태이고 요청을 받아서 처리할 준비가 되었는지 체크하기 위해 데이터베이스에 던지는 핑쿼리(Ping Query). 디폴트는 “핑 쿼리가 없음” 이다. 이 설정은 대부분의 데이터베이스로 하여금 에러메시지를                         보게 할수도 있다. 

- poolPingEnabled – 핑쿼리를 사용할지 말지를 결정. 사용한다면, 오류가 없는(그리고 빠른) SQL 을 사용하여 poolPingQuery 프로퍼 티를 셋팅해야 한다. 디폴트는 false 이다.

- poolPingConnectionsNotUsedFor – poolPingQuery 가 얼마나 자주 사용될지 설정한다. 필요이상의 핑을 피하기 위해 데이터베이스의 타임아웃 값과 같을 수 있다. 디폴트는 0 이다. 디폴트 값은 poolPingEnabled 가 true 일 경우에만, 모든 커넥션이 매번 핑을                                                     던지는 값이다. 


configuration.xml 의 설정은 끝.

이제 모델클래스와 DAO 설정을 해야합니다.


dao 패키지를 만들고

그안에 DAO를 만들어줍니다 코드보기

	package dao;



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.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import model.Dept;

public class DeptDao {
	private SqlSessionFactory sqlSessionFactory;

	public DeptDao() {
		InputStream is = null;
		try {
			is = Resources.getResourceAsStream("configuration.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (is != null)
					is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public List selectAll() {
		// sqlsession하나 사용할 준비
		SqlSession session = sqlSessionFactory.openSession();
		try {
			return session.selectList("dao.deptMapper.selectAll");
		} finally {
			// TODO: handle finally clause
			session.close();
		}
	}
	public Dept selectOne(int deptno) {

		SqlSession session = sqlSessionFactory.openSession();
		try {
			return session.selectOne("dao.deptMapper.selectOne", deptno);
		} finally {
			// TODO: handle finally clause
			session.close();
		}
	}
	public void insert(Dept dept) {

		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.insert("dao.deptMapper.insertDept", dept);
			if(dept == null)
				session.commit();
			else 
				session.rollback();
		} finally {
			// TODO: handle finally clause
			session.close();
		}
	}
	public void update(Dept dept) {

		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.update("dao.deptMapper.updateDept", dept);
		} finally {

		// TODO: handle finally clause
			session.close();
		}
	}
	public void delete(int deptno) {

		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.delete("dao.deptMapper.deleteDept", deptno);
		} finally {
			// TODO: handle finally clause
			session.close();

		}
	}
}
	

(지금껏 spring에서 햇던 dao 와 큰 다를바가 없다)

dao패키지안에 이제 

configuration에서 정의햇던 deptMapper.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 = "dao.deptMapper">

  

  <insert id="insertDept" parameterType="dept">

  insert into dept values

  ( #{deptno},#{dname},#{dloc} )

  </insert>

 

  <update id="updateDept" parameterType="dept">

  update dept set dname= #{dname}, dloc = #{dloc}

  where deptno=#{deptno}

  </update>

 

  <delete id="deleteDept" parameterType="int">

  delete from dept where deptno = #{deptno}

  </delete>

 

  <select id="selectAll" resultType="dept">

  select * from dept

  </select>

 

  <select id="selectOne" parameterType="int" resultType="dept">

  select * from dept where deptno = #{deptno}

  </select>

 

  </mapper>

  

xml 자체에 sql 구문들을 정의해줘야한다.!!



model.Dept.java

package model;


public class Dept {


private int deptno;

private String dname;

private String dloc;

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 getDloc() {

return dloc;

}

public void setDloc(String dloc) {

this.dloc = dloc;

}

@Override

public String toString() {

return "Dept [deptno=" + deptno + ", dname=" + dname + ", dloc=" + dloc + "]";

}

}

(모델객체는 너무나쉽다..)

Test.java 만들어서 직접 db에 추가, 삭제, 변경, 목록 불러오기 해보세용


끝.


Comments