root-context.xml =>
<!-- Mapper 인터페이스 설정
개발자가 직접 DAO를 설정하지 않아도
자동으로 Mapper 인터페이스를 활용하는 객체를 생성하게 됨
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="kr.or.ddit.mapper" />
</bean>
~~SQL.xml=>
<mapper namespace="kr.or.ddit.mapper.BookMapper">
mapper 만듦 =>
package kr.or.ddit.mapper;
import java.util.List;
import java.util.Map;
import kr.or.ddit.vo.BookVO;
public interface BookMapper {
//도서 목록
// DAO) public List<BookVO> list(Map<String,Object> map) {
// Mapper Interface -> 도서 목록
// <select id="list" parameterType="hashMap" resultType="bookVO">
// mapper namespace == 풀 경로
// mapper id == 메소드명
public List<BookVO> list(Map<String,Object> map);
}
=> 자바 쪽 세팅값 갖다 쓰기 가능
<form:input path="text"> : 테스트 필드. id="test" name="test"
<form:checkbox> : 체크박스
<form:radiobutton> : 라디오 버튼
<form:select> : 셀렉트 박스
스프링 폼데이터
규칙 : type 및 name, id 속성은 path로 대신함 => type="number"같이 없는 거 써야 될 땐 그땐 일반 input<!-- <input type="text" name="bookId" id="bookId" /> --> <form:input path="bookId" /> <!-- @GetMapping("/createForm")에서 가져온 bookId가 있음 --> <p>제목 : <form:input path="title" required="required" /> </p>
: 사용자가 요청 시 전달하는 값을 오브젝트 형태로 매핑해주는 어노테이션 => 매개변수가 많아지는 것 방지
: setter로 값 설정
: 이것을 통해 모델의 속성(attribute)에 접근하거나 속성이 없는 경우 인스턴스화
: 모델의 속성이 (input 태그의) name과 필드의 이름과 일치하다면, Http 서블릿 request 파라미터의 값으로 => 데이터 바인딩
<form:select path="eDeptMap" => VO에 멤버변수로 정의 되어있어야 함
=>
public class EmployeeVO {
private String eEmpno;
.
.
private Map<String, String> eDeptMap;
: 스프링에서 제공하는 어노테이션 - @Valid와 기능이 같지만, 속성 제약 조건에 대한 그룹을 만들어 적용시킬 수 있음=>원하는 속성만 유효성 검사 하기 가능
: request 후, 서버 측에서 데이터를 바인딩할 때, 데이터가 유효한지 검사해야할 때 사용(누락, 최대 용량 초과 등)
: 그룹 유효성 검사나 Controller가 아닌 다른 계층에서 유효성 검증이 가능
: 입력값 검증을 할 도메인 클래스에 지정
ex)
// BindingResult : 입력값 검증 결과를 담고 있는 객체
@RequestMapping(value="/create", method=RequestMethod.POST)
public ModelAndView createPost(@Validated BookVO bookVO,
MultipartFile[] uploadFile,
ModelAndView mav,
BindingResult bindingResult) {
log.info("bookVO : " + bookVO);
log.info("uploadFile : " + uploadFile);
// 입력값 검증 결과(true : 오류 발생 / false : 오류 없음)
log.info("bindingResult.hasErrors() : " + bindingResult.hasErrors());