ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SPRING]DB연동(JDBC Util방식)
    SPRING 2021. 7. 31. 19:43

     

    VO클래스는 DTO클래스와 같이 데이터를 직렬화 시켜서 한꺼번에 받을 목적으로 사용되는 클래스이다.

    그러므로 항상 DB안의 테이블 구조를 파악하는 것이 우선이다.

     

    Spring과 데이버베이스를 연동시키기 위해서는 pom.xml에 등록해주어야 한다.

    pom.xml에 형상관리, 버전관리를 해주는 객체가 바로 Maven이다.

    xml 태그 방식으로 관리를 해주는데 이것은 Spring4 버전까지의 얘기이며,

    Spring5부터는 Gradle로 JSON방식으로 관리를 한다.

     

    연결하려는 DB에 맞춰서 pom.xml에 등록한다.

    여기서는 mariaDB를 사용하였다.

    <!-- DB 연동 -->
    		<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
    		<dependency>
    		    <groupId>org.mariadb.jdbc</groupId>
    		    <artifactId>mariadb-java-client</artifactId>
    		    <version>2.3.0</version>
    		</dependency>
    		
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>

    그럼 Maven 밑에 이렇게 라이브러리가 추가된 것을 확인할 수 있다.

    tx는 트렌젝션으로 Spring에서 DB트렌젝션까지 관리하겠다는 의미이다.

     

    DB에서 실질적인 SQL작업을 하는 DAO클래스에는 @Repository 어노테이션을 주어 자동 객체생성을 하도록 한다.

    DB관련 클래스는 @Component보다 @Repository를 사용한다.

     

     

     

    서비스 로직을 수행하는 Service클래스는 인테페이스를 상속받아 생성하고 @Service 어노테이션을 주어 자동 객체생성을 하도록 한다.

    그리고 DAO클래스를 type으로 의존성 주입을 받고 있다.

    아까 DAO클래스 역시 @Repository 어노테이션으로 자동 객체 생성을 해 두었으므로 가능하다.

     

    <?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:p="http://www.springframework.org/schema/p"
    	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.2.xsd">
    
    <context:component-scan base-package="com.springbook.biz"></context:component-scan>
    
    
    </beans>

    이 어노테이션들을 통해 자동 객체 생성을 하기 위해서는 xml 파일에 설정을 해 두어야 한다.

    base-package 속성을 통해 com.springbook.biz로 시작하는 패키지 안의 모든 클래스를 확인하여 

    어노테이션을 통해 자동 객체 생성과 객체 주입을 실행한다.

     

    //메인 클래스
    package com.springbook.biz.board;
    
    import java.util.List;
    
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.GenericXmlApplicationContext;
    
    public class BoardServiceClient {
    
    	public static void main(String[] args) {
    		//"applicationContext"라는 spring 컨테이너에 접근하기 위한 객체 생성
    		AbstractApplicationContext container=
    				new GenericXmlApplicationContext("applicationContext.xml");
    		//컨테이너에서 "boardService"라는 객체를 얻어온다(getBean).
    		BoardService boardService = (BoardService) container.getBean("boardService");
    		
    		BoardVO vo = new BoardVO();
    		vo.setTitle("임시제목");
    		vo.setWriter("홍길동");
    		vo.setContent("임시 내용....");
    		boardService.insertBoard(vo);
    		
    		List<BoardVO> boardList=boardService.getBoardList(vo);
    		for(BoardVO board : boardList) {
    			System.out.println("---->"+board.toString());
    		}	
    		container.close();
    	}
    }

    메인 클래스를 실행시켜 오류 없이 작동하는 것을 확인하고 

    실제 DB에 잘 들어갔는지도 확인한다.

     

    객체 주입을 @Autowired가 아닌 setter를 통하여도 진행할 수 있다.

    setter를 통해 서비스 객체가 DAO객체를 주입받은 경우이다.

    다만 저런 경우에는 컨테이너에 객체 생성과 주입을 위한 등록을 해주어야 한다.

     

    <?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:p="http://www.springframework.org/schema/p"
    	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.2.xsd">
    
    <context:component-scan base-package="com.springbook.biz"></context:component-scan>
    
    <bean id="userService" class="com.springbook.biz.user.impl.UserServiceImpl">
    	<property name="userDAO" ref="userDAO"></property>
    </bean>
    
    <bean id="userDAO" class="com.springbook.biz.user.impl.UserDAO"></bean>
    
    </beans>

    서비스 클래스와 DAO 클래스를 각각 bean엘리먼트를 통해 객체 생성을 해준다.

    그리고 서비스 클래스의 경우는 property 엘리먼트를 통해 setter를 설정해준다.

    이때 ref속성을 통해 "userDAO"라는 id를 가진 객체를 참조한다.

     

     

Designed by Tistory.