JPA에 공부를 하기에 앞서 MariaDB와 maven을 활용한 레거시한 버전으로 게시판을 만들어 볼것이다
DB는 위와 같이 세팅 해주었다.
로컬호스트로 MariaDB를 연결해주면 쉽게 연결할 수 있다
나는 VMware에 ubuntu를 설치하고 그 위에 mariaDB를 연동했다
MAPPER는 데이터베이스(오라클, MySQL, MariaDB)로부터 전달받은 결과 값을 자바 객체로 변환시키는데
자동 변환을 위해서는 반드시 DTO를 사용해야 한다
DTO는 Data Transfer Object로 사용하지 않아도 되지만 코드 효율을 높여준다
<?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">
<!-- JAVA와 연결할 Mapper 파일 설정 -->
<mapper namespace="kopo.poly.persistance.mapper.INoticeMapper">
<!-- 게시판 리스트 쿼리 -->
<select id="getNoticeList" resultType="NoticeDTO">
SELECT N.NOTICE_SEQ, N.TITLE, N.NOTICE_YN, N.READ_CNT, U.USER_NAME, N.USER_ID,
DATE_FORMAT(N.REG_DT, '%Y-%m-%d') AS REG_DT
FROM NOTICE N, USER_INFO U
WHERE N.USER_ID = U.USER_ID
ORDER BY N.NOTICE_YN, N.REG_DT DESC
</select>
<!-- 게시판 등록 쿼리 -->
<insert id="InsertNoticeInfo" parameterType="NoticeDTO">
INSERT INTO NOTICE
(
NOTICE_SEQ, TITLE, NOTICE_YN, CONTENTS, USER_ID, READ_CNT,
REG_ID, REG_DT, CHG_ID, CHG_DT
)
VALUES(
(SELECT NULLIF (MAX(A.NOTICE_SEQ),0)+1 FROM NOTICE A),
#{title}, #{notice_yn}, #{contents}, #{user_id}, 0, #{user_id}, SYSDATE(), #{user_id}, SYSDATE()
)
</insert>
<!-- 게시판 상세보기 쿼리 -->
<select id="getNoticeInfo" resultType="NoticeDTO">
SELECT N.NOTICE_SEQ, N.TITLE, N.NOTICE_YN, N.READ_CNT, U.USER_NAME, N.USER_ID,
CONTENTS, DATE_FORMAT(N.REG_DT, '%Y-%m-%d') AS REG_DT
FROM NOTICE N, USER_INFO U
WHERE N.USER_ID = U.USER_ID
AND N.NOTICE_SEQ = #{notice_seq}
</select>
<!-- 조회수 증가 쿼리 -->
<update id="updateNoticeReadCnt" parameterType="NoticeDTO">
UPDATE NOTICE SET
READ_CNT = READ_CNT + 1
WHERE
NOTICE_SEQ = #{notice_seq}
</update>
<!-- 게시판 수정 쿼리 -->
<update id="updateNoticeInfo" parameterType="NoticeDTO">
UPDATE NOTICE SET
TITLE = #{title},
NOTICE_YN = #{notice_yn},
CONTENTS = #{contents},
CHG_ID = #{user_id},
CHG_DT = SYSDATE()
WHERE
NOTICE_SEQ = #{notice_seq}
</update>
<!-- 게시판 삭제 쿼리 -->
<delete id="deleteNoticeInfo" parameterType="NoticeDTO">
DELETE FROM NOTICE
WHERE NOTICE_SEQ = #{notice_seq}
</delete>
</mapper>
다음은 MAPPER 쿼리 XML이다
JPA와 달리 JOIN과 같은 문장 사용이 가능하다
위에 있는 쿼리문과 연결해주는 인터페이스이다.
@Mapper를 사용하면 간단히 연결해준다
URL요청으로부터 온 정보를 Controller에서 DTO로 저장하고 저장된 DTO를 Service에서 사용할 수 있으며,
데이터베이스에 사용되는 SQL의 인자값으로 사용 가능하다
특히 DTO를 사용하면 Select문 실행 결과에 대해 자동으로 자바 객체로 생성할 때 상당히 편리하다
이때 자동으로 자바 객체로 변환하기 위해서 DTO 변수 이름은 테이블의 컬럼명과 동일하게 하는 것이 좋다
추가로 @Getter, @Setter 어노테이션 사용으로 바이트코드로 컴파일될 때, Getter, Setter를 자동으로 생성함
Select 쿼리의 결과가 한줄만 나요면 결과 타입을 일반 객체로 정의하고
Select 쿼리의 결과가 두줄 이상 나오면 결과타입을 List<DTO>로 선언한다
List<NoticeDTO> getNoticeList() throws Exception 을 예로 설명하자면
List<NoticeDTO> 는 SQL 실행결과에 대한 변수를 Service에 전달하는 역할이고
getNoticeList 는 Mapper 인터페이스의 함수 명은 Mapper XML과 연결되는 키 역할,
() -> 안에 매개변수가 있다면 변수 역할을한다
여기까지 DB -> MAPPER -> DTO 까지 완성했다
'프레임워크 > 스프링' 카테고리의 다른 글
[Spring Boot] MariaDB, maven을 활용한 게시판 만들기 (3) (0) | 2022.03.15 |
---|---|
[Spring Boot] MariaDB, maven을 활용한 게시판 만들기 (2) (0) | 2022.03.15 |
[Spring Boot] API VALIDATION (0) | 2022.03.07 |
[스프링]Bean Validation (0) | 2022.02.22 |
[스프링] BindingResult (0) | 2022.02.21 |
댓글