MapleStory Finger Point

🟤 JAVA/🟤 Spring

[Spring] Spring JDBC 와 Mybatis

HYEJU01 2024. 8. 24. 18:43

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 에서 수정해주면 된다.