Jpa là gì

Bài viết này để giúp chúng ta hiểu JPA là gì phương pháp để cài đặt một ví dụ đơn giản và dễ dàng bằng vấn đề áp dụng Spring Boot

Quý khách hàng đã biết được:

JPA đã giải vụ việc gì - Object Relational Impedance (tạm dịch là Khác tình dục của đối tượng)Các chọn lựa thay thế sửa chữa mang đến JPAHibernate là gì với nó contact cho JPA ra saoSpring Data JPA là gì?Cách tạo một project JPA đơn giản với Spring Boot Data JPA Starter

Các phép tắc buộc phải có:

Maven 3.0+JDK 1.8+IDE tùy mê say. Ở bài xích này đang dùng Eclipse.

Bạn đang xem: Jpa là gì

Object Relational Impedance Mismatch là gì?

Object Relational Impedance Mismatch tạm dịch làbất phù hợp vào chống quan hệ nam nữ của đối tượng

*

Java là một trong những ngữ điệu lập trình sẵn hướng đối tượng người sử dụng. Tất cả lên tiếng sẽ được tàng trữ trong những đối tượng

Đôi khi, những CSDL quan hệ (relational databases) được dùng để lưu trữ tài liệu (ngày này các CSDL phi dục tình cũng đang dần thịnh hành rộng – tuy thế chúng ta sẽ không đề cùa đến nó ngơi nghỉ bài viết này). Và các dữ liệu vào DataBase quan hệ nam nữ được lưu bên dưới dạng bảng.

Các đối tượng người tiêu dùng (object) được thiết kế với không giống với cách mà lại DataBase dục tình được thiết kế theo phong cách. Việc này dẫn cho impedance mismatch (chưa biết dịch ra làm sao nữa: phòng bất tương xứng chăng)

Ngôn ngữ hướng đối tượng người sử dụng bao hàm các ý tưởng như: đóng gói, kế thừa, interfaces với đa hình.CSDL quan hệ được tạo cho trường đoản cú các bảng cùng với những phát minh về chuẩn hóa.

ví dụ như về Object Relational Impedance Mismatch (bất tương xứng trong chống quan hệ tình dục của đối tượng)

Hãy chu đáo ví dụ sau - Employees & Tasks.

Mỗi Employee hoàn toàn có thể có rất nhiều Task. Mỗi Task lại có thể thuộc triển khai bời các Employee. Đây là quan hệ nhiều-những. Dưới đây sẽ là ví dụ về impedance mismatch (bất phù hợp kháng).

Xem thêm: Cảnh Báo Sàn Gọi Vốn Lừa Đảo Hay Hợp Pháp, Ma Trận Gọi Vốn Đa Cấp Thời 4

lấy một ví dụ 1: class Task được ánh xạ (map) cho tới bảng Task. Tuy nhiên, có sự không thống nhấtsinh hoạt thương hiệu các cột

Object:public class Task private int id; private String desc; private Date targetDate; private boolean isDone; private List employees;Table: CREATE TABLE task ( id INTEGER GENERATED BY DEFAULT AS IDENTITY, mô tả tìm kiếm VARCHAR(255), is_done BOOLEAN, target_date TIMESTAMPhường, PRIMARY KEY (id) )ví dụ như 2: Các mối quan hệ giữa những object được trình bày theo một biện pháp khácKhi so sánh cùng với quan hệ thân các bảng

Mỗi Employee hoàn toàn có thể có khá nhiều Task. Mỗi Task hoàn toàn có thể cùng làm cho bởi các Employee. Đây là quan hệ nhiều-nhiều nhỏng ta đang nhắc đến ở trên.

Object:public class Employee //Some other code private List tasks;public class Task //Some other code private List employees;Table:CREATE TABLE employee ( id BIGINT NOT NULL, OTHER_COLUMNS ) CREATE TABLE employee_tasks ( employees_id BIGINT NOT NULL, tasks_id INTEGER NOT NULL ) CREATE TABLE task ( id INTEGER GENERATED BY DEFAULT AS IDENTITY, OTHER_COLUMNS )Ví dụ 3: thường thì, các class được ánh xạ tới một bảng và ngược lại

