mybatis(동적쿼리, xml로 분리) 와 jdbctemplate(plain jdbc보다 중복코드를 제거해줘서 편리)
어느정도 프로그램 규모가 작으면 jdbctemplate이좋고,
그 이상이면 mybatis가 좋을 듯 싶다.
0. Jdbc?
Java Database Connectivity (JDBC) is an application programming interface (API) for the programming language Java, which defines how a client may access a database. It is a Java-based data access technology used for Java database connectivity. It is part of the Java Standard Edition platform, from Oracle Corporation. It provides methods to query and update data in a database, and is oriented toward relational databases. A JDBC-to-ODBC bridge enables connections to any ODBC-accessible data source in the Java virtual machine (JVM) host environment.
요약: 자바에서 db를 사용하기 위한 API
1. JdbcTemplate (Spring-jdbc 기반)
spring-framework-main\spring-jdbc\src\main\java\org\springframework\jdbc\core/JdbcTemplate.java
1-1 . 디자인패턴: 템플릿콜백패턴
템플릿 콜백 패턴과 JdbcTempalte - Junroot
1-2.필요의존성
// https://mvnrepository.com/artifact/org.springframework/spring-jdbc
implementation 'org.springframework:spring-jdbc:5.3.20'
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
implementation 'mysql:mysql-connector-java:5.1.49'
1-3 .예시코드
private final String INSERT_MESSAGE_SQL = "insert into sys_message (message) values(?) ";
@Override
public void insert(int roomId, BaseballGame game) {
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement(INSERT_MESSAGE_SQL, Statement.RETURN_GENERATED_KEYS);
ps.getGeneratedKeys();
ps.setString(1, String.valueOf(roomId));
return ps;
}, keyHolder);
keyHolder.getKey();
}
2. Mybatis
2-1 . 디자인패턴: 팩토리빌더패턴
2-1.5 . Scope(이해해야 concurreny 문제를 예방가능)
a. SqlSessionFactoryBuilder(xml or java) ->b. SqlSessionFactory ->c. SqlSession ->d. Mapper Instances
a. SqlSessionFactory만들면 임무 끝이니 method scope
b. 앱 실행시에 계속 존재. application scope. Singleton pattern or Static Singleton pattern.
c. 각각의 스레드가 SqlSession의 인스턴스를 소유 . 공유되지 않고, 스레드안전하지 못하니 request or method scope ex) http요청이 올때마다 SqlSession을 open하고 , http응답으로 돌려줄때 close해주자.
try (SqlSession session = sqlSessionFactory.openSession()) {
// do work
}
2-2.필요의존성
// https://mvnrepository.com/artifact/org.mybatis/mybatis
implementation 'org.mybatis:mybatis:3.5.10'
2-3.예시코드
참고자료
Spring JDBC Tutorial | Baeldung
Java Database Connectivity - Wikipedia