[JPA/Hibernate] persistence.xml ์ค์ ๋ฐฉ๋ฒ [JPA/Hibernate] persistence.xml ์ค์ ๋ฐฉ๋ฒ JPA 2.1 hibernate-entitymanager 4.3.10.Final JPA๋ persistence.xml์ ์ฌ์ฉํด์ ํ์ํ ์ค์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ค. ํด๋์ค ํจ์ค์ META-INF/persistence.xml ์ ์์ฑํ๋ฉด ๋ณ๋์ ์ค์ ์์ด JPA๊ฐ ์ธ์ํ ์ ์๋ค. ํ ํ๋ฆฟ persistence.xml์ ๋ก ์์ํ๋ฉฐ xmlns์ ๋ค์ ์คํ์ด์ค, version์ ์ฌ์ฉํ JPA ๋ฒ์ ์ ์ง์ ํ๋ค. ์ name์ unit์ ๊ณ ์ ํ ์ด๋ฆ์ ์ค์ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๊ฒฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋น ํ๋์ persistence unit์ ๋ฑ๋กํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ JPA ํ์ค ์์ฑ๊ณผ ํ์ด๋ฒ๋ค์ดํธ ์์ฑ์ ์ค์ ํ๋ค. ํ์ ์์ฑ ์ผ๋ฐ์ ์ผ๋ก JPA๋ฅผ ์ฌ์ฉํ ๋ ์ค์ ํด.. 2020. 3. 19. SQL ์์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์ ์ ๊ณผ JPA SQL ์์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์ ์ ๊ณผ JPA ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด SQL์ ์ฌ์ฉํด์ผ ํ๋ฉฐ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ JDBC API๋ฅผ ์ฌ์ฉํด์ SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฌํ ์ ์๋ค. JPA๋ฅผ ์ฌ์ฉํ์ ๋์ ์ด์ ์ด ๋ฌด์์ธ์ง, SQL์ ์ง์ ๋ค๋ฃฐ ๋์ ๋ฌธ์ ์ ์ ๋ฌด์์ธ์ง ์์๋ณด๊ธฐ ์ํด ์๋ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด์ ํ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด๋ณด์. ํ์ ํ ์ด๋ธ์ ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ค๊ณ ๊ฐ์ ํ๊ณ CRUD(๋ฑ๋ก, ์กฐํ, ์์ , ์ญ์ ) ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด๋ณด์. JDBC ํ์ ๊ด๋ฆฌ ์ดํ๋ฆฌ์ผ์ด์ Member(ํ์) ๊ฐ์ฒด ์๋ฐ์์ ์ฌ์ฉํ Member(ํ์) ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. public class Member { private int no; private String email; private String name.. 2020. 3. 18. try-with-resource ๋ฌธ๋ฒ์ ์ฌ์ฉํ JDBC ํ๋ก๊ทธ๋๋ฐ ์์ ์ฝ๋ try-with-resource ๋ฌธ๋ฒ์ ์ฌ์ฉํ JDBC ํ๋ก๊ทธ๋๋ฐ ์์ ์ฝ๋ try-with-resource๋ java 7 ์ด์๋ถํฐ ์ง์๋๋ฉฐ try ๋ธ๋ญ ์คํ์ด ์๋ฃ๋๋ฉด ()์์ ๋ฆฌ์์ค์ ์์์ ํด์ ํ๋ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ํธ์ถํด์ค๋ค. String url = "jdbc:mysql://localhost:3306/myschema"; // ์์น ์ ๋ณด String username = "user"; // ์ธ์ฆ ์ ๋ณด String password = "1234"; // ์ธ์ฆ ์ ๋ณด // try-with-resource try(Connection conn = DriverManager.getConnection(url, username, password)) { String sql = "SELECT id, username, p.. 2020. 3. 11. [JAVA ๋์์ธ ํจํด] static class์ Builder Pattern(๋น๋ ํจํด) [JAVA ๋์์ธ ํจํด] static class์ Builder Pattern(๋น๋ ํจํด) 1. static class๋? Static class๋ inner class(๋ด๋ถ ํด๋์ค)์ ํ ์ข ๋ฅ์ด๋ค. inner class ์ค์์ outer class(์ธ๋ถ ํด๋์ค)์ ๋ฉค๋ฒ๋ณ์ ์ ์ธ ์์น์ static ํค์๋๋ฅผ ๋ถ์ฌ ์ ์ธํ ํด๋์ค์ด๋ค. ์ฃผ๋ก outer class์ static ๋ฉ์๋์์ ์ฌ์ฉ๋๋ค. 2. static class์ ์ ์ธ ๋ฐฉ๋ฒ // Outer class public class Outer { // Static inner class public static class Inner { } } 3. static class์ ๋ฉค๋ฒ์ ์ ๊ทผ // Outer class public class Outer { // .. 2020. 3. 9. MyBatis ๋์ SQL - <choose>์ <set>์ ์ฌ์ฉํ์ฌ ๋์ SQL ๋ง๋ค๊ธฐ ๊ด๋ จ ๊ธ - [JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ - MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ - MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ - MyBatis์ Log4J ์ฐ๋ํ๊ธฐ ์ ๋ชฉ MyBatis์ ๋์ SQL ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํ๋์ SQL๋ฌธ์ผ๋ก ์ฌ๋ฌ ์ผ์ด์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์ ๋ ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ORDER BY ์ ์ ๋ฐ๊ฟ์ผ ํ๊ฑฐ๋ ๊ฒ์ ์กฐ๊ฑด์ ๋ฐ๋ผ WHERE ์ ์ ๋ณ๊ฒฝํด์ผ ํ ๊ฒฝ์ฐ ๋์ SQL ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด ์๋์ผ๋ก ๋ณ๊ฒฝ๋๋ SQL๋ฌธ์ ๋ง๋ค ์ ์๋ค. ํ - MyBatis ๋์ SQL ์ข ๋ฅ ๋์ SQL ์๋ฆฌ๋จผํธ ์ค๋ช SQL ์กฐ๊ฑด์ด ์ฐธ์ผ ๊ฒฝ์ฐ SQL๋ฌธ์ ๋ฐํํ๋ค. SQL SQL SQL ๊ฒ์ฌํ ์กฐ๊ฑด์ด ์ฌ๋ฌ๊ฐ์ผ ๊ฒฝ์ฐ ์ฌ์ฉ ์๋ฐ์ if-else๋ฌธ๊ณผ ์ ์ฌํ๋ค.. 2020. 2. 26. MyBatis์ Log4J ์ฐ๋ํ๊ธฐ ๊ด๋ จ๊ธ - [JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ - MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ - MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ MyBatis์ Log4J ์ฐ๋ํ๊ธฐ MyBatis์ log4j๋ฅผ ์ฐ๋ํ์ฌ MyBatis์ ๋ก๊ทธ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์. MyBatis์ ๋ก๊ทธ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด MyBatis์์ ์คํํ๋ SQL๋ฌธ, ํ๋ผ๋ฏธํฐ ๊ฐ, ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๋ค. ํนํ ๋์ SQL๋ฌธ์ด ์คํ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋์ง ํ์ธํ ์ ์์ด ๋๋ฒ๊น ์ ๋งค์ฐ ์ ์ฉํ๋ค. 1. MyBatis ์ค์ MyBatis ์ค์ ํ์ผ์ ๋ก๊ทธ ์ถ๋ ฅ ์ค์ ์ ์ถ๊ฐํ๋ค. ํ์์ ๋ฅผ ์ถ๊ฐํ๊ณ ์ ์ฌ์ฉํด์ ๋ก๊ทธ ์ถ๋ ฅ๊ธฐ๋ฅผ ์ง์ ํ๋ค. MyBatis๋ ์ฌ๊ธฐ.. 2020. 2. 25. MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ ๊ด๋ จ ๊ธ - [JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ - MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ MyBatis ํ๋ ์์ํฌ๊ฐ ์ฐธ์กฐํ๋ XML ํ์ผ์ MyBatis ์ค์ ํ์ผ๊ณผ SQL mapper ํ์ผ๋ก ๋๋์ด์ง๋ค. ๋ณธ ํฌ์คํ ์์๋ MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฐ๊ฒ์ด๋ค. MyBatis๋ ์์ฒด ์ปค๋ฅ์ ํ ๊ตฌ์ถ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ค์ ํด ๋๊ณ ๊ฐ๋ฐ, ํ ์คํธ, ์ด์์ ๋ฐ๋ผ ์ฌ์ฉํ DB ์ง์ SELECT ๊ฒฐ๊ณผ ์บ์ฑ VO(Value Object, ๊ฐ ๊ฐ์ฒด)์ alias ๋ถ์ฌ ๋ฑ์ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ๋ฐ๋ผ์ MyBatis ์ค์ ํ์ผ์๋ ํด๋น ๊ธฐ๋ฅ์ ์ํํ๋ ๋์ ํ๊ฒฝ์ ์ค์ ํ๋ค. ๋ค์์ MyBatis ์ค์ ํ์ผ์.. 2020. 2. 24. MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ ๊ด๋ จ ๊ธ - [JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ MyBatis ์ฌ์ฉ ๋ชฉ์ ์ค ํ๋๋ DAO๋ก๋ถํฐ SQL๋ฌธ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. ๋ถ๋ฆฌ๋ SQL๋ฌธ์ SQL mapper ํ์ผ์ ์์ฑํ๋ฉฐ DAO์์๋ SqlSession ๊ฐ์ฒด๊ฐ SQL mapper ํ์ผ์ ์ฐธ์กฐํ๊ฒ ๋๋ค. ๋ค์์ MyBatis SQL mapper ํ์ผ์ ์์ด๋ค. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 select PNO, PNAME, STA_DATE, END.. 2020. 2. 23. [JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ ๊ด๋ จ ๊ธ - MyBatis ์ค์ ํ์ผ - SQL Mapper ์์ฑ ๋ฐฉ๋ฒ - MyBatis ์ค์ ํ์ผ ์์ฑ ๋ฐฉ๋ฒ [JAVA/WEB] ์น ํ๋ก์ ํธ์ MyBatis ์ธํ ๋ฐ ์ ์ฉํ๊ธฐ ํ๊ฒฝ ๋ฐ ๋ฒ์ ์ ๋ณด IntelliJ IDEA 2019.3 Ultimate, JDK 11, Tomcat 9, MyBatis 3 MyBatis Persistence framework ์ค ํ๋์ธ MyBatis๋ฅผ ์ฌ์ฉํ๋ฉด JDBC ํ๋ก๊ทธ๋๋ฐ ์์ด DB์ ์ฐ๋ํ ์ ์๋ค. ๊ฐ๋ฐ์๊ฐ JDBC API๋ฅผ ์ง์ ํธ์ถํ์ง ์๊ณ MyBatis๊ฐ ๋์ ํธ์ถํ๋ ๋ฐฉ์์ด๋ค. MyBatis์ ํต์ฌ์ ๊ฐ๋ฐ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฝ๋๋ก ์์ค ์ฝ๋์ ๋ด์ฅ๋ผ์๋ SQL์ ๋ณ๋์ ํ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค. ๋ํ ๋จ์ํ๊ณ ๋ฐ๋ณต์ ์ธ JDBC ์ฝ๋๋ฅผ ์บก์ํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋.. 2020. 2. 23. [JAVA/์น] Annotation๊ณผ Reflections ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์๋ฐ ๋น ๊ด๋ฆฌํ๊ธฐ [JAVA] Annotation๊ณผ Reflections ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์๋ฐ ๋น ๊ด๋ฆฌํ๊ธฐ Java Annotation(์๋ฐ ์ด๋ ธํ ์ด์ ) ์ด๋ ธํ ์ด์ ์ ์ปดํ์ผ, ๋ฐฐํฌ, ์คํ ์ ์ฐธ์กฐํ ์ ์๋ ํน๋ณํ ์ฃผ์์ด๋ผ๊ณ ํ ์ ์๋ค. ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ํด๋์ค, ํ๋, ๋ฉ์๋์ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ๋ฑ๋กํ ์ ์๋ค. ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ์์ฑ์ด ํ์ํ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ํด๋ณด์. ์ด๋ ธํ ์ด์ ์ ์ Component.java 1 2 3 4 5 6 7 8 9 /*์ด๋ ธํ ์ด์ ์ ์ง ์ ์ฑ - RetentionPolicy.RUNTIME: * ํด๋์ค ํ์ผ์ ๊ธฐ๋ก๋จ * ์คํ ์์ ์ ์ง๋จ * ์คํ ์ค ํด๋์ค์ ๊ธฐ๋ก๋ ์ด๋ ธํ ์ด์ ๊ฐ ์ฐธ์กฐ ๊ฐ๋ฅ * */ @Retention(RetentionPolicy.RUNTIME.. 2020. 2. 21. JAVA ์น ํ๋ก์ ํธ์์ Properties ํ์ผ ํ์ฉํ๊ธฐ JAVA ์น ํ๋ก์ ํธ์์ Properties ํ์ผ ํ์ฉํ๊ธฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์ํ์๋ง์ ๊ฐ์ ธ์์ผํ๋ ์ ๋ณด์ ๊ฐ์ ๊ฒ๋ค์ ํ๋กํผํฐ ํ์ผ์ ์์ฑํด์ ๊ด๋ฆฌํ ์ ์๋ค. ์น ํ๋ก์ ํธ์์ ํ๋กํผํฐ ํ์ผ์ ์์ฑํด์ ๊บผ๋ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์. ํ๋กํผํฐ ํ์ผ ์์ฑํ๊ธฐ ํ๋กํผํฐ ํ์ผ์ ํ ๋ผ์ธ์ key=value ํ์์ผ๋ก ์์ฑํ๊ณ .properties ํ์ฅ์๋ฅผ ๋ถ์ฌ ์ ์ฅํ๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค. ํ๋กํผํฐ ํ์ผ ๋ก๋ฉ ๋ฐ ๋ด์ฉ ๊ฐ์ ธ์ค๊ธฐ(์ฝ๊ธฐ) java.util.Properties ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ํ๋กํผํฐ ํ์ผ์ ๋ค๋ฃฐ ์ ์๋ค. Properties๋ key=value ํ์์ ํ ์คํธ ํ์ผ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ ํด๋์ค์ด๋ค. ์๋์ ๊ฐ์ด ํ๋กํผํฐ ํ์ผ์ ๋ก๋ํ์ฌ ๋ด์ฉ์ ๊ฐ์ ธ์ฌ ์ ์๋ค. 1 2 3.. 2020. 2. 20. ๋ฆฌํ๋์ API๋ฅผ ์ด์ฉํ Front Controller ์๋ํ ๋ณธ ๋ด์ฉ์ ์คํ๋ง ํ๋ ์์ํฌ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋๋ฐ ๋์์ด ๋๋ค. ๋ฆฌํ๋์ API๋ฅผ ์ด์ฉํ Front Controller ์๋ํ ์๋์ ๊ฐ์ ์ ๊ท ํ์(ํ์)์ ๋ฑ๋กํ๋ ํผ์ด ์๋ค. ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ ๋ ฅํ๊ณ [๋ฑ๋ก] ๋ฒํผ์ ํด๋ฆญํด์ ์ ๊ท ํ์ ๋ฑ๋ก์ ์์ฒญํ๋ฉด ์์ ์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ์๊ฒ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ค. 1 2 3 4 5 6 7 8 9 10 11 12 // ๋งค๊ฐ๋ณ์๊ฐ์ ๊บผ๋ด์ Map์ ๋ด์ model.put("student", new Student() .setStudentNo(req.getParameter("student_no")) .setStudentName(req.getParameter("student_name")) .setAddress(req.getParameter("address")).. 2020. 2. 20. ์ด์ 1 2 3 4 5 ๋ค์