◈ JDBC
connection 직접 처리
propareStatement 생성 처리
sql 작성
resultSet (select 문) 처리
close() 리소스해제
◈ Spring JDBC
Connection Pool
DataSource (인터페이스임) 로 커넥션 풀을 사용한다.
커넥션 풀은 여러 종류가 있다.
최근 유행하는 건 (Hikari cp 라이브러리)
(Spring jdbc + Connection )
🔌pom.xml 에 라이브러리 추가
--- Hikari cp
◈ Mybatis
sql 매핑 프레임워크
mybatis-spirng 이라는 라이브러리를 통해 쉽게 연동 작업 가능
🤤특징 1
(DAO 대신에 Mapper 사용)
(java 코드 대신 xml 사용)
🤤 특징2 :: 자동으로 처리된다.
자동으로 connection, close() 처리
preparedStatement 내부적으로 처리
#{prop} 속성 지정시 내부 자동 처리
리턴타입 지정 시 자동으로 객체 생성 ResultSet 처리
🔌 pom.xml 에 라이브러리 추가
--- spring-jdbc/spring-tx
--- mybatis/mybatis-spring
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!-- MyBatis-Spring -->
<dependency>
<groupId>org.mybatis.spring</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
🤤 SQLSessionFactory
SQL Session 을 만들어내는 존재
Connection 을 생성하거나 sql 을 전달, 결과 리턴 받기 등등
🔌 root-context.xml 에서 SQLSessionFactory 등록하기
--- SQLSessionFactory 등록하는 작업은 SqlSessionFactoryBean 을 이용한다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
🤤 Mapper Interface
🔌root-context.xml
Namespace > mybatis-spring
<mybatis:scan> 태그 추가해줘야한다.
<mybatis:scan base-package="com.example.mapper"/>
🤤 Mapper . xml
<mapper> namespace 속성은 interface 이름과 동일하게 맞춘다.
<select> id 속성은 메서드 이름과 동일하게 맞춘다.
<mapper namespace="com.example.mapper.UserMapper">
<!-- 사용자 ID로 사용자 조회 -->
<select id="selectUserById" parameterType="int" resultType="com.example.model.User">
SELECT id, name, email
FROM users
WHERE id = #{id}
</select>
🤤 Mybatis 는 SQL 처리를 JDBC PreparedStatement 를 이용해서 처리해 (내부적으로 처리됨)
? 치환자는 확인하기가 어렵다.
log4jdbc-log4j2 설정을 해주자.
🔌 pom.xml 에 log4jdbc-log4j2 라이브러리 추가하기
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
🔌 1) 로그 설정 파일 추가 log4jdbc-log4j2 .properties 파일 생성
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.slf4jSpyLogDelegator
🔌 2) JDBC 연결 정보 수정 root-context.xml 일부 수정
<!-- 데이터소스 설정 -->
<bean id="dataSource" class="net.sf.log4jdbc.sql.jdbcapi.DataSourceSpy">
<property name="realDataSource">
<bean class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
</property>
</bean>
🤤로그 레벨 설정 (많은 로그 출력 불편할때)
src/test/resources > log4j.xml 에서 수정해주면 된다.