본문 바로가기
JAVA/MyBatis

mybatis 개념/순서

by 설총이 2018. 9. 4.

★ mybatis사용하기위한 준비 / 순서


blog.mybatis.org -> mybatis3 -> download -> mybatis-3.4.6.zip

lib파일 안에 ojdbc.jar파일과 mybatis-3.4.6.jar파일 추가!!

프로젝트 우클릭 -> configure build path -> libraries -> add jars -> 적용



* mybatis 


★★mybatis를 사용할때에는 DTO에 반드시 기본생성자가 하나 있어야한다.



- POJO(Plain Old Java Object) :: 구현(implements) 받지 않은 순수한 일반 클래스 객체


특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말로 사용되었다.

스프링 프레임워크는 POJO 방식의 프레임워크




- 퍼시스턴스 프레임워크 :: 클래스내에서 쓰던 SQL문들을 밖으로 다 꺼내서 모아두는 방식.

ex)prepareStatment("SELECT * from table where num =?");






1. 커넥션 연결할 xml파일 생성(이 xml파일은 반드시 mybatis-3-config.dtd)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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>
<properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mybatis/memberMapper.xml" />
    </mappers>
</configuration>
cs



resource :: 연결할 driver / url / username / password 값이 저장된 properties파일 생성


username과 password만 자기가 연결할 계정과 비밀번호를 입력하면 된다.

내 본인 pc에서 사용하는 localhost가아니면 변경.


1
2
3
4
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=scott
password=tiger
cs



pooled로 자동 커넥션 풀 생성.

기존 properties에 저장했으므로 el로 꺼낼 수 있다.

property에 연결할 이름에 value값으로 'el'로 꺼내 저장한다.



2. sql 쿼리문을 담아놓을 새로운 xml파일 생성해서, 

위의 mappers안에 resource로 새로운 xml파일 경로를 설정한다.

그 경로는 src 밑에서부터 시작한다. (이 xml파일은 반드시 mybatis-3-mapper.dtd)



★preparedStatement를 사용하기때문에 바인딩변수로 저장이 가능하다.

넘겨줄 값이 필요할때에는 #{변수명} 으로 넣는다.


1
2
3
4
5
6
7
8
9
10
11
12
13
<?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="member">
    <insert id ="addMem" parameterType="test.vo.MembersVo">
        insert into mem values(
            #{id},#{pwd},#{email},#{phone},#{regdate}
        )
    </insert>
    <select id ="getlist" resultType="test.vo.MembersVo">
        select * from mem
    </select>
</mapper>
cs



select는 타입을 resultType으로 getter/setter를 만든 DTO를 설정하고 (반환타입 ResultSet)

insert / update / delete 는 parameterType으로 DTO를 설정한다.(반환타입 Int)



member라는 이름으로 insert는 addMem , select는 getlist로 설정한 상태에서

사용할때에는 member.addMem / member.getlist로 사용하면된다.


resultType, parameterType에 저장할 클래스명을 적어주면

알아서 객체만들고 테이블의 컬럼이름과 변수명이 같은걸 자동으로 짝지어서 저장해준다.



3. 실행


1
2
3
4
5
6
7
8
9
String res = "config.xml";
    try {
    InputStream is = Resources.getResourceAsStream(res);
    // src에있는 config.xml파일에 inputstream 연결
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    // is에 있는 설정을 연결시켜서 그대로 읽어들여 정보를 담은
    // SqlSessionFactory 생성.
    
    SqlSession session = factory.openSession(); // 계정이 연결된 sqlSession 생성
cs


모든 구문에 공통영역. () 안에 사용할 xml파일을 변수로 설정하고 넣고나서 시작한다.




* select문을 실행하기위한 java class



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
String res = "config.xml";
     try {
         InputStream is = Resources.getResourceAsStream(res);
         //src에있는 config.xml파일에 inputstream 연결
         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//is에 있는 설정을 연결시켜서 그대로 읽어들여 정보를 담은 SqlSessionFactory 생성.
         SqlSession session = factory.openSession();
// 계정이 연결된 sqlSession 생성
         List<MembersVo> list = session.selectList("member.getlist"); // 
 
          for (MembersVo vo : list) {
             System.out.println(vo);
          }
 
          session.close();
   } catch (IOException ie) {
         System.out.println(ie.getMessage());
   }
}
cs



* insert문을 실행하기 위한 java class



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
String res = "config.xml";
String id = "자바";
String pwd = "3333";
String email = "two@naver.com";
String phone = "010-4444-5555";
Date regdate = new Date();
    try {
    InputStream is = Resources.getResourceAsStream(res);
    // src에있는 config.xml파일에 inputstream 연결
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    // is에 있는 설정을 연결시켜서 그대로 읽어들여 정보를 담은
    // SqlSessionFactory 생성.
    
    SqlSession session = factory.openSession(); // 계정이 연결된 sqlSession 생성
    MembersVo vo = new MembersVo(id, pwd, email, phone, regdate);
    int n = session.insert("member.addMem", vo);
        if (n > 0) {
        session.commit();
        System.out.println("insert 성공!");
    } else {
        session.rollback();
        System.out.println("insert 실패!");
    }
    session.close();
    } catch (IOException ie) {
    System.out.println(ie.getMessage());
}
}
cs




- SQLSession 메서드 


selectList() :: ex)select * from table ==> 여러개의 레코드를 가져올때

selectOne() :: ex) where절에 primary키로 레코드가 한줄 나올때 사용

insert() 

update()

delete()