담배팔이소년

JPA(ORM) vs. MyBatis(SQL Mapper) 본문

JPA

JPA(ORM) vs. MyBatis(SQL Mapper)

bkkmw 2023. 4. 11. 20:14

JDBC

Java DataBase Connectivity

  • Java에서 DB를 연결하고, DB의 데이터를 가져오기 위해 사용하는 API
  • Java & DB
  • Java - JDBC API - JDBC Driver - DBMS
  • JDBC API는 JDK에 포함되어있음
    • java.sql , javax.sql package
  • Java application에서 DBMS의 종류에 상관없이 JDBC API를 사용해 작업
    • DBMS는 JDBC API를 구현한 드라이버를 제공
  • Class & Interface
    • DriverManager : loads JDBC Driver
    • Connection : Interface to connect DB
    • Statement / PreparedStatement / CallableStatement : tranmit SQL
      • Statement : no argument
      • PreparedStatement : takes arguments
      • CallableStatement : used for PL/SQL(Procedural language extionsion to SQL)
    • ResultSet : SQL statement의 result를 저장하는 객체
  • Operating Procedure
    • load JDBC Driver
    • Create Connecntion object
    • Create Statement object
    • Execute SQL statement
    • Take data from ResultSet object
      • checks if next data exists by ResultSet.next()
      • by column name or index(starts from 1)
    • Deconstruct ResultSet, Statement, Connection

SQL Mapper & ORM

  • JDBC is provided by Java for Data Persistence, but quite annoying
  • SQL Mapper & ORM is Persistence Framework that help developer using JDBC
  • SQL Mapper
    • 객체와 SQL을 매핑하여 데이터를 객체화 하는 기술
      • 객체와 테이블 간의 관계를 매핑하는 것이 아닌 SQL문을 직접 작성하고 쿼리 수행 결과를 어떠한 객체에 매핑할지 바인딩 하는 방법
    • +) 세부적인 SQL 변경시 편리함
      • ) DBMS에 종속적, SQL 의존적, 패러다임의 불일치
  • ORM(Object-Relational Mapping)
    • 객체와 DB Table을 매핑하여 데이터를 객체화 하는 기술
      • SQL문이 아닌 RDB의 데이터 자체와 매핑
      • 객체와 DB를 각자 설계한다.
    • +) DBMS에 종속적이지 않음, 객체 지향적 biz logic
      • ) learning curve, SQL statement might be efficient for complex logic

MyBatis(SQL Mapper)

  • MyBatis : Object mapping technique
  • Write Query & map result of query with object
  • can divide query to xml

Problem of SQL Mapper

  • SQL dependent
    • All the SQL statements change for modification of functionalities
  • 패러다임의 불일치
    • OOP provides various policies that can control complexity of system, like Abstraction, Polymorphism, Inheritence, Encapsulation, …
    • Relational-DB doesn;t have such concepts
    • We spend time & codes solving such problems
    • JPA provides inheritence, relationship, object graph traversing, compare

JPA(ORM)

  • Java Persistence API : Standard of Java ORM tech.
    • Collections of Interfaces
    • Hibernate, EclipseLink, DataNucleus, … implements JPA
  • Operating Procedure
    • Operates between Application & JDBC
      • dev. calls JPA → JPA calls SQL by JDBC API
      • dev. is not using JDBC API directly
    • Save : jpa.persist(DATA)
      • dev. transfer Object to JPA
      • JPA
        • analyze Object Entity
        • create INSERT SQL
        • transfer SQL to DB through JDBC API
    • Read : jpa.find(id)
      • dev. tranfer Primary Key to JPA
      • JPA
        • create SELECT SQL based on Entity Mapping
        • transfer SQL to DB through JDBC API
        • get result from DB
        • map result(ResultSet) to Object
  • Why JPA ?
    • migrate from SQL-centered dev. to Obejct-centered dev.
      • Problem of SQL-centered dev.
        • repeating boaring CRUD(codes)
        • Paradigm imcompetance between OOP and RDB
        • Difference between Object & RDB
    • Productivity
      • Using JPA is making data managing process simple
      • Simple CRUD
        • CREATE : jpa.persist(DATA)
        • READ : jpa.find(PK)
        • UPDATE : READ → MODIFY → CREATE
        • DELETE : jpa.remove(DATA)
      • Maintanace
        • All the SQL must be modified when field has been modified
        • JPA : All dev. have to do is to modifing field
          • SQL will be managed by JPA
      • Performance Optimization of JPA
        • buffered writing
        • caching while reading

'JPA' 카테고리의 다른 글

Starting JPA  (0) 2023.04.13
Comments