날아라쩡글이의 블로그입니다.

myBatis-spring 실습 (xml환경 설정) 본문

중앙 HTA (2106기) story/spring java framwork story

myBatis-spring 실습 (xml환경 설정)

날아라쩡글이 2021. 12. 30. 16:06
728x90
반응형

new ->project ->maven -> new maven project설치 
고를 수 있는 project로 All catagory를 클릭한다.
org.apache.maven.web클릭 후 완성을 클릭한다. 

pom.xml에서 UTF-8을 11로 변경하고 maven에서 update를 진행한다. 
properties-> targetRuntime->아파치를 9로 설정한다. 
실무에서는 java8,9를 사용할 것이다. 프로젝트는 유지보수가 중요하기 때문에 검증된 것을 사용할 것이고, 
톰캣도 낮아서 걱정할 필요는 없을 것이다. 

pom.xml설정방법
mvnrepository.com으로 접속한다.

  • 자바의 타입을 11로 변경한다. 
    의존성 주입
  • 1. spring web application개발에 필요한 라이브러리 의존성 추가 
    • <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.3.14</version>
      </dependency>
  • 2. 데이터베이스 엑세스 트랜잭션 처리를 지원하는 라이브러리 의존성 추가 
    • <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>5.3.14</version>
      </dependency>
  • 3. java Web, JSTL 라이브러리 의존성 추가 
    • <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      </dependency>

              <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
              </dependency>

              <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
              </dependency>
  • 4. 프로그램 실행로그 출력을 지원하는 의존성 추가 
    •  <dependency>
               <groupId>org.apache.logging.log4j</groupId>
               <artifactId>log4j-core</artifactId>
               <version>2.17.1</version>
            </dependency>
  • 5. 원래깔려있던것 --> 개발자 단위테스트를 지원하는 라이브러리 의존성 추가 
    • <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
          </dependency>
  • 6. 데이터베이스와 연결된 Connection Pool을 제공하는 라이브러리 의존성 추가 
    • <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-dbcp2</artifactId>
          <version>2.9.0</version>
      </dependency>
  • 7. mybatis Core라이브러리 의존성 추가 
    • <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.9</version>
      </dependency>
  • 8. 스프링에서 mybatis를 쉽게 사용할 수 있도록 지원하는 라이브러리 의존성 추가 
    • <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>2.0.6</version>
      </dependency>
    • 스프링에 특화된 라이브러리
  • 9. 오라클 jdbc드라이버 라이브러리 의존성 추가 
    •  <dependency>
           <groupId>com.oracle.database.jdbc</groupId>
           <artifactId>ojdbc8</artifactId>
           <version>21.4.0.0.1</version>
      </dependency>
        </dependencies>
  • mybatis의 package가 ibatis인 이유 
    • ibatis는 버젼 2가 마지막, mybatis는 3부터 나왔다.
    • 완전히 새로 설계되었다. 
    • 사용자가 헷깔릴 수 있기 때문에 사용이름을 mybatis으로 변경했지만, 패키지를 변경하기 어려워서 패키지 명은 ibatis이다. 
  • vo와 Dao인터페이스를 생성한다.
  • resource->mybatis ->mapperConfuration : 환경설정할 파일 생성
    • mybatis-config으로 이름을 설정한다. 
    •  <settings>
        <setting name="jdbcTypeForNull" value="NULL"/>
        <setting name="logImpl" value="LOG4J2"/>
       </settings>
    •  <setting name="jdbcTypeForNull" value="NULL"/>
      • NULL값이 허용된 컬럼에 NULL값을 저장할 때 JDBC타입을 명시해야한다. 
      • Jdbc에 값을 저장할 때는 타입이 무엇인지 확인한다. 
      • value의 값이 other로 설정되어 있기 때문이다. 
      • NULL로 설정을 하면 해당컬럼의 타입에 상관없이 NULL값을 저장할 수 있다. 
      • 원래 설정파일을 정의하지 않으면 입력하는 넘어오는 쿼리스트링에 #{jdbcType:VARCHR2}라고 명시를 해줘야한다. 
    •   <setting name="logImpl" value="LOG4J2"/>
      • mybatis가 실행하는 SQL구문 정보 및 실행되는 쿼리문, 파라미터 값, 조회결과를 로그로 출력할 때 사용하는 구현체를 의미한다. 
  • resource->mybatis.mapper-> mapper : BookDao인터페이스를 mapper할 파일을 생성
    • vo의 객체의 이름으로 파일이름을 작성한다.  
    • 인터페이스의 메소드와 mapping되는 SQL구문을 정의한다.
    • 나중에 폴더를 mybatis/oracle/mappers/user.xml
      mybatis/mysql/mappers/user.xml
      mybatis/db2/mappers/user.xml 처럼 데이터베이스가 바뀌면 환경설정 파일처럼 변경해줄 수 있다. 그래서 sql이 구분되는 것이 좋다. 
  • Context-root.xml파일 설정하기 
    • 1. 데이터베이스와 연결된 Connnection을 제공하는 Connection Pool구현객체를 스프링 컨테이너에 등록시키기 
      • Conntection Pool은 이름 dataSource class는 BDS으로 치면 자동완성으로 BasicDataSource가 된다.
      • 그리고 로그인을 위한 상세정보 4가지를 property의 객체로 등록 value로 등록 
      • <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
          <property name="url" value="jdbc:oracle:thin:@LAPTOP-MP9I3VRU:1521:xe"></property>
          <property name="username" value="hr"></property>
          <property name="password" value="zxcv1234"></property>
    • 2. mybatis의 핵심객체 (sqlSessionFactory)를 스프링 컨테이너에 등록시키기 
      • sqlSessionFactory는 sqlSession객체를 제공하는 객체이다. 
      • sqlSession은 CRUD를 실행하는 메소드와 mapper인터페이스와 mapper.xml파일을 이용해서 mapper인터페이스를 생성하는 메소드를 제공하는 객체다. 
      • dataSource도 연결시켜준다. 
      • configLocation은 mybatis의 환경설정파일의 경로를 지정한다. 
      • mapperLocation은 매핑된 sql구문이 정의된 xml파일의 경로를 지정한다. 
      • config- mybatis-config연결, mapper-mapper폴더의 파일경로 지정 *으로 all선택
      •  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
          <property name="dataSource" ref="dataSource"></property>
          <property name="configLocation" value="classpath:/mybatis/mybatis-config.xml"></property>
          <!-- 환경설정파일의 위치를 지정하는 부분 -->
          <property name="mapperLocations" value="classpath:/mybatis/mappers/*.xml"></property>
         </bean>
      • mapper파일의 위치와 환경설정을 알려준다. dataSource는 내부에서 bean으로 적용했으니까 ref로 id지정한 걸 적어주기 
    • 3.@Mapper어노테이션에 부착된 mapper인터페이스를 전부 스캔해서 mapper인스턴스를 (mapper인터페이스를 구현한 객체)를 생성하고 스프링 컨테이너에 등록시키기 
      • 2번을 작성하면 3번의 객체가 생긴다.
      • base-package는 mapper인터페이스가 정의된 패키지를 지정한다. DAO
      • factory-ref는 mybatis의 핵심객체의 빈아이디를 지정한다. 2번을 끌어온다. 
      •  <mybatis-spring:scan base-package="com.sample.dao" factory-ref="sqlSessionFactory"/>
      • DB Access작업완료 
      • 여기에서 DAO의 인터페이스 객체가 완료 된다. 
    • 4.context:annotaion 작성하기
      • @Autowired, @Resource, @PostConstructor, @PreDestroy 등의 어노테이션을 감지해서 적절한 작업을 수행하는 객체들을 스프링 컨테이너에 등록시킨다.
      • 조립을 수행하는 객체이다. 
      • 5번에서만든 Dao를 참조하는 Service와 DAO인터페이스를 구현한 객체를 연결해준다. 그리고 컨트롤러에서 사용할 수 있다. 
    • 5.context:component-scan으로 service이어주기 
      • @Component, @Controller, @RestController, @ControllerAdvice, @Repository, @Service, @Configuration등의 어노테이션이 부착된
          클래스를 지정된 패키지 및 그 하위패키지에서 전부 스캔해서 스프링 컨테이너에 등록시킨다.
      • Service의 구현객체가 완성되었다. 


    • 지금까지 완성한 것은 
    • service가 dao의 인터페이스 구현객체를 조립하는 것까지 완성이다. 
    • 이제 conext-web을 만들어서 spring어노테이션을 감지하고 적절한 처리를 수행하는 객체가 스프링컨테이너에 등록하게 만들고, 컨트롤러의 요청핸들러 메소드가 반환하는 뷰페이지 경로앞에 추가하는 부분, 
      context-component-scan으로 controller가 service를 바라보도록 만들면 완료 이다. 
      • <mvc:annotation-driven />
        <mvc:view-resolvers>
        <mvc:jsp prefix="/WEB-INF/jsp/" suffix=""/>
        </mvc:view-resolvers>
        <context:component-scan base-package="com.sample.controller"></context:component-scan>
    • @Controller
      @RequestMapping("/book")
      public class BookController {

      @Autowired
      BookService bookService;
      /*
       * 요청 방식 : GET
       * 요청 URL : /book/list.do
       * 이동할 뷰페이지 : /WEB-INF/jsp/book/list.jsp
       * 뷰페이지에 전달되는 데이터 : List<Book>
       */
      @GetMapping("/list.do")
      public String list(Model model) {
      List<Book> books = bookService.getAllBookList();
      model.addAttribute("books",books);
      return "book/list.jsp";
      }

      }

