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 ๊น์ง ์์ฑ ํ ์์ธ์ฒ๋ฆฌํ๋ ๋ฐ๋ณต์ ํด๊ฒฐํด์ค๋๋ค.
์ฌ์ฉ๋ฒ
์๋ ๋ธ๋ก๊ทธ๋ค์ ์ฐธ๊ณ ํด์ฃผ์ธ์
JdbcTemplate์ด๋? 1ํธ
jdbc+Template ์ฆ, ์ง์ญํ๋ฉด "jdbc๋ฅผ ์ํ ํ"์ด๋ผ๋ ๋ป์ด๋ค.๊ทธ๋งํผ jdbc ํ๋ก๊ทธ๋๋ฐ์ ํนํ๋์ด ์๋ค๋ ๊ฒ ์ผํ ๋ฐ, ์ด๋ค ์ ์ด ๋ ์ข๋ค๋ ๊ฑธ๊น? ํ๋ฒ ์์๋ณด์๊ธฐ์กด์ ๋ฐฉ์๊ณผ ๋น๊ตํด์ ์์๋ณด์.// SELECT
velog.io
[Spring JDBC] JdbcTemplate์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
Reference
์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
JPA๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋, ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ์กฑํ์ ๋ถ๋ค์ด JPA์ ๊ธฐ๋ณธ ์ด๋ก ์ ํํํ๊ฒ ํ์ตํด์ ์ด๋ณด์๋ ์ค๋ฌด์์ ์์ ์๊ฒ JPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค., ๋ณธ ๊ฐ์๋ ์๋ฐ ๋ฐฑ์
www.inflearn.com
JPQL์ด๋?
JPQL์ด๋? JPQL(Java Persistence Query Language) ๋ JPA (Java Persistence API) ์ ์ผ๋ถ๋ก ์ ์๋ ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด ์ ๋๋ค. JPQL ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฐํฐ์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋๋๋ฐ..
donnaknew.tistory.com
[JPA] ๋ค์ดํฐ๋ธ SQL ์ ๋ฆฌ
| Native SQL JPQL์ ํ์ค SQL์ด ์ง์ํ๋ ๋๋ถ๋ถ์ ๋ฌธ๋ฒ๊ณผ SQL ํจ์๋ค์ ์ง์ํ์ง๋ง ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ์์ ์ธ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ (Ex. - ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง ์ง์ํ๋ ํจ์, ๋ฌธ๋ฒ, SQL ์ฟผ๋ฆฌ ํ
data-make.tistory.com
Spring Data Jpa Native Query ์ฌ์ฉ๋ฒ
Spring Data Jpa Native Query ์ฌ์ฉ๋ฒ ๊ธฐ์กด mybatis๋ฑ ormํ๋ ์์ ๋ง๊ณ ๋ค๋ฅธ dbํ๋ ์์์ ์ฐ๋ค๊ฐ jpa๋ก ๋ฐ๊พธ๋ ค๊ณ ํ ๋ jpa๋ง์ผ๋ก ํด๊ฒฐ์ด ์ ์๋๋ ์ํฉ์ด ์์ต๋๋ค. ๊ทธ๋ด๋๋ native query๋ฅผ ์จ์ผํ ์ํฉ์ด ์
krksap.tistory.com
JdbcTemplate ์ JDBC API์ ๋น๊ต
JdbcTemplate Spring์์ ์ ๊ณตํ๋ ํด๋์ค๋ก JDBC API์ ๋ถํธํจ์ ํด์์์ผ์ฃผ๋ ์ญํ ์ ํ๋ค. (ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด/ ์ ๋ต ํจํด์ด ์ฌ์ฉ๋) JDBC API vs JdbcTemplate JDBC API ๋ ์๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์..
soongjamm.tistory.com
'๐๏ธ 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 |