
[10๋ถ ํ ์ฝํก] ๐โโ๏ธแแ ฉแฏแ แ ฆแแ ด JPAแแ ช JDBC
JDBC๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๋ ํ์ค ์ธํฐํ์ด์ค์
๋๋ค.
SQL์ ์ง์ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋์ผ๋ก ์ฐ๊ฒฐ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด์ ํ์ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์กฐํํ๋ JDBC ์ฝ๋์ ๋๋ค.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/school";
String user = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, user, password);
String sql = "SELECT * FROM students";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println("ํ์ ์ด๋ฆ: " + resultSet.getString("name"));
}
resultSet.close();
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
connection ๊ฐ์ฒด๊ฐ db์ app์ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๊ณ ,
preparedstatement๊ฐ sql์ ์ ๋ฌํ๋ฉฐ,
resultset ๊ฐ์ฒด๋ฅผ ํตํด ๊ฒฐ๊ณผ๊ฐ์ ์ ๋ฌํ๋ค.
JPA๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ SQL์ ์ง์ ์์ฑํ ํ์ ์์ด, ๊ฐ์ฒด(Entity)์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
JPA๋ฅผ ์ฌ์ฉํด์ ํ์ ์ ๋ณด๋ฅผ ์กฐํํ๋ ์ฝ๋์ ๋๋ค.
import jakarta.persistence.*;
import java.util.List;
@Entity
@Table(name = "students")
class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getter, Setter ์๋ต
}
public class JpaExample {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("schoolPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
List<Student> students = em.createQuery("SELECT s FROM Student s", Student.class).getResultList();
for (Student student : students) {
System.out.println("ํ์ ์ด๋ฆ: " + student.getName());
}
em.getTransaction().commit();
em.close();
emf.close();
}
}
์์์์ ํ์ด๋ฒ๋ค์ดํธ์ ๋ํด์๋ ์๊ธฐ๊ฐ ์์ด์ ๊ฐ์ด ์ ๋ฆฌํ๋ฉด ์ข์ ๊ฑฐ ๊ฐ์ ์ถ๊ฐ ํ์ต๋๋ค.
Hibernate๋ JPA์ ๋ํ์ ์ธ ๊ตฌํ์ฒด๋ก ORM(Object-Relational Mapping)์ ์ง์ํ๋ ํ๋ ์์ํฌ์ ๋๋ค.
์ ์ ๊ฐ์ฌ๋์ ์์ ์์ JPA๋ฅผ ์ ๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฐ์ ์ฟผ๋ฆฌ๋ฌธ์ ์ ๋๋ก ์์์ผ ์ฌ์ฉ์ ํ ์ ์๋ค๊ณ ๋ง์ํ์ จ์ต๋๋ค. JPA์์๋ ๋ฉ์๋ ์ด๋ฆ์ ์ด์ฉํด์ ์๋์ผ๋ก SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋๋ฐ, ์ฟผ๋ฆฌ๋ ์ ๋๋ก ๋ชจ๋ฅด๋ฉด ๋น์ฐํ ๋ค์ด๋ฐ ๊ท์น๋ ์ดํดํ์ง ๋ชปํ๊ฒ ์ฃ ? ใ
ํ์ด๋ฒ๋ค์ดํธ๋ JPA์ ๊ฐ๋ ฅํ ORM ๊ธฐ๋ฅ์ ํ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ฌ์ฉํด๋ณด๋ผ๊ณ ๊ถํ์ง๋ง ์์ง์ ์๋๊ฑธ๋ก.. ์์์์ ๊ตฌ๊ธ์ Why jpa hibernate is awful? ๋ฅผ ๊ฒ์ํด๋ณด๋ฉด ๋ญ.. ํ์ด๋ฒ๋ค์ดํธ๋ฅผ ์ผ๋๋ฐ ์ง์ฅ์ ๋ค๋ ์๋ค, ๋ผ๋ ๋ง๋ค์ด ์์ต๋๋ค.
์ด์ ๋ ์ฃผ๋ก ์ด๋ฐ ํ์ต ๋์ด๋๋ ๋ณต์กํ ์ต์ ํ, ์์์น ๋ชปํ ์ฑ๋ฅ ๋ฌธ์ ๋๋ฌธ์ธ๋ฏ ์ถ์ต๋๋ค.
์ฐ์ SQL๋ฌธ์ ์ ์งค ์ ์๋๋ก ํด๋ณด๊ธฐ..!