날아라쩡글이의 블로그입니다.
myBatis-spring 실습 (xml환경 설정) 본문
중앙 HTA (2106기) story/spring java framwork story
myBatis-spring 실습 (xml환경 설정)
날아라쩡글이 2021. 12. 30. 16:06728x90
반응형
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으로 접속한다.
- 의존성 주입
- 1. spring web application개발에 필요한 라이브러리 의존성 추가
- <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.14</version>
</dependency>
- <dependency>
- 2. 데이터베이스 엑세스 트랜잭션 처리를 지원하는 라이브러리 의존성 추가
- <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.14</version>
</dependency>
- <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>
- <dependency>
- 4. 프로그램 실행로그 출력을 지원하는 의존성 추가
- <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
- <dependency>
- 5. 원래깔려있던것 --> 개발자 단위테스트를 지원하는 라이브러리 의존성 추가
- <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
- <dependency>
- 6. 데이터베이스와 연결된 Connection Pool을 제공하는 라이브러리 의존성 추가
- <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
- <dependency>
- 7. mybatis Core라이브러리 의존성 추가
- <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
- <dependency>
- 8. 스프링에서 mybatis를 쉽게 사용할 수 있도록 지원하는 라이브러리 의존성 추가
- <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency> - 스프링에 특화된 라이브러리
- <dependency>
- 9. 오라클 jdbc드라이버 라이브러리 의존성 추가
- <dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.4.0.0.1</version>
</dependency>
</dependencies>
- <dependency>
- 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의 구현객체가 완성되었다.
-
- @Component, @Controller, @RestController, @ControllerAdvice, @Repository, @Service, @Configuration등의 어노테이션이 부착된
- 지금까지 완성한 것은
- 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>
- <mvc:annotation-driven />
- @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. 데이터베이스와 연결된 Connnection을 제공하는 Connection Pool구현객체를 스프링 컨테이너에 등록시키기
지금까지의 전체적인 방법과 경로
- maven프로젝트의 생성
- pom.xml에 라이브러리 의존성 추가
- 소스 폴더 추가
- src/main/java
- src/main/resources
- com.sample.vo/com.sample.dao/com.sample.service/com.sample.controller패키지의 생성
- book정의
- bookDao mapper인 인터페이스 정의
- bookService클래스정의
- bookController클래스정의
- src/main/resource/mybatis/mapper/mybatis-config.xml추가
- mybatis환경설정파일
- src/main/resource/mybatis/mappers/books.xml 추가 및 mappingSQL구문정의
- /WEB-INF/spring/context-root.xml추가 및 커넥션 풀 mybatis설정, 서비스클래스 스캔설정추가
- /WEB-INF/spring/context-web.xml 추가. spring webmvc 설정, 컨트롤러 클래스 스캔 설정 추가
- /WEB-INF/web.xml 추가 및 루트 스프링 컨테이너, 자식 스프링 컨테이너 설정 추가
- BookController에 요청 핸들러 메소드 구현
- /WEB-INF/jsp/book/list.jsp 추가 및 데이터 출력
- 서버에 웹 애플리케이션 배포, 모듈에서 path를 "/"로 설정
- 서버 시작
반응형
'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글
RedirectAttributes,Model 의 차이점 (0) | 2022.01.02 |
---|---|
Project Object Model.xml설정, 로그설정 (0) | 2021.12.31 |
myBatis(SQL mapperFrameWork) (0) | 2021.12.30 |
어노테이션 설정하기 (0) | 2021.12.29 |
Spring 쿼리스트링 값, form값 읽어오기 (0) | 2021.12.29 |
Comments