Object:public class Employee //Other Employee Attributespublic class FullTimeEmployee extends Employee protected Integer salary;public class PartTimeEmployee extends Employee protected Float hourlyWage;Table:CREATE TABLE employee ( employee_type VARCHAR(31) NOT NULL, id BIGINT NOT NULL, đô thị VARCHAR(255), state VARCHAR(255), street VARCHAR(255), zip VARCHAR(255), hourly_wage FLOAT, --PartTimeEmployee salary INTEGER, --FullTimeEmployee PRIMARY KEY (id) )

Cách tiếp cận không giống trước lúc có JPA - JDBC, Spring JDBC và myBatis

Các tiếp cận trước khi bao gồm JPA là tập trung vào truy hỏi vấn với phương pháp để gửi hóa tác dụng truy hỏi vấn kia tới các object.

Bất kỳ biện pháp tiếp cận nào thực hiện truy vấn vấn hay làm cho 2 câu hỏi sau:

Thiết lập các tsi số mang lại truy vấn vấn: ta cần đọc những giá trị trường đoản cú object cùng gán chúng như là các tmê say số trong tróc nã vấnPhân chia những hiệu quả của tróc nã vấn: các công dụng đã rất cần phải được ánh xạ vào các bean.

1. JDBC

JDBC là viết tắt của Java Database ConnectivitySử dụng phát minh là sử dụng những class Statement, PreparedStatement cùng ResultSetTrong ví dụ bên dưới, câu truy tìm vấn cần sử dụng là:Update tovị mix user=?, desc=?, target_date=?, is_done=? where id=?Các cực hiếm cần phải có nhằm tiến hành câu tầm nã vấn được gán vào bằng cách áp dụng những method phối vào class PreparedStatement.Kết quả từ câu tầm nã vấn sẽ tiến hành lưu lại vào ResultSet. Ta buộc phải viết những câu lệnh nhằm phân loại ResultSet vào các object.

Ví dụ: Update Tovị -dùng JDBC nhằm update CSDL

Kết nối với DataBase (lệnh 1) à Chuẩn bị 1 câu query với tđam mê số (lệnh 2) à phối những tsay đắm số ( lệnh 3 đến 7) à tiến hành truy vấn vấn(lệnh 8) à đóng góp câu lệnh truy vấn(lệnh 9) à đóng góp kết nối với CSDL

Connection connection = datasource.getConnection();PreparedStatement st = connection.prepareStatement( "Update tovì chưng phối user=?, desc=?, target_date=?, is_done=? where id=?");st.setString(1, todo.getUser());st.setString(2, tovì chưng.getDesc());st.setTimestamp(3, new Timestamp(tovị.getTargetDate().getTime()));st.setBoolean(4, tovày.isDone());st.setInt(5, tovị.getId());st.execute();st.close();connection.close();Ví dụ: Retrieve sầu a Tobởi -đem tài liệu tự CSDL

Cũng tương đối tương tự ví dụ bên trên tuy thế lần này là ta vẫn rước dữ liệu từ DataBase với gán nó vào ngôi trường của object. Câu lệnh số 4 đang rước thông tin truy hỏi vấn gán vào ResultSet. Câu lệnh if đã là mang lên tiếng vừa truy vấn vấn được gán vào object.

Connection connection = datasource.getConnection();PreparedStatement st = connection.prepareStatement("SELECT * FROM TODO where id=?");st.setInt(1, id);ResultSet resultSet = st.executeQuery();if (resultSet.next()) Tovị tovì = new Todo(); todo.setId(resultSet.getInt("id")); tovì chưng.setUser(resultSet.getString("user")); todo.setDesc(resultSet.getString("desc")); tovì chưng.setTargetDate(resultSet.getTimestamp("target_date")); return todo;st.close();connection.close();return null;

2. Spring JDBC

Spring JDBC cung cấp một tấm bỏ lên trên của JDBCNó thực hiện JDBCTemplateThường nó vẫn áp dụng ít cái rộng so với JDBC, được dễ dàng và đơn giản hóa như sau:Ánh xạ (mapping) tham số cho tới câu truy vấn vấnPhânchia các resultmix cho những beanVí dụ:Thao tác update, mang dữ liệu bằng spring JDBC

Update Todo

jdbcTemplate.update("Update tovị mix user=?, desc=?, target_date=?, is_done=? where id=?", tovì chưng.getUser(), tovì chưng.getDesc(), new Timestamp(tovì chưng.getTargetDate().getTime()), tobởi.isDone(), tovày.getId());Retrieve a Todo