mybatis14 [mybatis] update ๋์ ์ฟผ๋ฆฌ(feat. <set></set>) /* ๊ฒ์๊ธ ์์ */ UPDATE BOARD_INFO TITLE = #{title} , CONTENT = #{content} , MOD_DATE = SYSDATE WHERE BOARD_SNO = #{boardSno} ํ ์คํธ IT/development 2023. 6. 24. [springBoot/thymeleaf] ajax ํ์ด์ง๋ค์ด์ sample(feat. study์ฉ) ๋ชฉ์ฐจ ddl(Oracle) /* ๊ฒ์ํ */ CREATE TABLE "BOARD_INFO" ("BOARD_NO" NUMBER NOT NULL ENABLE, "TITLE" VARCHAR2(50) NOT NULL ENABLE, "CONTENT" VARCHAR2(4000) NOT NULL ENABLE, "USER_ID" VARCHAR2(20) NOT NULL ENABLE, "USE_YN" CHAR(1) DEFAULT 'Y' NOT NULL ENABLE, "REG_DATE" DATE DEFAULT SYSDATE NOT NULL ENABLE, "MOD_DATE" DATE, CONSTRAINT "BOARD_INFO_PK" PRIMARY KEY ("BOARD_NO") ); COMMENT ON COLUMN BOARD_.. IT/development 2023. 6. 4. [mybatis] mybatis oracle merge into mapper.xml SELECT BOARD_SNO_SEQ.NEXTVAL AS boardSno FROM DUAL /* ๊ฒ์๊ธ ๋ฑ๋ก/์์ */ MERGE INTO BOARD_INFO A /* ๋น๊ต ์กฐ๊ฑด(boardSno๊ฐ ๊ฐ์์ง ๋น๊ต) */ USING DUAL ON(A.BOARD_SNO = #{boardSno}) WHEN MATCHED THEN /* update(boardSno๊ฐ ์ผ์นํ๋ฉด update) */ UPDATE TITLE = #{title} , CONTENT = #{content} , MOD_DATE = SYSDATE WHERE BOARD_SNO = #{boardSno} /* insert(boardSno๊ฐ ๋ถ์ผ์น ํ ๊ฒฝ์ฐ insert) */ WHEN NOT MATCHED THEN INSERT ( BO.. IT/development 2023. 6. 3. [mybatis] selectkey๊ฐ return(Oracle) SELECT BOARD_NO_SEQ.NEXTVAL FROM DUAL /* ๊ฒ์๊ธ ์์ฑ */ INSERT INTO BOARD ( BOARD_NO , TITLE , CONTENT , WRITER , CREATE_DATE ) VALUES ( #{boardNo} , #{title} , #{content} , #{writer} , SYSDATE ) /* ๊ฒ์๊ธ ๋ฑ๋ก(mapper interface) */ void insertBoard(BoardVo boardVo); /** * ๊ฒ์๊ธ ๋ฑ๋ก(service) * @param boardVo * @throws Exception */ public void regBoard(BoardVo boardVo) throws Exception{ boardMapper.insertBoard.. IT/development 2023. 5. 6. [mybatis] ๊ฒ์(Oracle) /* ๊ฒ์๊ธ ๋ชฉ๋ก ์กฐํ */ SELECT ROWNUM AS no , T1.boardNo , T1.title , T1.content , T1.writer , T1.createDate , T1.updateDate FROM (SELECT BOARD_NO AS boardNo , TITLE AS title , CONTENT AS content , WRITER AS writer , TO_CHAR(CREATE_DATE, 'YYYY-MM-DD') AS createDate , TO_CHAR(UPDATE_DATE, 'YYYY-MM-DD') AS updateDate FROM BOARD WHERE 1=1 AND USE_YN = 'Y' ORDER BY CREATE_DATE DESC )T1 WHERE 1=1 AND TITLE L.. IT/development 2023. 5. 6. [spring/mybatis] Rest API ๊ณ์ธต๊ตฌ์กฐ(1:N) ๊ฐ์ฒด ์กฐํ(feat .์ฌ์ด ์์ ) ๋ชฉ์ฐจ ์ญ์๋ ๋ฏธ๋์ ๋๋ฅผ ์ํด ๊ธฐ๋กํ๋ค. ๊ณ์ธต๊ตฌ์กฐ ์กฐํ๊ฐ ์ฒ์ ์ ํ๊ณ ์ต์ํด์ง๊ธฐ ์ ๊น์ง๋ ์ข ์ด๋ ต๋ค.(๋ฌผ๋ก ์ง๊ธ๋ ์ฌ์ด ๊ฑด ์๋๋ค.) ๋ชจ๋ ์ผ์ด ์ต์ํด์ง๋ฉด ์๋ฌด๊ฒ๋ ์๋ ๊ฒ ๊ทธ์ ๊น์ง๋ ์ด๋ ค์ด ๋ฒ์ด๋ค. Rest API ๊ณ์ธต๊ตฌ์กฐ ์กฐํ ๊ฐ๋จ ์์๋ค. ์ฌ์ฉ์(UserDto) ๊ฐ์ฒด๊ฐ ๋์ ๊ฐ์ฒด(BookDto)๋ฅผ list๋ก ๊ฐ์ง๊ณ ์๋ ๊ตฌ์กฐ๋ค. ํ์๊ณผ ๋์์ ๊ด๊ณ๋ฅผ 1:N์ผ๋ก ๋งคํํ๊ณ ํ์์ด ๋ถ๋ชจ๊ณ ์ฑ ์ด ์์์ด๋ค. ์๋์ฒ๋ผ ํ๋ช ์ ํ์์ด ์ฌ๋ฌ๊ฐ์ ์ฑ ์ ๋์ถํ ์ ์๋ ์กฐ๊ฑด ๊ทธ๋์ ํ์ ๊ฐ์ฒด๋ ๋์ ๊ฐ์ฒด๋ฅผ list๋ก ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ์๋ DB ํ ์ด๋ธ์ ๋ณด๋ฉด ํ์๋ฒํธ 1๋ฒ์ธ ์ฒ๋ฅ์ ์ ํ ๋ฅด๊ฐ ์ดํ๊ฐํธ 1๊ถ~5๊ถ๊น์ง ๊ฐ์ง๊ณ ์๋ค. API๋๊น ๋น์ฐํ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ ๊ฐ์ฒด์ธ dto์ db ์กฐ์์ ์ฌ์ฉํ ๊ฐ์ฒด์ธ vo.. IT/development 2022. 12. 25. [mybatis] mybatis multi update(๋ค์ค ์ ๋ฐ์ดํธ) ๋ชฉ์ฐจ ๋ค์ค ์ ๋ฐ์ดํธ๋ฅผ ํ๋ ๋ฐฉ๋ฒ ์ค mybatis์์ ์ง์ํ๋ multi update๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ๊ธฐ๋กํ๋ค. application.properteis #allowMultiQueries=true mybatis multi update ์ฌ์ฉํ๊ธฐ ์ํด์ ์ด๊ฑธ ๊ผญ ๋ฃ์ด์ผ ํ๋ค. spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3307/test?characterEncoding=UTF-8&allowMultiQueries=true spring.datasource.username=test spring.datasource.password=1234 mapper xml UPDATE tb_common_code SET code_id = #{item.codeId} ,code_.. IT/development 2022. 12. 16. [mybatis] mybatis ๋์ ์ฟผ๋ฆฌ ์์ฑ ์ "," ๊ด๋ จ ๋ชฉ์ฐจ ์ฌ์ํ ์ ์์ง๋ง ์ด์ ๋ฅผ ๋ชฐ๋ผ์ ์ฟผ๋ฆฌ ์์ฑ ์ ์๋ฌ ๋๋ฌธ์ ์๊ฐ์ ์ก์ ๋จน์ด์ ์ญ์๋ ๋ฏธ๋์ ๋ด๊ฐ ๋ณด๊ธฐ์ํด ๊ธฐ๋กํ๋ค. ์๋ฅผ ๋ค์ด ์์ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ์์ ๋ parameter๊ฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก SQL์ ์์ฑ ์ SELECT๋ฌธ ์ปฌ๋ผ ๋ค์ชฝ์ ","๋ฅผ ๋ฃ์ผ๋ฉด ๋ฌธ๋ฒ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋์ด์จ member_id๊ฐ์ด ์์ผ๋ฉด , mcm.etc๊ฐ ๋ถ๋ ๋ฐ ๋ง์ผ ์์ ์ฟผ๋ฆฌ๊ฐ ์๋์ ๊ฐ๋ค๋ฉด ๋์ ์ฟผ๋ฆฌ๋ฅผ ๋ถ์ด์ง ๋ชปํ๋ค. select m.*, mcm.tag_type, mcm.tag_name, mcm.etc FROM member m LEFT OUTER JOIN member_code_mapping ON m.member_seq = mcm.member_seq LIMIT #{start}, #{length} ์ด ๊ฒฝ์ฐ๋ ๋์ด์จ membe.. IT/development 2022. 11. 22. [mybatis] ์์ธ ์กฐํ ์ ๋ณต์๊ฐ ์ถ๊ฐ ์กฐํ(feat. vo & map) ๋ชฉ์ฐจ ์์ธ ์กฐํ ์ ๋ณต์๊ฐ ์ถ๊ฐ ์กฐํ ๐ ๊ธฐ์กด ์์ธ์กฐํ API์์ ์์ธ ์กฐํ ์ ํด์ํ๊ทธ์ ๊ฐ์ ๋ณต์๊ฐ์ ์ถ๊ฐ๋ก ์กฐํํด์ผ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ๋ค. ๊ฐ์ ธ์์ผ ๋๋ ํ๋๊ฐ์ 2๊ฐ๋ฐ์ ์๋๋ฏ๋ก ์ถ๊ฐ๋ก vo๋ฅผ ๋ง๋ค๊ณ ์ถ์ง ์์ ์๋์ฒ๋ผ ์์ ํ๋ค. Controller ๊ธฐ์กด์๋ Controller์์ return์ผ๋ก VO๋ก๋ง ๋ฐ์๋ ๊ฑธ map์ผ๋ก ๋ฐ๋๋ก ๋ณ๊ฒฝ, VO๊ฒฐ๊ณผ์ tag๋ฆฌ์คํธ ๊ฒฐ๊ณผ๋ฅผ map์ ๋ด์์ ์ต์ข ์ ์ผ๋ก return /** * ์์ธ * @param * @param * @return */ @Operation(summary = "๋ฉค๋ฒ ์์ธ ์กฐํ", description = "๋ฉค๋ฒ๋ฅผ ์์ธ ์กฐํํ๋ค.") @Parameters({@Parameter(name = "mem_no", description = "ํ์ ์ผ๋ จ.. IT/development 2022. 11. 22. [mybatis] mybatis ์ด์ค foreach insert(feat. ์ด์ค ๊ณ์ธต ๊ฐ์ฒด ์ ์ฅ) mybatis๋ฅผ ์ด์ฉํด์ ๊ณ์ธต ๊ตฌ์กฐ์ DTO ํน์ VO๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋กํ๋ค.๋์ DBMS: mysql, mariaDB์๋์ฒ๋ผ ๊ฐ์ฒด๊ฐ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.(์๊ฐ ์ ์ฝ๋ ์์ฃผ๋ก ์ต๋ํ ์ฌํํ๊ฒ ์ ๋ฆฌ)๋ง๋ธ ์บ๋ฆญํฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์คํ API๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ API ๊ฒฐ๊ณผ๋ฅผ list์ ๋ด์ ๋ฃจํ๋ฅผ ๋๋ ค ๊ฐ์ฒด์ ์ธํ ํ ๋ค DB์ ์ ์ฅํ๋ ๋ก์ง ์์(์์ ์ฝ๋ฉ ๐ )// ๋ฉ์ธ๊ฐ์ฒด@Getter@Setterpublic class TestVO { private Long mem_no; private String data_type; private String code; .. IT/development 2022. 11. 21. ์ด์ 1 2 ๋ค์