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 |