Spring JDBC

김정훈·2024년 7월 7일

Spring

목록 보기
6/24

JDBC와 커넥션 풀 설정

1. JDBC 연결

2. 커넥션 풀 설정

1) Tomcat JDBC를 사용한 설정

2) HikariCP를 사용한 설정

MyBatis와 스프링 연동

1. MyBatis 관련 라이브러리 추가

  • 1) spring-jdbc / spring-tx
  • 2) mybatis / mybatis-spring

의존성

implementation 'org.mybatis:mybatis:3.5.16'//mybatis
implementation 'org.mybatis:mybatis-spring:3.0.3' //mybatis spring

2. SQLSessionFactory

  • 1) mybatis-spring
    • SqlSessionFactoryBean 👉 setDataSource(...)
  • 2) @Bean
  • 3) @MapperScan

AppCtx

@Configuration
@EnableTransactionManagement //세팅자동화
@MapperScan("mappers") //메퍼스캔
public class AppCtx {

    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        DataSource ds = new DataSource();
        /* DB 연결 설정 S */
        ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        ds.setUrl("jdbc:oracle:thin:@localhost:1521:XE");
        ds.setUsername("SPRING");
        ds.setPassword("oracle");
        /* DB 연결 설정 E */

        /* 커넥션 풀 설정 S */
        ds.setTestWhileIdle(true); // 유휴 객체 유효성 체크
        ds.setInitialSize(2);
        ds.setMaxActive(10);
        ds.setTimeBetweenEvictionRunsMillis(10 * 1000); // 10초에 한번씩 연결 상태 체크
        ds.setMinEvictableIdleTimeMillis(1000 * 60); // 유휴 객체 생존 시간 1분
        /* 커넥션 풀 설정 E */

        return ds;
    }

	@Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource()); //설정값
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject(); //세션객체 생성
        return sqlSessionFactory;
    }
}

logback.xml

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d %5p %c{2} - %m%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="stdout" />
    </root>

    <logger name="org.springframework.jdbc" level="TRACE" />
    <logger name="mappers" level="DEBUG" />
</configuration>

MemberMapper

public interface MemberMapper {
    
    @Select("SELECT COUNT(*) FROM MEMBER")
    long getTotal();
}

Test

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppCtx.class)
public class Ex03 {

    @Autowired
    private MemberMapper memberMapper;

    @Test
    void test1(){
        long total = memberMapper.getTotal();
        System.out.println(total);
    }
}

3. Mybatis 활용

마이바티스활용

4. 스프링과의 연동 처리

1) Mapper 인터페이스

public interface MemberMapper {

    @Select("SELECT COUNT(*) FROM MEMBER")
    long getTotal();

    int register(Member member);
    Member get(String email);
    int exists(String email);
}

2) XML 매퍼와 함께 사용

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mappers.member.MemberMapper">
    <resultMap id="memberMap" type="member.entities.Member">
        <result column="SEQ" property="seq"/>
        <result column="EMAIL" property="email"/>
        <result column="PASSWORD" property="password"/>
        <result column="USER_NAME" property="userName"/>
        <result column="REG_DT" property="regDt"/>
    </resultMap>

    <insert id="register" >
        INSERT INTO MEMBER(SEQ, EMAIL, PASSWORD, USER_NAME, REG_DT)
        VALUES (SEQ_MEMBER.NEXTVAL, #{email}, #{password}, #{userName})
    </insert>
    <select id="get" resultMap="memberMap">
        SELECT SEQ, EMAIL, PASSWORD, USER_NAME, REG_DT, FROM MEMBER
        WHERE EMAIL = #{email}
    </select>
    <select id="exists" resultType="int">
        SELECT COUNT(*) FROM MEMBER WHERE EMAIL = #{email}
    </select>
</mapper>

4. slf4j 설정

profile
안녕하세요!

0개의 댓글