2021. 07. 09(금) TIL

Dylan·2021년 7월 9일
0
post-thumbnail

Spring

Spring JDBC

  • Java의 JDBC을 단순화시킨 데이터베이스 엑세스 기술이다.

  • 데이터베이스에 대한 CRUD 기능을 제공하는 JdbcTemplate 클래스를 활용한다.

    intupdate(String sql, Object... args)
    INSERT, UPDATE, DELETE sql을 실행한다.
    TqueryForObject(String sql, RowMapper rowmapper, Object... args)
    SELECT sql으 실행한다.
    반드시 한 건의 데이터가 조회되어야 한다.
    Listlist(String sql, Rowmapper rompper, Object... args)
    Select sql을 실행한다.
    여러 건의 데이터를 조회한다.

구현 절차

  1. pom.xml에 의존성 추가
    • spring-context, spring-jdbc, jdbc driver
  2. 어플리케이션 설정 파일 추가
    • src/main/resource/META-INF/config/application.properties
    • DB 연결 정보 설정
  3. Spring Bean Configuration 파일 추가
    • src/main/resource/META-INF/spring/context.xml
  4. Spring Bean Configuration 파일에 Connection Pool 빈으로 등록하기
    • 개발할 때는 DriverManagerDataSource를 스프링 빈으로 등록하기
    • DB 연결정보는 application.properties로부터 읽어온다.
      <context:property-placeholder location="설정파일 경로 및 파일명" />
  5. CRUD 기능을 포함하고 있는 JdbcTemplate를 스프링 빈으로 등록하기
    • CRUD작업시 필요한 Connection 획득을 위해서 Connection Pool빈을 참조해야 한다.
  6. 각각의 테이블에 대해서 데이터 엑세스 작업이 구현된 xxxDaoImpl을 스프링의 빈으로 등록
    • CRUD작업의 실행을 위해서 JdbcTemplate빈을 참조해야 한다.

  
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<context:component-scan base-package="com.sample.dao" />

	<!--
		Connection Pool객체를 스프링의 빈으로 등록하기
	-->

	<bean id="cp" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
		<property name="username" value="hr"/>
		<property name="password" value="zxcv1234" />
		
	</bean>

	<!--
		데이터베이스 엑세스 기능이 구현되어 있는 JdbcTemplate객체를 스프링의 빈으로 등록하기.
	-->
	<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="cp" />
	</bean>
</beans>

  
@Repository
public class UserDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void insertUser(User user) {
        String sql = "INSERT INTO sample_users "
                   + "(user_id, user_name, user_password, user_email, user_phone) "
                   + "VALUES "
                   + "(?, ?, ?, ?, ?) ";

        jdbcTemplate.update(sql, user.getId(),
                                 user.getName(),
                                 user.getPassword(),
                                 user.getEmail(),
                                 user.getPhone());
    }
}

Spring-Mybats

  • 스프링과 연동가능한 데이터처리 프레임워크

    • ibatis, mybatis, JPA, hibernate
  • 스프링 데이터 처리의 필수 절차

    1. DataSource 객체를 스프링의 빈으로 등록하기

      • DataSource 인터페이스의 구현체는 데이터베이스와 연결된 Connection을 제공한다.
      • DataSource 구현체 등록하기
        • DriverManagerDataSource
          • 개발단계에서만 사용가능한 DataSource 구현체
          <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          <property name="driverClassName" value="${driver}" />
          <property name="url" value="${dburl}" />
          <property name="username" value="${username}" />
          <property name="password" value="${password}" />
          </bean>
        • BasicDataSource
          • apache commons-dbcp.jar 라이브러리 이용
          • 스프링을 이용한 자바 응용프로그램에서 주로 사용
          <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource“ destroy-method="close“>
          <property name="driverClassName" value="${driver}" />
          <property name="url" value="${dburl}" />
          <property name="username" value="${username}" />
          <property name="password" value="${password}" />
          </bean>
        • JNDI를 이용한 DataSource 획득
          • 웹서버가 제공하는 DataSource 구현체 이용한다
          • 스프링을 이용한 웹 애플리케이션에서 주로 사용
          <jee:jndi-lookup id="dataSource" jndi-name="${jndiName}"resource-ref="true"/>
    2. mybatis와 스프링 연동하기

      • SqlSessionFactory를 스프링의 빈으로 등록하기
      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource"></property>
      <property name="mapperLocations" value="classpath:/META-INF/mybatis/mappers/*.xml"></property>
      </bean>
      • 매퍼 인터페이스를 스캔해서 매퍼 인터페이스 구현객체를 생성하고 스프링 빈으로 자동 등록하기
      <mybatis-spring:scan base-package="매퍼인터페이스 패키지명" factory-ref="sqlSessionFactory"/>

Spring-mybatis 연동하기

  1. mybatis.jar, mybatis-spring.jar 라이브러리 의존성을 pom.xml에 추가

    • mybatis.jar : SQL Mapper Framework
    • mybatis-spring.jar : mybatis와 spring framework의 연동을 지원
  2. 매퍼 인터페이스 정의하기

    • 테이블에 대한 CRUD 작업을 정의한 인터페이스다.
    • 작성 예)
    package com.sample.dao;
    
    public interface UserMapper {
        void insertUser(User user);
        void updateUser(User user);
        User getUserById(String userId);
    }  
    * DAO 클래스에 대한 인터페이스 버전이다 
  3. 매퍼 파일 정의하기

    • CRUD작업에 대한 SQL을 정의한 xml 파일이다.
    • 작성 예)
    users.xml
    
    <mappers namespace="com.sample.dao.UserMapper">
        <insert id="insertUser" parameterType="com.sample.vo.User">
            SQL 작성  
        </insert>
    
        <update id="updateUser" parameterType="com.sample.vo.User">
            SQL 작성  
        </update>
      
        <select id="getUserById" parameterType="string" resultType="com.sample.User">
            SQL 작성
        </select>
    </mappers>
    
  4. mybatis-config.xml 파일 정의

    • mybatis 환경설정 정보를 정의하는 파일이다.
  5. spring과 mybatis 연동시키기

    • SqlSessionFactory를 스프링 컨테이너의 빈으로 등록하기
      • SqlSEssionFactory를 SqlSession을 제공하는 객체다.
    • MapperScannerConfigurer를 스프링 컨테이너의 빈으로 등록하기
      • 매퍼 인터페이스에 대한 구현객체를 생성하고, 그 객체를 스프링 컨테이너에 포함시킨다.


0개의 댓글