지금까지의 전체적인 방법과 경로 

  1. maven프로젝트의 생성
  2. pom.xml에 라이브러리 의존성 추가 
  3. 소스 폴더 추가 
    1. src/main/java
    2. src/main/resources
  4. com.sample.vo/com.sample.dao/com.sample.service/com.sample.controller패키지의 생성
  5. book정의 
  6. bookDao mapper인 인터페이스 정의 
  7. bookService클래스정의 
  8. bookController클래스정의 
  9. src/main/resource/mybatis/mapper/mybatis-config.xml추가 
    1. mybatis환경설정파일
  10. src/main/resource/mybatis/mappers/books.xml 추가 및 mappingSQL구문정의 
  11. /WEB-INF/spring/context-root.xml추가 및 커넥션 풀 mybatis설정, 서비스클래스 스캔설정추가 
  12.  /WEB-INF/spring/context-web.xml 추가. spring webmvc 설정, 컨트롤러 클래스 스캔 설정 추가
  13.  /WEB-INF/web.xml 추가 및 루트 스프링 컨테이너, 자식 스프링 컨테이너 설정 추가
  14. BookController에 요청 핸들러 메소드 구현
  15. /WEB-INF/jsp/book/list.jsp 추가 및 데이터 출력
  16. 서버에 웹 애플리케이션 배포, 모듈에서 path를 "/"로 설정
  17. 서버 시작
반응형
Comments