JPA LÀ GÌ

Bài viết này sẽ giúp đỡ bạn phát âm JPA là gì cách để thiết đặt một ví dụ đơn giản và dễ dàng bởi câu hỏi áp dụng Spring Boot

quý khách hàng vẫn biết được:

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

Các hiện tượng bắt buộc có:

Maven 3.0+JDK 1.8+IDE tùy mê thích. Ở bài xích này vẫn cần sử 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 cân xứng trong kháng quan hệ tình dục của đối tượng

*

Java là 1 trong những ngữ điệu lập trình sẵn phía đối tượng người tiêu dùng. Tất cả thông tin sẽ được tàng trữ trong các đối tượng

Thông thường, những cơ sở dữ liệu dục tình (relational databases) được dùng làm tàng trữ tài liệu (ngày nay các CSDL phi quan hệ giới tính cũng đang dần phổ cập hơn – tuy thế họ sẽ không đề cùa tới nó sống bài viết này). Và các tài liệu trong cơ sở dữ liệu quan hệ được lưu giữ bên dưới dạng bảng.

Các đối tượng người dùng (object) được thiết kế với khác cùng với biện pháp cơ mà CSDL quan hệ nam nữ có phong cách thiết kế. Việc này dẫn mang đến impedance mismatch (chẳng biết dịch ra sao nữa: chống bất phù hợp chăng)

Ngôn ngữ phía đối tượng bao hàm những phát minh như: đóng gói, thừa kế, interfaces cùng nhiều hình.DataBase quan hệ giới tính được làm cho từ những bảng với những phát minh về chuẩn chỉnh hóa.

Ví dụ về Object Relational Impedance Mismatch (bất phù hợp trong phòng quan hệ nam nữ của đối tượng)

Hãy để ý ví dụ sau - Employees và Tasks.

Mỗi Employee hoàn toàn có thể có rất nhiều Task. Mỗi Task lại rất có thể thuộc thực hiện bời nhiều Employee. Đây là mối quan hệ nhiều-nhiều. Dưới phía trên vẫn là ví dụ về impedance mismatch (bất tương xứng kháng).

Xem thêm: Luận Về Ý Nghĩa Tính Tình, Tướng Mệnh Của Sao Hoa Cái Là Gì, Sao Hoa Cái Là Gì

lấy một ví dụ 1: class Task được ánh xạ (map) tới bảng Task. Tuy nhiên, có sự không thống nhấtnghỉ ngơi tên những 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 TIMESTAMP, PRIMARY KEY (id) )lấy ví dụ như 2: Các mối quan hệ thân các object được trình bày theo một biện pháp kháckhi đối chiếu với mối quan hệ giữa các bảng

Mỗi Employee rất có thể có tương đối nhiều Task. Mỗi Task hoàn toàn có thể thuộc có tác dụng bởi vì những Employee. Đây là mối quan hệ nhiều-nhiều nlỗi ta vẫn nói 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 )lấy ví dụ như 3: thường thì, nhiều class được ánh xạ cho tới một bảng cùng 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, city 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ác trước khi gồm JPA - JDBC, Spring JDBC và myBatis

Các tiếp cận trước khi bao gồm JPA là triệu tập vào tróc nã vấn với phương pháp để đưa hóa công dụng tầm nã vấn đó tới những object.

Bất kỳ cách tiếp cận nào sử dụng tróc nã vấn thường xuyên làm cho 2 câu hỏi sau:

Thiết lập các tđê mê số đến tróc nã vấn: ta cần hiểu những cực hiếm trường đoản cú object cùng gán bọn chúng như là các tđê mê số vào truy vấnPhân phân tách những hiệu quả của truy hỏi vấn: những công dụng đang cần được được ánh xạ vào những 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 với ResultSetTrong ví dụ dưới, câu truy vấn vấn cần sử dụng là:Update tovì phối user=?, desc=?, target_date=?, is_done=? where id=?Các quý giá cần phải có để thực hiện câu truy vấn vấn được gán vào bằng cách thực hiện những method mix vào class PreparedStatement.Kết trái từ bỏ câu tróc nã vấn sẽ tiến hành giữ vào ResultSet. Ta cần viết những câu lệnh để phân chia ResultSet vào các object.

Ví dụ: Update Tobởi vì -dùng JDBC nhằm update CSDL

Kết nối cùng với CSDL (lệnh 1) à Chuẩn bị 1 câu query với tsay mê số (lệnh 2) à mix các tsi số ( lệnh 3 mang lại 7) à triển khai truy vấn(lệnh 8) à đóng góp câu lệnh tróc nã vấn(lệnh 9) à đóng góp kết nối cùng với CSDL

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

Cũng khá tương đương ví dụ bên trên tuy vậy lần này là ta vẫn rước dữ liệu từ bỏ CSDL và gán nó vào ngôi trường của object. Câu lệnh số 4 đã mang đọc tin truy tìm vấn gán vào ResultSet. Câu lệnh if đang là lấy biết tin vừa truy 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ày todo = new Todo(); tovì.setId(resultSet.getInt("id")); tovì chưng.setUser(resultSet.getString("user")); tovị.setDesc(resultSet.getString("desc")); tovì.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ỏ trên của JDBCNó áp dụng JDBCTemplateThường nó sẽ thực hiện ít chiếc hơn đối với JDBC, được đơn giản dễ dàng hóa nlỗi sau:Ánh xạ (mapping) tsay đắm số tới câu tầm nã vấnPhânchia các resultmix cho những beanVí dụ:Thao tác update, rước dữ liệu bằng spring JDBC

Update Todo

jdbcTemplate.update("Update tobởi phối user=?, desc=?, target_date=?, is_done=? where id=?", tobởi.getUser(), tobởi vì.getDesc(), new Timestamp(tobởi.getTargetDate().getTime()), todo.isDone(), tovì chưng.getId());Retrieve sầu a Todo