mybatis19 [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. [mybatis] mybatis ๋ฐฐ์ด ์ ์ฅ(feat. foreach) ์์ ๊ฐ์ด insert๋ฅผ 1๊ฐ ์ด์ ํ๋ ๋ก์ง์ ๋ง๋ค๊ฒ ๋์๊ณ ๋ฏธ๋์ ๋ด๊ฐ ๋ณด๊ธฐ ์ํด ๊ธฐ๋กํ๋ค. ๐ํด๋ผ์ด์ธํธ์์ ๋ฐฐ์ด๋ก ๊ฐ์ ๋ฐ์์ DB์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ค.์ฐธ๊ณ ๋ก mysql๊ณผ Oracle์ ๋ฌธ๋ฒ์ด ๋ค๋ฅด๋ค.Oracle์ ์์ง ์ํด๋ด์ ๊ทธ๊ฑด ๋์ค์ ์์๋ณด๊ฒ ๋ค.Controller@RequestParam(value = "๋ณ์๋ช []") String[] avengers ์ด๋ฐ์์ผ๋ก ๋ฐ์@PostMapping("")public ResponseEntity createArray(@RequestParam(value = "avengers[]") String[] avengers) throws Exception{Service.insertAvengers(avengers);์๋ต...Servicepublic void ins.. IT/development 2022. 11. 21. [mybatis] mybatis ๋์ ์ฟผ๋ฆฌ(feat. <where></where>) mybatis Dynamic SQL ๐๊ณ์ ์ค์ ํ๋ ๋์ ์ฟผ๋ฆฌ์ด๋ค.์ค๋ ๋๋ ์ด๊ฑธ ์ดํด ํ์ง๋ง ๋ฏธ๋์ ๋ ๋ ๊น๋จน์ ์ ์์ผ๋ ์ฌ๊ธฐ์ ๋ฉ๋ชจํด ๋๋ค.๋์ WHEREํ์ ํ ์ด๋ธ์์ ํ์์ด๋ฆ๊ณผ ์ด๋ฉ์ผ์ ์กด์ฌ์ ๋ฐ๋ผ ๋์ ์ผ๋ก WHERE์ ๋ถ์ฌ์ ๊ฒ์ํ๋ ์์์ด๋ค.๊ธฐ์กด์๋ mapper xml์์ ์๋์ฒ๋ผ ์์ฑํ์๋ค. ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๋ ๋ฐ๋์ ๋จ์ ํ ์คํธ๋ฅผ ์ฌ๋ฌ๋ฒ ํด๋ด์ผ ํ๋ค๋ ๊ฑธ ๋ ๊นจ๋ฌ์๋ค.(๊ทธ๊ฑธ ์ด์ ์์๋? ๐ฅ) SELECT * FROM member WHERE member_name = #{memberName} WHERE email = #{email} ์ญ์ ๊ฐ๋ฐํ๋ฉด์ JUnit์ผ๋ก ๋จ์ ํ ์คํธ๋ฅผ ๊ณ์.. IT/development 2022. 11. 20. [spring boot/mybatis] ์ฟผ๋ฆฌ ๋ก๊ทธ ์ ๋ ฌ ๋ฐ ๊ธฐํ(feat. log4jdbc) ๋ชฉ์ฐจ mybatis log4j ์ฟผ๋ฆฌ ๋ก๊ทธ ์ ๋ ฌ ๋ฐ ๊ธฐํ ๐ mybatis์ log4j๋ฅผ ์ฒ์ ์ฌ์ฉํ ๋๋ ์๋์ฒ๋ผ ์ฟผ๋ฆฌ๊ฐ ์ผ๋ ฌ๋ก ๋์ค๊ณ parameter๊ฐ์ด "?"๋ก ํ์๋๋ค. ์งง์ ์ฟผ๋ฆฌ๋ฉด ์๊ด ์์ง๋ง ๊ธด ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ์๋ Parameters๋ก ๋์จ ๊ฐ์ ?์ ๋ณต๋ถ์ ํด์ ์ฟผ๋ฆฌ๋ฅผ ์คํํด ๋ด์ผ ๋๋ค. ์๊ฐ๋ ์๊ฐ์ด๊ณ ๊ฐ๋ ์ฑ๋ ์์ข์์ ๊ฐ๋ฐ์์๋ ์ฌ๊ฐ ๋ถํธํ๊ฒ ์๋๋ค. ๊ทธ๋์ log4jdbc๋ฅผ ์ด์ฉํด์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๊ธฐ ์ข๊ฒ ์ ๋ ฌ/์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋กํ๋ค. log4jdbc ์์กด์ฑ ์ถ๊ฐ ๐ค maven ๊ธฐ์ค pom.xml์ ์์กด์ฑ ์ถ๊ฐ org.bgee.log4jdbc-log4j2 log4jdbc-log4j2-jdbc4.1 1.16 gradle ๊ธฐ์ค build.gradle์ ์์กด์ฑ ์ถ๊ฐ // ์ฌ๊ธฐ์ ์ถ๊ฐ dependen.. IT/development 2022. 11. 19. [mybatis] map์ list๋ก ๋ฐ์์ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ๋ชฉ์ฐจ ๋ฏธ๋์ ๋ด๊ฐ ๋ณด๊ธฐ ์ํด ๊ธฐ๋กํจ ํ ์คํธ ํ ์ด๋ธ ๐ CREATE TABLE `tmp_board`( `board_seq` bigint auto_increment, `title` varchar (30), `contents` varchar (30), `name` varchar (30), `reg_date` timestamp, `update_date` timestamp, primary key(board_seq) ); mapper xml SELECT * FROM t_board ORDER BY reg_date DESC mapper interface ๐ package study.tmp11.mapper; import org.apache.ibatis.annotations.Mapper; import study.tmp11.. IT/development 2022. 11. 19. ์ด์ 1 2 ๋ค์