티스토리 뷰

언어/SPRING

[SPRING] MyBatis

Sime 2016. 11. 9. 16:33



마이바티스(mybatis) 구성



 

환경설정파일( 마이바티스 정반에 걸친 셋팅 )

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

- 디비에 어떻게 접속 할껀지

- 사용할 모델클래스들에 대한 별명


매핑 설정 파일

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


Session빌드 및 사용

- 실제 sql문 실행




1. pom.xml [ pom에 dependency 추가 - mysql, mybatis ]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dependencies>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
    </dependencies>
cs


2. xml 설정 파일 만들기






3.Mybatis홈페이지에서 configuration 가져와서 만든 xml에 추가해주기


mybatis 홈페이지 - http://www.mybatis.org/mybatis-3/ko/getting-started.html





기본 xml 화면





model 만들기!!

  db table에 맞는 모델 클래스를 생성해주자






mapper.xml 만들기!!


먼저 xml 파일을 만들고



mybatis홈페이지에서 구문을 가져오고




주석 참고

2~4번 줄에 별표된걸 꼭 넣어주자!!

mapper.xml에 는 주석과 같이 sql문을 등록해서 가져다 사용할 수 있다.






configuration 정보 주입!!


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
32
33
34
<?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>
    <!-- DB모델 설정 -->
    <typeAliases>
        <typeAlias type="model.Dept" alias="dept" /> <!--<package name="model"/>을 사용하면 모델 패키지 정보를 다 불러옴(클래스 맨 첫글자를 소문자인 형태로 저장)-->
    </typeAliases>
 
    <environments default="development">
        <environment id="development">
            <!-- transactionManager -->
            <!-- JDBC는 수동, MANAGED는 자동 -->
            <transactionManager type="JDBC" />
            <!-- dataSource -->
            <!-- POOLED 이 구현체는 매번 초기화 하는 것을 피하게해줌, 빠른 응답 요구하는 웹 애플리케이션에서 가장 흔히 사용 -->
            <!-- UNPOOLED 이 구현체는 매번 요청에 대해 커넥션을 열고 닫는 간단한 DataSource 이다. -->
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost/DB테이블"></property>
                <property name="username" value="root"></property>
                <property name="password" value="*****"></property>
            </dataSource>
        </environment>
    </environments>
 
    <!-- Mapper설정 -->
    <mappers>
        <mapper resource="dao/deptMapper.xml" />
    </mappers>
 
</configuration>
cs




Dao.java 만들기!!


// 기본적인 dao 구성




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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null)
                    is.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    public List<Dept> selectAll(){
        SqlSession session = sqlSessionFactory.openSession();
        try{
        return session.selectList("dao.deptMapper.selectAll");
        }finally {
            if(session != null)
                session.close();
        }
    }
    
    public Dept selectOne(int deptno) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            return session.selectOne("dao.deptMapper.selectOne", deptno);
        } finally {
            session.close();
        }
    }
    
    public void insertDept(Dept dept){
        SqlSession session = sqlSessionFactory.openSession();
        try{
            int result = session.insert("dao.deptMapper.insertDept", dept);
            if(result > 0)
                 session.commit();
            else
                session.rollback();
        }finally {
            session.close();
        }
    }
    
    public void updateDept(Dept dept){
        SqlSession session = sqlSessionFactory.openSession();
        try{
            int result = session.update("dao.deptMapper.updateDept", dept);
            if(result > 0)
                 session.commit();
            else
                session.rollback();
        }finally {
            session.close();
        }
    }
    
    public void deleteDept(int deptno){
        SqlSession session = sqlSessionFactory.openSession();
        try{
            int result = session.delete("dao.deptMapper.deleteDept", deptno);
            if(result > 0)
                 session.commit();
            else
                session.rollback();
        }finally {
            session.close();
        }
    }
 
}
cs




! 여기서 중요한 부분은 20번-21번(sqlSessionFactory 부분),24번중(close 부분), 38번줄(mapper에서 selectAll 쿼리 불러오는 부분
  58번-61번 부분(insert,delete,update시 commit()이 필요하다!!)



테스트 해보기!!

1
2
3
4
5
6
7
8
9
10
11
import dao.DeptDao;
import model.Dept;
 
public class Test {
    public static void main(String[] args) {
        DeptDao dao = new DeptDao();
        for(Dept d : dao.selectAll())
            System.out.println(d);
    }
}
 
cs




예제 파일 

Mybatis_Basic.zip



반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함