담배팔이소년
JPA(ORM) vs. MyBatis(SQL Mapper) 본문
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 의존적, 패러다임의 불일치
- 객체와 SQL을 매핑하여 데이터를 객체화 하는 기술
- ORM(Object-Relational Mapping)
- 객체와 DB Table을 매핑하여 데이터를 객체화 하는 기술
- SQL문이 아닌 RDB의 데이터 자체와 매핑
- 객체와 DB를 각자 설계한다.
- +) DBMS에 종속적이지 않음, 객체 지향적 biz logic
-
- ) learning curve, SQL statement might be efficient for complex logic
- 객체와 DB Table을 매핑하여 데이터를 객체화 하는 기술
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
- Operates between Application & JDBC
- 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
- Problem of SQL-centered dev.
- 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
- migrate from SQL-centered dev. to Obejct-centered dev.
'JPA' 카테고리의 다른 글
Starting JPA (0) | 2023.04.13 |
---|