상세 조회
데이터베이스(SQL&Docker) 활용
작업 순서: model -> dao -> mappers(xml) -> service -> Controller -> views(jsp)
.xml 공통 SQL 문 생성 INSERT_TIME, UPDATE_TIME ==> <include refid="common.selectCol"></include>
[Spring Boot] - [SpringBoot] 데이터베이스(SQL&Docker) 활용한 전체 조회 : like 기능 있음
[SpringBoot] 데이터베이스(SQL&Docker) 활용한 전체 조회 : like 기능 있음
전체 조회 : 부서명 like 기능 있음 데이터베이스(SQL&Docker) 활용 페이징 처리 : 시작 페이지부터 끝 페이지까지 반복하며 각 페이지 번호를 생성 페이지 조회 : 현재 페이지 페이지 0, 크기 3 Dept 클
soaked.tistory.com
CRUD Db 접속 함수들이(CRUD) 있는 클래스(mybatis mapper(=dao) 클래스)
더보기
package com.example.mybatisexam.dao;
import com.example.mybatisexam.model.common.PageReq;
import com.example.mybatisexam.model.vo.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Optional;
/**
* packageName : com.example.mybatisexam.dao
* fileName : DeptDao
* author : L.DH
* date : 2023-10-12
* description : CRUD Db 접속 함수들이(CRUD) 있는 클래스(mybatis mapper(=dao) 클래스)
* 1. 전체 조회 : like 기능
* 요약 :
* TODO : interface 함수만 정의
* @Mapper : 인터페이스 위에 달고, mybatis에서 사용할 인터페이스라는 것을 알림
* 서버 시작시 자동으로 객체가 생성됨
* @Param("속성명") 변수명 : sql 의 매개변수로 전달됨
*
* TODO : xml
* pageReq.size : 1 페이지당 개수
* pageReq.page : 현재 페이지 번호
* (oracle 12 버전 이상만 OFFSET 가능)
* OFFSET #{pageReq.page} * #{pageReq.size} ROWS FETCH FIRST #{pageReq.size} ROWS ONLY
* 예) (1 페이지당 개수)size = 10, 현재 페이지 번호(page) = 2
* 2 * 10 = 20 (db 건수 20개 건너뛰고)
* 10 10 (10 개를 화면에 출력하세요.)
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————
* 2023-10-12 L.DH 최초 생성
*/
@Mapper
public interface DeptDao {
/** 전체 조회 : 부서명 like 기능 있음 */
public List<Dept> findByDnameContaining(@Param("dname") String dname,
PageReq pageReq
);
/** 전체 테이블 개수 세기 함수 */
long countByDname(String dname);
/** 상세 조회(1건조회) */
Optional<Dept> findById(int dno);
}
더보기
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisexam.dao.DeptDao">
<select id="findByDnameContaining" parameterType="PageReq" resultType="Dept">
SELECT DNO
, DNAME
, LOC
<include refid="common.selectCol"></include>
FROM TB_DEPT
WHERE DNAME LIKE '%' || #{dname} || '%'
OFFSET #{pageReq.page} * #{pageReq.size} ROWS FETCH FIRST #{pageReq.size} ROWS ONLY
</select>
<select id="countByDname" parameterType="String" resultType="long">
SELECT COUNT(dno)
FROM TB_DEPT
WHERE DNAME LIKE '%' || #{dname} || '%'
</select>
<select id="findById" parameterType="int" resultType="Dept">
SELECT DNO
, DNAME
, LOC
<include refid="common.selectCol"></include>
FROM TB_DEPT
WHERE DNO = #{dno}
</select>
</mapper>
더보기
package com.example.mybatisexam.service.exam01;
import com.example.mybatisexam.dao.DeptDao;
import com.example.mybatisexam.model.common.PageReq;
import com.example.mybatisexam.model.common.PageRes;
import com.example.mybatisexam.model.vo.Dept;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
/**
* packageName : com.example.mybatisexam.service.exam01
* fileName : DeptService
* author : L.DH
* date : 2023-10-12
* description : CRUD 부서 서비스 클래스(업무 로직)
* 1. 전체 조회 : like 기능
* 2. 상세 조회
* 3. 저장 함수
* 4. 수정 함수
* 5. 삭제 함수
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————
* 2023-10-12 L.DH 최초 생성
*/
@Slf4j
@Service
public class DeptService {
@Autowired
DeptDao deptDao; // db crud 함수들이 있는 클래스
/**
* 전체 조회 dname like 검색
*/
public PageRes<Dept> findByDnameContaining(String dname,
PageReq pageReq) {
// TODO : 전체 조회 (like 됨)
List<Dept> list = deptDao.findByDnameContaining(dname, pageReq);
// TODO : 페이징 처리 로직
// 1) 총 테이블 개수 :
long totalCount = deptDao.countByDname(dname);
// TODO : 생성자 페이지 결과 객체(PageRes)
PageRes pageRes = new PageRes(
list, // 검색 결과(부서) 배열
pageReq.getPage(), // 현재 페이지 번호
totalCount, // 총 테이블 건수
pageReq.getSize() // 1 페이지당 개수
);
return pageRes;
}
/**
* 상세 조회
*/
public Optional<Dept> findById(int dno) {
// db 상세 조회 호출
Optional<Dept> optionalDept = deptDao.findById(dno);
return optionalDept;
}
} // end of class
'Spring Boot' 카테고리의 다른 글
[SpringBoot] 데이터베이스(SQL&Docker) 활용한 수정 함수(업데이트) (0) | 2023.10.13 |
---|---|
[SpringBoot] 데이터베이스(SQL&Docker) 활용한 저장 함수 (0) | 2023.10.13 |
[SpringBoot] 데이터베이스(SQL&Docker) 활용한 전체 조회 : like 기능 있음 (0) | 2023.10.13 |
[SpringBoot] CRUD (1) | 2023.10.10 |
[SpringBoot] 로그백, 로깅 라이브러리 logback , log4jdbc 설정 (0) | 2023.10.06 |