์ ์ฒด ๊ธ67 SQL ๋์ ์ฟผ๋ฆฌ foreach๋ฌธ ๋ฌธ๋ฒ ์ ๋ฆฌ List data = new ArrayList(); data.put('data', arr); MainMapper.insertData(data); INSERT INTO ${session.tableName}.personDetail(P_ID, P_NAME, P_AGE) VALUES #{person.p_id}, #{person.p_name}, #{person.p_age} SQL foreach ๋ฌธ ํ๊ทธ ๊ธฐ๋ฅ collection ์ ๋ฌ๋ฐ์ ์ธ์ (List or Array) item ์ ๋ฌ๋ฐ์ ์ธ์ alias separator ๋ฐ๋ณต๋๋ ์ฌ์ด์ ์ถ๋ ฅํ ๋ฌธ์์ด index ๋ฐ๋ณต๋๋ ๊ตฌ๋ฌธ ๋ฒํธ (0๋ถํฐ ์์ฐจ ์ฆ๊ฐ) open ๊ตฌ๋ฌธ ์์๋ ๋ ์ฝ์ ํ ๋ฌธ์์ด close ๊ตฌ๋ฌธ ์ข ๋ฃ๋ ๋ ์ฝ์ ํ ๋ฌธ์์ด 2023. 9. 21. Spring ์ปค์คํ Annotation (@Target, @Retention) ์๋ก์ด ํ์ ๋ค์ด์์ ๋ฐฑ์๋ ์ฝ๋๋ฅผ ๋ณด๋ค๊ฐ ์ปค์คํ ๋ ์ด๋ ธํ ์ด์ ์ ๋ฐ๊ฒฌํ๋ค. ์ด๋ ธํ ์ด์ ๋ ์ปค์คํ ์ด ๋๋ค๋..! ์ ๊ธฐํด์ ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ๋ํด ์์๋ณด์๋ค. @์ปค์คํ ์ด๋ ธํ ์ด์ ๋ช ํํ ์๋ ์ด๋ ธํ ์ด์ ์๋ @Controller @Service ๋ฑ์ด ์๋๋ฐ, ์ด๋ค์ ์ฌ๋ฌ ๊ธฐ๋ฅ(์ด๋ ธํ ์ด์ ) ์ ํฌํจํ๊ณ ์๋ค. ์ด๋ ธํ ์ด์ ์ ๋ง์ ๊ธฐ๋ฅ ์ค ํ์ํ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ ์ ์๋๋ก ์ปค์คํ ํ ๊ฒ์ด ์ปค์คํ ์ด๋ ธํ ์ด์ ์ด๋ค. ์ปค์คํ ์ด๋ ธํ ์ด์ ์ @Target ๊ณผ @Retention ๋ฑ meta annotation ์ ์ฌ์ฉํ์ฌ ์ปค์คํ ํ ์ ์๋๋ฐ, ์ด๋ฌํ meta annotation ์ ๋ณดํต ๋ค๋ฅธ ์ด๋ ธํ ์ด์ ์์ฑ ์์๋ ํฌํจ๋๋ ์ด๋ ธํ ์ด์ ์ด๋ผ๊ณ ํ๋ค. ๋ด๊ฐ ๋ฐ๊ฒฌํ ์ปค์คํ ์ด๋ ธํ ์ด์ ์ @Target @Retention ๋ ๊ฐ์ง ์ด๋ ธ.. 2023. 9. 19. [Java] MyBatis xml ์์ฑ Mapper - namespace : ์ฌ๋ฌ ๊ฐ์ SQL๋ฌธ์ ํจํค์ง์ฒ๋ผ ๋ฌถ๋๋ค. SQL ํ๊ทธ - ํ๊ทธ๋ฅผ ์ ๊ณต - ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ sql๋ฌธ์ ๋ฏธ๋ฆฌ ์ ์ํด ๋ ์ ์๋ค. SELECT #{S_ID} AS L_ID, F.L_NAME, F.L_TEACHER, F.L_PLACE, F.L_TIME, F.L_MAX FROM ${DB_LESSON}.FIRST_TYPE F WHERE F.L_ID = '11111' AND F.L_NAME NOT IN ( SELECT L_NAME FROM ${DB_LESSON}.FIRST_TYPE WHERE L_ID = #{S_ID} ) SELECT COUNT(*) FROM ( ) A parameterType - parameterType ์ ์ง์ ๋ ๊ฐ์ด SQL๋ฌธ ์ ๋ ฅ ๊ฐ์ผ๋ก ๋ค์ด๊ฐ๋ค. resul.. 2023. 9. 18. [JAVA] DAO, DTO, VO ์ ๋ฆฌ ์ ์ฒด์ ์ธ ํ๋ฆ DB -> DAO -> SERVICE (-MAPPER) -> CONTROLLER -> WEB DAO (Data Access Object) - ์ค์ ๋ก DB ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํ ๋ฐ์ดํฐ DOMAIN (= Entity) Lesson.java @Data @Getter @Setter @NoArgsConstructor public class Lesson { private int c_idx; private String c_name; private int ag_idx; @Builder public Lesson(int c_idx, String c_name, int ag_idx) { this.c_idx = c_idx; this.c_name = c_name; this.ag_idx = ag_idx; } } L.. 2023. 9. 16. js ์์ ํ๊ธ ๊ธ์ ์ ์ธ๊ธฐ ํ์ผ์ ์ฒจ๋ถํ ๋ ํ์ผ๋ช ์ ๋ณด์ฌ์ฃผ๋ input ๋ฐ์ค ๊ธธ์ด ๋ณด๋ค ํ์ผ๋ช ์ด ๋ ๊ธธ ๊ฒฝ์ฐ, ํ์ผ๋ช ์ด ์ค๋ฒ๋์ด ์ผ๋ถ๋ง ์ถ๋ ฅ๋๋ ํ์์ด ๋ฐ์ํ๋ค. ํ์ผ๋ช ์ ๊ธ์ ์๋ฅผ ์ ํํ์ฌ ํ์ผ๋ช ์ด input ๋ฐ์ค ๋ด์์ ์๋ฆฌ์ง ์๊ฒ ์ถ๋ ฅํด์ผ ํ๋ค. ํ์ผ๋ช ์ ํ๊ธ์ด ์๋ ๊ฒฝ์ฐ, ํ๊ธ์ ๋ชจ์/์์ ๋จ์๋ก length ๊ฐ ๊ณ์ฐ๋๊ณ ์์๋ค. ์๋ฅผ ๋ค์ด, ํ์ผ๋ช ์ด "์moya" ๋ผ๊ณ ํ๋ค๋ฉด, ์ ๋ผ๋ ๊ธ์์ length ๋ 1๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ์ง๋ง 'ใ ' ๊ณผ 'ใ ' ๊ฐ ๊ฐ๊ฐ ๊ณ์ฐ๋์ด ๊ธธ์ด๊ฐ 2๋ก ์ถ๋ ฅ๋๋ค. ํ์ผ๋ช ๊ฐ์ด ๋ ๋ณ์๋ฅผ ์ ๋์ฝ๋ ์ ๊ทํ(normalize) ํด์ฃผ๋ ํ๊ธ length ๊ธธ์ด๊ฐ 1๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. // ํ์ผ๋ช ์ ๊ทํ var fileName = orgFileName.normalize('NFC'); ์ฌ์ฉ.. 2022. 10. 13. window.postMessage ๋ก ์๋์ฐ ์ปจํธ๋กค ํ๊ธฐ ์์ js ๋ก ์์ ํ A ์๋์ฐ์์ ์ด๋ค ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ฉด a ๋ค์ด์ผ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋๋ฐ, a ๋ค์ด์ผ๋ก๊ทธ ์์ ์๋ ํ์ธ ๋ฒํผ(okBtn)์ ํด๋ฆญํ๋ฉด B ์๋์ฐ๊ฐ ํ์ ์ผ๋ก ์ด๋ฆฐ๋ค. (์ด๋ B์๋์ฐ๋ ๋ฆฌ์กํธ๋ก ์์ ํ ๋ถ๋ถ) A ์๋์ฐ์ a ๋ค์ด์ผ๋ก๊ทธ์๋ ์ทจ์ ๋ฒํผ(closeBtn) ๋ ์๋๋ฐ, ์ทจ์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด B ์๋์ฐ๊ฐ ๋ซํ์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ B๊ฐ ์๋์ฐ ํ์ ์ด๋ผ ๋ค๋ฅธ ํญ์ ๊ทธ๋๋ก ๋จ์์์ด์ ํด๋น ๋ถ๋ถ์ ์ทจ์ ๋ฒํผ ํด๋ฆญ ์ ์๋์ผ๋ก ๋ซํ๊ฒ ์์ ํด์ผ ํ๋ค. ์ฒ์์ ๊ฒ์ํ๋ฉด์ ํฌ๋กฌ ๋ด์์๋ ๋๋ฉ์ธ์ด ๋ค๋ฅธ ์๋์ฐ๋ฅผ ๋ซ์ ์ ์๋ค๋ ๊ธ์ ๋ดค์๋๋ฐ, ๊ทธ ๋๋ฌธ์ ํผ๋์ด ์์ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ด ๊ณผ์ฐ ์๋๊ฑด์ง ๋ช ์๊ฐ์ ๊ณ ๋ฏผํ๋ค ใ ใ ์์ js ๊ธฐ๋ฐ ์๋์ฐ ๋ด์์ ๋ฆฌ์กํธ ์๋์ฐ๋ฅผ ์ปจํธ๋กค ํ ์ ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ .. ๋ฉ๋ถ์ด์.. 2022. 8. 17. window ๊ฐ์ฒด๋ ๋ฌด์์ธ๊ฐ? ์ฝ๋๋ฅผ ํ์ด๋ณด๋ค๊ฐ ์๋์ ๊ฐ์ด window ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ํจ์๋ฅผ ๋ง๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๋ค. ๋ณดํต์ ๋ณ์๋ก ํจ์ ์ ์ธ ๋ฐ ํธ์ถํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ window ๊ฐ์ฒด๋ก ํธ์ถํ๋ ๋ฐฉ์์ด๋ผ ์ ๊ธฐํด์ ํ๋ฒ ์์๋ณด๊ณ ์ ํ๋ค. window ๊ฐ์ฒด๋? ๋ธ๋ผ์ฐ์ ์ ์ฒด๋ฅผ ๋ด๋นํ๋ ๊ฐ์ฒด ๋ชจ๋ ๊ฐ์ฒด์ ์กฐ์(์ ์ญ ๊ฐ์ฒด) ์ต์์์ ์๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๋ํ ์ ์ญ ๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ ์ค์ ๋ก๋ window.ํจ์๋ช ์ด ๋์ง๋ง, window ๊ฐ ์๋ต๋๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค. "์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค." 2022. 5. 23. Mac์์ ๋ชจ๋ฐ์ผ ์น๋ทฐ ๋๋ฒ๊น ํ๊ธฐ (๊ฐ๋ฐ์ ๋๊ตฌ ์ฌ์ฉํ๊ธฐ) ๋ชจ๋ฐ์ผ์์ ์น ์ ๊ทผ ์ ๋ฐ์ํ๋ ์ด์ ๋๋ฌธ์ ๋ชจ๋ฐ์ผ์์ ์น ๋๋ฒ๊น ์ ํด์ผํ๋ค. ๊ทธ๋์ ์ฐพ์๋ณธ 3๊ฐ์ง adb, android emulator, chrome inspect ๋ชจ๋ฐ์ผ ์น๋ทฐ ๋๋ฒ๊น ๋ฐ ์ฝ์ ๋ก๊ทธ ํ์ธ ๋ฐฉ๋ฒ (๊ฐ๋ฐ์ ๋๊ตฌ ์ฌ์ฉ๋ฒ) 1. ์๋๋ก์ด๋ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํฌ๋กฌ ์น ์ ์ 2. chrome://inspect/#devices ์ ์ 3. ์๋ฎฌ๋ ์ดํฐ ๊ธฐ๊ธฐ๊ฐ ์ ์ํ ์น ์ฌ์ดํธ inspect 1. android studio ๋ค์ด๋ก๋ https://developer.android.com/studio?hl=ko Download Android Studio and SDK tools | Android Developers The official IDE for Android app developers. deve.. 2022. 5. 23. ์กฐ๊ฑด๋ฌธ ์ค์ด๊ธฐ(feat. ํด๋ฆฐ ์ฝ๋) ์ค๋ ํ์ฌ์์ ์ฝ๋ ๋ฆฌ๋ทฐ? ์ ์ง๋ณด์ ์ฝ๋ ๊ฐ์ ๋ฐฉ์ ํ์๋ฅผ ํ๋๋ฐ ์ ์ ์ด๋ผ์ ๋๋ ์ฐธ๊ดํ๋ค! ๊ทธ ์ค์ ๊ธฐ์ต์ ๋จ๋ ๋ถ๋ถ์ ์กฐ๊ฑด๋ฌธ์ ์ค์ด๋ ๋ฐฉ์์ ๊ดํ ๊ฒ์ด๋ค. ๊ฐ์ ํด์ผ ํ๋ ๋ถ๋ถ์ ๋งค๋ฒ ๊ฐ์ ๋ก์ง์ ํ์ง๋ง ์ผ์ด์ค ๋ณ๋ก ๊ฐ๋ง ๋ค๋ฅด๊ฒ ๋ฐ๋๋ ์ํ์ฌ์ ์ผ์ด์ค๋ณ๋ก switch-case ๋๋ if ๋ฌธ์ผ๋ก ์์ฑ๋์ด์ ๊ทธ ์์์ ๊ฐ๋ง ๋ฐ๊ฟ์ฃผ๊ณ ์์๋ค. ์ฝ๋๊ฐ ์ด๋ ๊ฒ ์์ฑ๋์ด ์์ผ๋ฉด ํน์ฌ๋ ๋ค๋ฅธ ์ผ์ด์ค๊ฐ ์ถ๊ฐ๋๋ ๊ฒฝ์ฐ ์กฐ๊ฑด๋ฌธ๋ ๊ณ์ ๋์ด๋๊ธฐ ๋๋ฌธ์ ํจ์จ๋ฉด์์ ์ข์ง๊ฐ ์๋ค. ํด๋น ๋ถ๋ถ์์ switch-case ๋ฌธ์ ์์ ๋ ๋ฐฉ์์ ๋ํด ์ด์ผ๊ธฐ ํ๋๋ฐ, ๋๋ ๊ทธ์ ๋น์ทํ ๊ณ ๋ฏผ์ ํด๋ณธ์ ์ ์์ง๋ง ํญ์ ํด๊ฒฐ์ฑ ์ ์ฐพ์ง๋ ์๊ณ ๋๋ฌ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ๊ทธ ๋ง์ ๋ค์ด๋ ๋ฐ๋ก ๋ฑ ํด๊ฒฐ ๋ฐฉ์์ ์๊ธฐํ ์๊ฐ ์์๋ค ... ๊ฒฐ๋ก ์ ๊ฐ์ ๋ก.. 2022. 5. 20. ์ด์ 1 2 3 4 ยทยทยท 8 ๋ค์