Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

괴발개발 개발하다

[ Spring ] 스프링 JDBC, MYBATIS 차이 본문

spring

[ Spring ] 스프링 JDBC, MYBATIS 차이

괴발새발개발자 2022. 7. 8. 17:04

< 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

 

[SPRING] MYBATIS, JDBC 차이

JDBC(Java Database Connectivity) 개념 JDBC는 DB에 접근할수있도록 JAVA에서 제공해주는 API 이다. DB 종류에 상관없다. JDBC 흐름 1) JDBC 드라이버 로드 2) DB 연결 3) DB에 SQL문 작성 4) DB 연결 종료 JDBC..

yoon-developer.tistory.com

https://hyoni-k.tistory.com/70

 

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

JDBC와 MyBatis 차이 JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는, 즉 자바에서 DB에 연결하기 위해 제공되는 API로서 SQL(Structured Query Language)에 접근한다. JDB..

hyoni-k.tistory.com

https://kimvampa.tistory.com/58?category=800652 

 

[Spring][05-1]MyBatis 라이브러리 추가, SQLSessionFactory 설정

개인 공부 후 자료를 남기기 위한 목적이기에 내용 상에 오류가 있을 수 있습니다. git주소(Oracle DB) : https://github.com/sjinjin7/blog_study git주소(MySQL DB) : https://github.com/sjinjin7/..

kimvampa.tistory.com