스프링부트 2.x PetClinic 웹프로젝트를 가지고, 기술정리를 해봅니다.
공통: 스프링부트 2.x, Hsql dB, 인텔리J 개발툴, Maven 빌드툴 사용.
기존 소스에 검색기능을 확장해 보았습니다. 단일필드 검색에서 -> 다중필드 검색으로
(아래 작업결과)
수정한 파일 3개(아래) : 오리지날 스프링 프레임웍 보다는 스프링 부트가 확실히 커스터마이징 하는 공수가 작게 들어 가네요^^
- 타임리프 템플릿 기반 검색파일 findOwners.html
<div class="control-group" id="lastNameGroup">
<!--기존내용 <label class="col-sm-2 control-label">Last name </label> -->
<!-- 김일국 ADD Start -->
<label class="col-sm-2 control-label">
<select class="select" name="searchType" id="searchType">
<option th:value="firstName" th:text="firstName" th:selected="(${searchType}=='firstName')"></option>
<option th:value="lastName" th:text="lastName" th:selected="(${searchType}=='lastName')"></option>
</select>
</label>
<!-- 김일국 ADD End -->
<div class="col-sm-10">
...
- 컨트롤러 파일: OwnerController.java
@GetMapping("/owners/find")
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
model.put("searchType", "");
return "owners/findOwners";
}
@GetMapping("/owners")
public String processFindForm(@RequestParam("searchType") String searchType, Owner owner, BindingResult result, Map<String, Object> model) {
//기존내용: public String processFindForm(Owner owner, BindingResult result, Map<String, Object> model) {
//Add 김일국 @PathVariable("searchType") String searchType
//@RequestParam(value = "searchType", required = false) String searchType,
// allow parameterless GET request for /owners to return all records
if (owner.getLastName() == null) {
owner.setLastName(""); // empty string signifies broadest possible search
}
//기존내용: Collection<Owner> results = this.owners.findByLastName(owner.getLastName());
// Add 김일국 Start find owners by last name Add first name
Collection<Owner> results = Collections.emptySet();
if (searchType.equals("firstName")) {
results = this.owners.findByFirstName(owner.getLastName());
}
if (searchType.equals("lastName")) {
results = this.owners.findByLastName(owner.getLastName());
}
// Add 김일국 End
if (results.isEmpty()) {
// no owners found
result.rejectValue("lastName", "notFound", "not found");
model.put("searchType", searchType);// ADD 김일국
return "owners/findOwners";
}
...
- 레포지토리파일: OwnerRepository.java
/**
* firstName 검색 메서드 Add 김일국
* @param lastName
* @return
*/
@Query("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE owner.firstName LIKE %:lastName%")
@Transactional(readOnly = true)
Collection<Owner> findByFirstName(@Param("lastName") String lastName);
Ps. 앞으로 작업할 내역
- Owner 모델에 age(나이)추가 후 스키마쿼리파일, 모델파일, 뷰파일 변경
- 지금까지 작업한 파일 20200108spring-petclinic.zip
4_PetClinic스프링부트 프로젝트 (0) | 2020.01.12 |
---|---|
3_PetClinic스프링부트 프로젝트 (0) | 2020.01.09 |
1_PetClinic스프링부트 프로젝트 (0) | 2020.01.07 |
1/2_전자정부표준프레임웍 활용 (0) | 2020.01.03 |
[책]스프링 부트 시작하기 리뷰_6 (0) | 2019.12.29 |
댓글 영역