괴발개발 개발하다
[ Spring ] 스프링 JDBC, MYBATIS 차이 본문
< JDBC와 MyBatis 차이 >
1. JDBC(Java Database Connectivity)
- JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는, 즉 자바에서 DB에 연결하기 위해 제공되는 API로서 SQL(Structured Query Language)에 접근한다.
- JDBC를 사용할 경우 코드가 복잡, 1개의 클래스에 반복되는 코드 존재, 하나의 파일에 자바 언어와 sql언어가 같이 있어서 재사용성이 안좋음.
1) JDBC 흐름 : JDBC 드라이버 로드 >> DB 연결 >> DB에 SQL문 작성 >> DB 연결 종료
2) JDBC 드라이버 종류 : DBMS 별로 알맞은 JDBC 드라이버가 필요하다.
ex) MYSQL : com.mysql.jdbc.Driver,
ORACLE : oracle.jdbc.driver.OracleDriver,
MSSQL : com.microsoft.sqlserver.jdbc.SQLServerDriver 등
3) JDBC URL : DBMS 별로 다르다.
- 구성 : jdbc:[DBMS]:[데이터베이스식별자]
2. MyBatis
: MyBatis는 JDBC의 단점들을 보완하여 데이터베이스를 연동하는 프로그래밍을 좀더 쉽게 할 수 있도록 도와주는 개발 프레임워크임.
- SQL문이 어플리케이션 소스 코드로부터 분리된다. 또한 JDBC를 통해 수동으로 세팅한 파라미터와 결과 매핑을 대신해주어 JDBC로 처리하는 작업 보다 더 간편하게 작업할 수 있으며, 코드량이 줄어 생산성을 높여줌.
- MyBatis는 자바와 데이터베이스를 연동한 프로그래밍을 위해 반드시 필요하진 않지만, 해당 라이브러리를 사용한다면 기존 JDBC 프로그래밍을 하는 것보다 좀 더 빠르고, 쉽고, 편안하게 프로그래밍을 할 수 있기 때문에 많이 사용됨.
- SQL문을 자바 코드에서 분리하여 xml 파일로 따로 관리한다. SPRING에서 JDBC를 사용할 수 있지만 , MYBATIS 를 사용 하는것이 보통이다.
특징
- JDBC에서 SQL한문장을 실행 시키기 위해서 개발자는 많은 코드를 작성을 해야하지만, MyBatis를 사용 할 경우 한 두줄의 코드로 SQL문을 실행 시킬 수 있음.
- 자동으로 Connection close() 기능
- 리턴 타입을 지정하는 경우 자동으로 객체 생성 및 ResultSet 처리 - SQL 명령어를 자바 코드에서 분리하여 XML 파일에 따로 관리함.
- 기존의 SQL을 그대로 활용할 수 있는 장점 있음.
- 진입장벽이 낮아서 JDBC의 대안으로 많이 사용함.
- 복잡하거나 다이나믹한 쿼리에 강하다. 코드의 간결성 및 유지보수성이 향상된다. 생산성이 향상된다.
- JDBC에서 사용해야 하는 CONNETION, STATEMENT등을 MYBATIS가 직접 관리해서 코드를 줄여준다.
3. JDBC와 MyBatis 코드 차이
1) JDBC
//@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;
}
출처: https://hyoni-k.tistory.com/70 [Record *:티스토리]
2) MyBatis
@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);
}
출처: https://hyoni-k.tistory.com/70 [Record *:티스토리]
< 참고 및 출처 >
https://yoon-developer.tistory.com/entry/SPRING-MYBATIS-JDBC-%EC%B0%A8%EC%9D%B4
https://hyoni-k.tistory.com/70
https://kimvampa.tistory.com/58?category=800652
'spring' 카테고리의 다른 글
[ Spring ] 스프링 MyBatis 사용 예시(Mapper 인터페이스, Mapper XML) (0) | 2022.07.09 |
---|---|
[ Spring ] 스프링 MyBatis 라이브러리 추가, SQLSessionFactory 설정 (0) | 2022.07.08 |
[ Spring ] 스프링 커넥션 풀 설정(HikariCP) (0) | 2022.07.08 |
[ Spring ] 스프링 프로젝트의 JDBC 연결 (0) | 2022.07.08 |
[ Spring ] 스프링 커넥션 풀(Connection pool) (0) | 2022.07.08 |