본문 바로가기
Web programming/Spring

JDBC와 MyBatis 차이, MyBatis 정의 및 사용

by Hyonixk 2020. 6. 18.
728x90

 

 

JDBC와 MyBatis 차이

JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는, 즉 자바에서 DB에 연결하기 위해 제공되는 API로서 SQL(Structured Query Language)에 접근한다.
JDBC 한 파일에서는 SQL 및 DB연결, Java언어가 모두 존재하기때문에 재사용성이 좋지 않다.


반면에 MyBatis는 SQL문이 어플리케이션 소스 코드로부터 분리된다. 또한 JDBC를 통해 수동으로 세팅한 파라미터와 결과 매핑을 대신해주어 JDBC로 처리하는 작업 보다 더 간편하게 작업할 수 있으며, 코드량이 줄어 생산성을 높여준다. 

(본 게시글의 하단 영역에 각 코드의 예문을 참고하라.)

 

 

 

 

 

 

 

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

 

 

 

 

 

MyBatis 다운로드(추가)

pom.xml > Dependencies 탭 > Mybatis 검색 > Add... > mybatis spring boot starter 선택, OK! 

(추가 할 Dependency를 검색 후 바로 선택할 경우엔 최신 버전으로 Add되며, > 아이콘을 누르면 버전을 선택할 수 있다.)

 

 

 

 

 

JDBC와 MyBatis 코드 차이

 

JDBC 

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
package com.address.web.dao.jdbc;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
 
import com.address.web.dao.NoticeDao;
import com.address.web.entity.Notice;
import com.address.web.entity.NoticeView;
 
//@Repository
public class JdbcNoticeDao implements NoticeDao {
 
   @Override
   public List<NoticeView> getList() throws ClassNotFoundException, SQLException {
      int page = 1;
      List<NoticeView> list = new ArrayList<>();
      int index = 0;
      
      String sql = "SELECT * FROM Notice ORDER BY regdate DESC LIMIT 10 OFFSET ?";    
      String url = "jdbc:mysql://dev.notead.com:0000/address?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";
 
      Class.forName("com.mysql.cj.jdbc.Driver");
      Connection con = DriverManager.getConnection(url, "address""123");         
      PreparedStatement st = con.prepareStatement(sql);
      st.setInt(1, (page-1)*10); 
      
      ResultSet rs = st.executeQuery();
            
      while (rs.next()) {
         NoticeView noticeView = new NoticeView();
         noticeView.setId(rs.getInt("ID"));
         noticeView.setTitle(rs.getString("TITLE"));
         noticeView.setWriterId(rs.getString("writerId"));
         noticeView.setRegdate(rs.getDate("REGDATE"));
         noticeView.setHit(rs.getInt("HIT"));
         noticeView.setFiles(rs.getString("FILES"));
         noticeView.setPub(rs.getBoolean("PUB"));
         
         list.add(noticeView);      
      }
 
      rs.close();
      st.close();
      con.close();
      
      return list;
   }
 
   @Override
   public Notice get(int id) {
      // TODO Auto-generated method stub
      return null;
   }
 
   @Override
   public int insert(Notice notice) {
      // TODO Auto-generated method stub
      return 0;
   }
 
   @Override
   public int update(Notice notice) {
      // TODO Auto-generated method stub
      return 0;
   }
 
   @Override
   public int delete(int id) {
      // TODO Auto-generated method stub
      return 0;
   }
 
}
cs
 
 

MyBatis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
package com.address.web.dao;
 
import java.sql.SQLException;
import java.util.List;
 
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
 
import com.address.web.entity.Notice;
import com.address.web.entity.NoticeView;
 
@Mapper     
public interface NoticeDao {
    
    @Select("SELECT * FROM Notice WHERE ${field} LIKE '%${query}%' ORDER BY regdate DESC LIMIT 10")
    List<NoticeView> getList(int page, String query, String field) throws ClassNotFoundException, SQLException;
    
    @Select("SELECT * FROM Notice WHERE id= #{id}")
    Notice get(int id);
    int insert(Notice notice);
    int update(Notice notice);
    int delete(int id);
}
cs

 

 

 

 

반응형

'Web programming > Spring' 카테고리의 다른 글

Tiles 라이브러리 설정  (1) 2020.06.19
Maven 사용을 위한 준비  (0) 2020.06.16
Spring Boot 시작 / Spring Tools 4로 프로젝트 생성  (0) 2020.06.16
Maven - Build Lifecycle  (0) 2020.06.16
Maven란? Apache Maven 설치  (0) 2020.06.16