JPA์์ ์ง์ํ๋ ์ฟผ๋ฆฌ ๋ฐฉ๋ฒ
JPQL
QueryDSL
๋ค์ดํฐ๋ธ SQL
JDBC API ์ง์ ์ฌ์ฉ
JdbcTemplate
...
Creiteria ๋ฑ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ๋ง์ง๋ง ๊ทธ๋ค ์ค ๋ช๊ฐ์ง๋ง ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
JPQL
SQL์ ์ถ์ํํ ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด์ ๋๋ค.
JPQL์ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
JPQL์ ๊ฒฐ๊ตญ ํ ์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ SQL๋ก ๋ฒ์ญ๋์ด ์ํ๋ฉ๋๋ค.
์ฌ์ฉ
Query query = em.createQuery("SELECT m FROM Member m");
List resultList = query.getResultList();
์ด๋ Member๋ ํ
์ด๋ธ์ ์ด๋ฆ์ด ์๋ ์ํฐํฐ์ ์ด๋ฆ์
๋๋ค.
๋ค์ดํฐ๋ธ SQL
JPQL์ ํ์ค SQL์ด ์ง์ํ๋ ๋๋ถ๋ถ์ ๋ฌธ๋ฒ๊ณผ SQLํจ์๋ฅผ ์ง์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ํน์ DB์ ๋ฐฉ์ธ๊ณผ ๊ฐ์ ์ข ์์ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ต๋๋ค.
- ํน์ DB๋ง ์ง์ํ๋ ํจ์, ๋ฌธ๋ฒ, SQL ์ฟผ๋ฆฌ ํํธ
- ์ธ๋ผ์ธ ๋ทฐ(from์ ์๋ธ์ฟผ๋ฆฌ), UNION, INTERSECT
- ์คํ ์ด๋ ํ๋ก์์
- ...
์ด๋ ๋ฏ ๋ค์ํ ์ด์ ๋ก JPQL์ ์ฌ์ฉํ ์ ์์ ๋,
JPA๋ Native SQL์ ํตํด SQL์ ์ง์ ์์ฑํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- SQL์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ํ ์ ์์ต๋๋ค.
- ๋ค์ดํฐ๋ธ SQL ์ฌ์ฉ ์ ์ํฐํฐ๋ฅผ ์กฐํํ๊ณ , JPA๊ฐ ์ง์ํ๋ ์์์ฑ ์ปจํ ์คํธ์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค
์ฌ์ฉ
String sql = "SELECT ID, AGE, NAME, TEAM_ID" +
" FROM MEMBER WHERE AGE > ?";
Query nativeQuery = em.createNativeQuery(sql, Member.class)
.setParameter(1, 20);
List<Member> resultList = nativeQuery.getResultList();
Data JPA์ Repository Interface์์ ์ ์ธํ๋ ๋ฐฉ๋ฒ
@Query(value = "select * from table_name where case_1=:case_1 and date='2017-04-04' ", nativeQuery=true)
List<TableName> findSomeCase(@Param("case_1") String case_1);
์ฃผ์
๋ค์ดํฐ๋ธ SQL์ ์ฌ์ฉํ๋ค๋ฉด ์ ์ ํ ์์ ์ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ํ๋ฌ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
JDBC API
JDBC API ๋ ์๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ ํ์ค ์ธํฐํ์ด์ค์ ๋๋ค.
์ฌ์ฉ
public void create() throws SQLException {
Connection connection = null;
PreparedStatement stmt = null;
try {
connection = dataSource.getConnection();
stmt = connection.prepareStatement("create table mytable (id int, name varchar(255))");
stmt.execute();
} catch (SQLException e) {
// ์์ธ์ฒ๋ฆฌ
} finally {
// ์์๋ฐ๋ฉ
if (stmt != null) stmt.close();
if (connection != null) connection.close();
}
}
์ฃผ์
JDBC๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ญ์ ์ ์ ํ ์์ ์ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ํ๋ฌ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
JDBC Template
Spring์์ ์ ๊ณตํ๋ ํด๋์ค๋ก JDBC API์ ๋ถํธํจ์ ํด์์์ผ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด/ ์ ๋ต ํจํด์ด ์ฌ์ฉ๋์์ต๋๋ค.
JdbcTemplate ๋ก ํด๊ฒฐํ ์ ์๋ ๊ฒ
๊ตฌ์กฐ์ ์ธ ๋ฐ๋ณต์ ํด๊ฒฐ
JDBC API ๋ฅผ ์ฌ์ฉํ๋ฉด try-catch ๋ฌธ์ ๋ง๋ค๊ณ Connection - Statement, ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ResultSet ๊น์ง ์์ฑ ํ ์์ธ์ฒ๋ฆฌํ๋ ๋ฐ๋ณต์ ํด๊ฒฐํด์ค๋๋ค.
์ฌ์ฉ๋ฒ
์๋ ๋ธ๋ก๊ทธ๋ค์ ์ฐธ๊ณ ํด์ฃผ์ธ์
Reference
'๐๏ธ Spring > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] JPQL Named ์ฟผ๋ฆฌ (0) | 2021.12.17 |
---|---|
[JPA] JPQL ์ฌ์ฉ๋ฒ (0) | 2021.12.17 |
[JPA] @AttributeOverride - ๋งคํ ์ ๋ณด ์ฌ์ ์ (1) | 2021.12.16 |
[JPA] ์์์ฑ ์ ์ด(CASCADE)์ ๊ณ ์ ๊ฐ์ฒด (0) | 2021.12.15 |
[JPA] ์ฆ์ ๋ก๋ฉ๊ณผ ์ง์ฐ ๋ก๋ฉ ( + PersistentBag) (0) | 2021.12.15 |