spring 6강 Oracle과 mybatis 연동 실습(자바 코드에 SQL 명령어를 함께 작성하는 방식)
sample이나 spring01에서 프로젝트에서 파일 복사해올때 수정해야할 부분
pom.xml reference부터만 복사해오기
web.xml 한글 인코딩 처리
servelt-context 컴포넌트 스캔 패키지 spring02로 수정
mapper 패키지의 log4j.xml 애플리케이션 로거 컨트롤러경로에서 프로젝트 이름 spring02로 수정
root-context.xml 에서 datasource bean부분
id / password 수정
"jdbc:log4jdbc:oracle:thin@localhost:1521/xe" // :xe 가 낮은버전에선 될수도있음
home.jsp 한글깨짐 처리해주는 코드 추가
root-context.xml 에 mybatis mapper interface bean을 자동으로 검색하여 생성해주는 코드 추가
<mybatis-spring:xcan base-package="com.example.spring02.model.memo">
( 프로젝트 서버로 실행할때 프로젝트 하나씩만 등록해놓는게 좋다. )
memo 테이블 만들기
mybatis mapper interface - mybatis 에서 sql query를 작성하는 법
1) mapper xml 파일에 작성하는 경우
- MemoDAO.java ( 인터페이스 )
- MemoDAOImpl.java ( 구현클래스 )
- memoMApper.xml ( mapper )
2) mapper interface에 작성하는 경우
MemoDAO.java : SQL 포함하는 인터페이스
//많이 사용되는 방식은 아님
MemoDAO.java
1 2 3 4 | public interface MemoDAO { @Select("select * from memo order by idx desc") public List<MemoDTO> list(); | cs |
model은 클래스 상단에 @Repository 있어야 컴포넌트 스캔되어 빈으로 등록되지만
MemoDAO를 인터페이스로 만들고 구현클래스를 만들 필요 없이 추상메서드에 @Select 어노테이션을 붙여주면
root-context에서 설정한대로 model.memo패키지에 포함된 파일들을 빈으로 읽어들인다.
이렇게 추상메서드에 @Select를 붙여주는 것만으로도 DAO 인터페이스가 빈으로 등록되기때문에
ServiceImpl에 주입하여 사용이 가능하다.
( cf. 구현클래스가 있는 단순 인터페이스는 빈으로 등록할 필요가 없다. ServiceImple만 @Service붙여주면 됨 )
1 2 3 4 5 6 7 | <!-- mybatis mapper 코드(ex.@select)가 포함된 클래스를 찾아서 bean으로 등록하도록 설정해야함 --> <mybatis-spring:scan //mybatis 매퍼 코드 스캔 base-package="com.example.spring02.model.memo" /> </beans> | cs |
URL 공통적인 부분 묶어서 매핑하기
URL 매핑된 메서드들의 URL 경로가 공통인 부분이 있다면
컨트롤러 클래스 자체에 @RequestMapping으로 공통부분 매핑을 해준다.
MemoController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Controller //현재 클래스를 컨트롤러 bean으로 등록 @RequestMapping("/memo/*") //공통적인 매핑 public class MemoController { @Inject //의존관계 주입 MemoService memoService; //스프링이 만든 서비스 객체가 연결됨 @RequestMapping("list.do") //세부적인 매핑 /memo/list.do public ModelAndView list(ModelAndView mav) { List<MemoDTO> items=memoService.list(); //메모 리스트 리턴 mav.setViewName("memo/memo_list"); //출력 페이지의 이름 mav.addObject("list",items); //출력 페이지에 전달할 변수 return mav; //페이지로 이동 } | cs |
//Model보다 ModelAndView를 더 많이 쓴다.
객체 생성시에 view와 key와 value값을 주어 바로 리턴해주는 방식도 있고
위 코드처럼 매개 변수로 먼저 지정한 경우 (@RequestMapping으로 실행되는 메서드이기때문에 매개변수는 중요하지 않다.)
MAV변수에 setViewName 메서드와 addObject 메서드로 뷰와 오브젝트를 저장해주는 방식도 있다.
jsp
header.jsp
1 2 3 4 5 6 7 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <c:set var="path" value="${pageContext.request.contextPath}" /> <script src="http://code.jquery.com/jquery-3.3.1.js"></script> <link rel="stylesheet" href="${path}/include/style.css" /> | cs |
fmt : 날짜와 숫자의 출력 형식을 지원해주는 태그
memo_list.jsp
1 2 3 4 5 6 | <script> function memo_view(idx){ location.href="${path}/memo/view/"+idx; } // 파라미터가 아니라 고유 주소로 넘어간다. //@PathVariable로 받을 수 있다. //?를 사용하면 같은 주소로 이동하여 ?이하는 파라미터로 넘어가고 고유 주소 </script> | cs |
MemoController.java
1 2 3 4 5 6 7 8 | //http://localhost/spring02/memo/view/6 => @PathVariable @RequestMapping("view/{idx}") public ModelAndView view(@PathVariable int idx, ModelAndView mav) { mav.setViewName("memo/view"); //출력 페이지 지정 mav.addObject("dto",memoService.memo_view(idx)); //데이터 저장 return mav; //출력 페이지로 이동 } | cs |
'Spring > study' 카테고리의 다른 글
상품관리 프로젝트 코드 작성 -1 (0) | 2019.06.13 |
---|---|
spring 7강 상품테이블 만들기, File Upload 테스트 (0) | 2019.06.11 |
스프링 한글 처리를 위한 인코딩 필터 (0) | 2019.06.05 |
mybatis #{value}와 ${value} 차이 (0) | 2019.06.05 |
spring 5강 Oracle과 mybatis 연동 실습(회원 목록,등록,수정,삭제) (0) | 2019.06.05 |