Breaking

09 tháng 6, 2021

 

Spring Data Access

1.1.1 Truy cập dữ liệu với spring

- Spring Framework cung cấp hỗ trợ lập trình để truy cập và thao tác dữ liệu trong

cơ sở dữ liệu.


1.1.2 Hỗ trợ Spring transaction

Đối với các ứng dụng hướng RDBMS, quản lý   là một hoạt động quan trọng để đảm bảo tính toàn vẹn và nhất quán của dữ liệu. Một giao dịch cơ sở dữ liệu phải có bốn thuộc tính chính:

 

- Atomicity: Các sửa đổi cơ sở dữ liệu phải tuân theo quy tắc tất cả hoặc không có gì. Một giao dịch liên quan đến một số hoạt động cấp thấp. Theo thuộc tính này, một giao dịch phải

được coi như một đơn vị atomicify, nghĩa là, tất cả các hoạt động của nó đều được thực thi hoặc nếu không, không được thực hiện. Không được có trạng thái nào trong cơ sở dữ liệu nơi giao dịch là một phần hoàn thành.

- Consistency: Cơ sở dữ liệu phải duy trì ở trạng thái nhất quán trước khi bắt đầu giao dịch và sau khi hoàn thành thành công / không thành công. Do một số lỗi giao dịch, đôi khi cơ sở dữ liệu có thể được cập nhật một phần, có nghĩa là sẽ có sự không nhất quán. Điều này cần được tránh bằng cách thực hiện các biện pháp thích hợp.

- Isolation: Mỗi transaction không biết về các transaction khác đang thực hiện đồng thời trong hệ thống. Điều này là cần thiết để duy trì hiệu suất cũng như tính nhất quán giữa các transaction trong cơ sở dữ liệu.

- Durability: Khi transaction được hoàn tất thành công trong cơ sở dữ liệu và nhận được thông báo, transaction phải luôn tồn tại trong cơ sở dữ liệu và không được hoàn tác ngay cả khi hệ thống bị lỗi và khởi động lại.

Những đặc điểm này thường được viết tắt là ACID.

- Spring Framework cung cấp khả năng transaction cho các đối tượng Java cũ (POJO). do đó, đóng vai trò thay thế cho các transaction Enterprise JavaBeans (EJB). EJB là một phần mềm phía máy chủ được quản lý giúp các nhà phát triển tạo các ứng dụng doanh nghiệp theo mô-đun. EJB là một trong số các API Java.


1.2.1 Spring Framework cung cấp tính năng quản lý giao dịch toàn diện mang lại những ưu điểm sau:

- Hỗ trợ quản lý transaction khai báo, là sự phân chia ranh giới transaction không theo chương trình. Điều này cho phép tách biệt quản lý giao dịch khỏi mã doanh nghiệp. Nói cách đơn giản, thông qua quản lý transaction khai báo, các nhà phát triển có thể quản lý transaction với sự trợ giúp của cấu hình thay vì mã hóa cứng trong mã nguồn của họ. Quản lý transaction khai báo được ưu tiên hơn quản lý transaction theo chương trình mặc dù nó kém linh hoạt hơn so với quản lý transaction sau đó cho phép các nhà phát triển kiểm soát các transaction thông qua mã của họ. Quản lý giao dịch khai báo có thể được mô-đun hóa với cách tiếp cận AOP. Quản lý giao dịch khai báo Spring Framework có thể được áp dụng cho bất kỳ lớp nào, không chỉ các lớp đặc biệt như EJB.

- Hỗ trợ API đơn giản hơn để quản lý transaction theo chương trình so với các API giao dịch phức tạp như JTA. Chìa khóa của sự trừu tượng hóa giao dịch Spring được xác định bởi giao diện org.springframework.transaction.PlatformTransactionManager.

- Cung cấp cho các nhà phát triển mô hình lập trình nhất quán trên một số API giao dịch, chẳng hạn như API giao dịch Java (JTA), JDBC, Hibernate, Java Persistence API (JPA). và Đối tượng dữ liệu Java (JDO). Điều này làm giảm nhu cầu sử dụng các mô hình lập trình cục bộ và toàn cầu khác nhau.

- Tích hợp tốt với các abstract truy cập dữ liệu của Spring.


1.2.2 Hỗ trợ DAO

- Đối tượng Truy cập Dữ liệu (DAO) là một đối tượng, thực hiện một số hoạt động dữ liệu cụ thể mà không tiết lộ chi tiết của cơ sở dữ liệu cho người dùng. Sự cô lập này tách giao diện công khai của DAO khỏi việc triển khai nó. Giao diện công khai có thể bao gồm các phương thức truy cập dữ liệu mà ứng dụng cần cho các đối tượng và kiểu dữ liệu dành riêng cho miền. Việc triển khai bao gồm cách các đối tượng miền cụ thể và nhu cầu kiểu dữ liệu được đáp ứng với một lược đồ cơ sở dữ liệu và DBMS cụ thể.

- Spring cung cấp một khung DAO chứa các giao diện, các lớp tiện ích và các lớp trừu tượng. Các nhà phát triển có lựa chọn sử dụng cấu hình dựa trên XML hoặc cấu hình dựa trên chú thích để liên kết các lớp tùy chỉnh với khuôn khổ Spring DAO. Công cụ thứ hai giúp ứng dụng Spring dễ dàng hoạt động với các công nghệ truy cập dữ liệu khác nhau, chẳng hạn như Hibernate, JDBC, JdbcTemplate, JPA và JDO. Trong trường hợp, ứng dụng Spring sử dụng kết hợp các công nghệ truy cập dữ liệu, cấu hình nhấn mạnh vào việc kết hợp lỏng lẻo giữa các lớp tùy chỉnh và khung công tác. Điều này cho phép các nhà phát triển dễ dàng chuyển đổi giữa hai. Ngoài ra, việc mở rộng các lớp này trong ứng dụng Spring của họ cho phép các nhà phát triển viết mã chung mà không tạo ra lỗi cụ thể cho từng công nghệ truy cập dữ liệu có trong ứng dụng.

+ JdbcDaoSupport: Nó là một siêu lớp cho các đối tượng truy cập dữ liệu JDBC và yêu cầu một cá thể DataSource sẽ được cung cấp.

+ HibernateDaoSupport: Nó là một siêu lớp dành cho các đối tượng truy cập dữ liệu Hibernate và yêu cầu cung cấp một phiên bản SessionFactory.

+ JdoDaoSupport: Nó là một siêu lớp cho các đối tượng truy cập dữ liệu JDO và yêu cầu cung cấp một cá thể PersistenceManagerFactory.

+ JpaDaoSupport: Nó là một siêu lớp dành cho các đối tượng truy cập dữ liệu JPA và yêu cầu cung cấp một cá thể EntityManagerFactory.

- Spring cung cấp một bản dịch thuận tiện và dễ dàng từ các ngoại lệ, chẳng hạn như SQLException (dành riêng cho một công nghệ) sang hệ thống phân cấp lớp ngoại lệ của riêng nó.


1.3.1 DAO Design Pattern

- DAO Design Pattern được xây dựng dựa trên các nguyên tắc thiết kế trừu tượng và đóng gói để bảo vệ ứng dụng khỏi bất kỳ thay đổi nào mà nhà phát triển chọn thực hiện trong cơ sở dữ liệu và công nghệ của họ. Hãy xem xét một ví dụ trong đó ứng dụng MVC xác thực người dùng bằng thông tin đăng nhập từ cơ sở dữ liệu tại chỗ. Do xu hướng thay đổi, các nhà phát triển hiện đã nâng cấp lên cơ sở dữ liệu dựa trên đám mây. Bình thường. điều này có nghĩa là toàn bộ ứng dụng của họ sẽ bị ảnh hưởng bởi thay đổi nhỏ này. Tuy nhiên, nếu ứng dụng của họ được phát triển bằng cách sử dụng mẫu thiết kế DAO, nó sẽ dễ dàng và an toàn vì các thay đổi chỉ cần thực hiện đối với lớp truy cập dữ liệu, giữ nguyên lớp xem.

- DAO pattern có các thành phần sau:

+ Giao diện đối tượng truy cập dữ liệu: Xác định các hoạt động tiêu chuẩn được thực hiện trên một đối tượng mô hình.

+ Lớp concrete truy cập dữ liệu: Triển khai giao diện DAO và chịu trách nhiệm lấy dữ liệu từ nguồn dữ liệu (cơ sở dữ liệu / XML hoặc bất kỳ cơ chế lưu trữ nào khác).

+ Đối tượng Mô hình hoặc Đối tượng Giá trị: Đề cập đến một POJO đơn giản có chứa các phương thức get / set để lưu trữ dữ liệu, được truy xuất bằng cách sử dụng lớp DAO.

* Ví dụ: một nhà phát triển có thể tạo một chương trình sử dụng mẫu DAO và hiển thị tên và số lượng nhân viên của một công ty.

- Tại đây, nhà phát triển có thể tạo một đối tượng Nhân viên hoạt động như một Mô hình hoặc Đối tượng Giá trị. EmployeeDao là Giao diện Đối tượng Truy cập Dữ liệu. Employeedaolmpl là một lớp cụ thể triển khai Giao diện đối tượng truy cập dữ liệu. DaoPatternDemo, lớp, sẽ sử dụng EmployeeDao để chứng minh việc sử dụng mẫu Đối tượng Truy cập Dữ liệu.


1.3.2 JDBC

- Các nhà phát triển có thể sử dụng JDBC để thực hiện truy cập cơ sở dữ liệu trong kiến ​​trúc hai tầng cũng như ba tầng.



- Ngược lại với kiến ​​trúc hai tầng, trong kiến ​​trúc ba tầng. một ứng dụng và một nguồn dữ liệu giao tiếp với nhau thông qua một tầng giữa (tầng dịch vụ).

- Ứng dụng sẽ gửi các lệnh đến tầng giữa trước tiên và sau đó các lệnh này được gửi đến nguồn dữ liệu.

- Nguồn dữ liệu cũng xử lý các lệnh và gửi kết quả trở lại tầng giữa trước tiên và sau đó các kết quả này được gửi trở lại ứng dụng.

- Để xây dựng một ứng dụng JDBC, các nhà phát triển cần thực hiện các bước sau:

+ Nhập gói chứa các lớp JDBC cần thiết để lập trình cơ sở dữ liệu.

+ Đăng ký trình điều khiển JDBC để mở kênh liên lạc với cơ sở dữ liệu.

+ Mở kết nối để tạo đối tượng Kết nối.

+ Thực thi một truy vấn bằng cách sử dụng một đối tượng kiểu Statement hoặc PreparedStatement để gửi một câu lệnh cơ sở dữ liệu.

+ Trích xuất dữ liệu từ tập hợp kết quả để tìm nạp dữ liệu từ cơ sở dữ liệu.

+ Đóng tất cả các tài nguyên cơ sở dữ liệu để làm sạch môi trường.


1.4.1 Spring JDBC Packages

- Spring Framework JDBC giúp làm việc với JDBC trong các ứng dụng Spring dễ dàng hơn. Spring Framework cung cấp một số lớp dựng sẵn cho JDBC có thể được mở rộng. Thông dụng và phổ biến nhất là lớp JdbcTemplate. Lớp này giúp quản lý các hoạt động vận hành cấp thấp, chẳng hạn như mở và đóng kết nối, chuẩn bị và thực thi các câu lệnh SQL, xử lý các ngoại lệ của quy trình, v.v.

- Các lớp Spring JDBC có bốn gói sau:

+ core: Gói này có các lớp cho chức năng cốt lõi của JDBC. Một số lớp quan trọng bao gồm NamedParameterJdbcTemplate. JdbcTemplate, SimpleJdbclnsert. và SimpleJdbcCall.

+ Data sources: Gói này có các lớp tiện ích để truy cập nguồn dữ liệu. Ngoài ra, gói này bao gồm các triển khai nguồn dữ liệu khác nhau có thể được sử dụng để kiểm tra mã JDBC ngoài vùng chứa Java EE.

+ Object: Gói này có các lớp hỗ trợ hoạt động cơ sở dữ liệu như truy vấn và cập nhật. Nó cho phép thực hiện các truy vấn và trả về kết quả như một đối tượng nghiệp vụ.

+ support: Gói này có các lớp hỗ trợ cho các lớp khác được định nghĩa trong gói lõi và gói đối tượng.


1.5.1 Sử dụng JDBC với Spring

- Các nhà phát triển có thể sử dụng JDBC với Spring Framework bằng cách thực hiện các bước sau:

1. Tạo một nguồn dữ liệu trong cơ sở dữ liệu. Ví dụ, người dùng có thể tạo một cơ sở dữ liệu và một bảng trong MYSQL. Một cách dễ dàng để làm điều này là sử dụng XAMPP, một giải pháp máy chủ Web đa nền tảng mã nguồn mở miễn phí. Tải xuống phần mềm từ https: www.apachefriends.orgldownload.html và cài đặt nó. Khởi chạy nó và đảm bảo Apache và MYSQL đang chạy. Tạo cơ sở dữ liệu MYSQL và bảng thông qua giao diện Web.

2. Tạo một dự án Java bằng cách sử dụng STS và một gói trong thư mục src trong dự án đã tạo.

3. Bao gồm các thư viện Spring bắt buộc bằng cách sử dụng tùy chọn Thêm JAR bên ngoài.

4. Tải xuống và thêm các thư viện mới nhất cụ thể của Spring JDBC mysql-connector-javajar, org.springframework.jdbc.jar và org.springframework.transaction.jar vào dự án.

5. Tạo giao diện DAO và xác định tất cả các phương thức được yêu cầu.

6. Tạo các lớp Java cần thiết khác và tệp cấu hình Beans có tiêu đề Beans.xml, trong thư mục src.

7. Tạo nội dung của tất cả các tệp Java và tệp Cấu hình Bean và chạy ứng dụng.


1.5.2 Sử dụng Lớp JdbcTemplate

- Sử dụng lớp JdbcTemplate trong một ứng dụng loại bỏ nhu cầu viết mã cho các hoạt động vận hành. Sau khi sử dụng lớp này trong một ứng dụng, các nhà phát triển chỉ cần xác định các tham số kết nối và chỉ định câu lệnh SQL.

- Lớp JdbcTemplate thực hiện các chức năng sau:

+ Thực thi các truy vấn SQL

+ Cập nhật báo cáo

+ gọi Stores procedure

+ Thực hiện lặp qua ResultSets

+ Trích xuất các giá trị tham số trả về

- Ngoài ra, lớp JdbcTemplate giúp bắt các ngoại lệ trong các ứng dụng và ánh xạ chúng tới các danh mục phân cấp ngoại lệ tương ứng được xác định trong gói org.springframework.dao.

- Lớp JdbcTemplate cung cấp các phương thức sau:

+ public int update(String query): Giúp chèn, cập nhật và xóa bản ghi.

+ public int update(String query, Object... args): Giúp chèn, cập nhật và xóa các bản ghi bằng PreparedStatement bằng given arguments.

+ public void execute(String query): Giúp thực hiện truy vấn DDL.

+ public T execute(String sql, EparedStatementCallback action): Giúp thực hiện truy vấn bằng cách sử dụng lệnh gọi lại PreparedStatement.

+ public T query (String sql, ResultSetExtractor rse): Giúp tìm nạp các bản ghi bằng ResultSetExtractor.

+ public List query(String sql, RowMapper rse): Giúp tìm nạp các bản ghi bằng RowMapper.


1.6.1 Truy cập dữ liệu MySQL với ORM

- MySQL là một Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL). SQL là một trong những ngôn ngữ phổ biến nhất để thêm, truy cập và quản lý nội dung trong cơ sở dữ liệu. Spring Framework cung cấp hỗ trợ lập trình với cơ sở dữ liệu MySQL.

- Các chương trình Spring có thể sử dụng một số mô hình lập trình để xử lý dữ liệu. Ánh xạ quan hệ đối tượng (ORM) là một trong số đó. MySQL có thể được kết hợp với ORM thông qua Spring Framework.


1.6.2 Giới thiệu ORM

- Nói một cách dễ hiểu, ORM là một kỹ thuật lập trình dựa trên nguyên tắc OO và giúp chuyển đổi dữ liệu giữa các hệ thống kiểu không tương thích hoặc xung đột trong cơ sở dữ liệu quan hệ, kho lưu trữ XML, các nguồn dữ liệu khác và ngôn ngữ OOP.

- Thư viện ORM được viết bằng cùng một ngôn ngữ có thể được sử dụng để dễ dàng giao tiếp và tương tác với một đối tượng. ORM cũng cung cấp khả năng kết hợp công nghệ và khả năng hiện đại mà không thực hiện bất kỳ thay đổi nào đối với mã của ứng dụng.

- ORM cung cấp những ưu điểm sau:

+ Tiết kiệm rất nhiều nỗ lực bảo trì vì mô hình dữ liệu được lưu trữ tại một nơi, giúp cập nhật, bảo trì và sử dụng lại mã dễ dàng hơn.

+ Sẽ linh hoạt hơn để sử dụng vì nó phù hợp với cách viết mã tự nhiên, tóm tắt hệ thống cơ sở dữ liệu. Các nhà phát triển có thể thay đổi nó theo yêu cầu và mô hình bị ràng buộc yếu với phần còn lại của ứng dụng, vì vậy có thể được thay đổi hoặc sử dụng ở bất kỳ nơi nào khác.


1.6.3 Giới thiệu Hibernate

- Hibernate là một giải pháp ORM hiệu suất cao và mạnh mẽ được tạo ra bởi Gavin King vào năm 2001 cho các ứng dụng Java. Hibernate ánh xạ các lớp Java tới các bảng cơ sở dữ liệu và kiểu dữ liệu Java sang kiểu dữ liệu SQL và cung cấp các phương tiện truy xuất và truy xuất dữ liệu để giảm số lượng các tác vụ lập trình liên quan đến độ bền dữ liệu phổ biến cho các nhà phát triển. Một trong những điều tốt nhất của việc sử dụng Hibernate là nó không cần bất kỳ máy chủ ứng dụng nào để hoạt động.

- Hibernate thay thế các truy cập cơ sở dữ liệu trực tiếp và liên tục bằng các chức năng xử lý đối tượng cấp cao.

- Ngoài ra, Hibernate cung cấp những lợi thế sau:

+ Ánh xạ các lớp Java tới các bảng cơ sở dữ liệu bằng cách sử dụng XML mà không cần viết mã.

+ Cung cấp các APls đơn giản để lưu trữ và truy xuất các đối tượng Java đến và đi từ cơ sở dữ liệu.

+ Cung cấp tính độc lập của mã bằng cách cho phép chỉ thay đổi các thuộc tính tệp XML nếu có thay đổi trong cơ sở dữ liệu hoặc trong bất kỳ bảng nào. Cung cấp tính độc lập của mã bằng cách cho phép chỉ thay đổi các thuộc tính tệp XML nếu có thay đổi trong cơ sở dữ liệu hoặc trong bất kỳ bảng nào.

+ Thao tác các liên kết phức tạp của các đối tượng cơ sở dữ liệu.

+ Hỗ trợ các chiến lược tìm nạp thông minh giúp giảm thiểu truy cập cơ sở dữ liệu.

+ Hibernate hỗ trợ hầu hết mọi cơ sở dữ liệu có trình điều khiển JDBC, chẳng hạn như HSQL Database Engine, DBZ / NT, MySQL, PostgreSQL, FrontBase, Oracle, v.v. Ngoài ra, nó hỗ trợ nhiều công nghệ, chẳng hạn như XDocIet Spring, J2EE, các trình cắm thêm Eclipse và Maven.

- Kiến trúc Hibernate có các đối tượng sau:

+ Configuration: Đối tượng Cấu hình thường chỉ được tạo một lần trong quá trình khởi tạo ứng dụng. Đối tượng này cung cấp hai thành phần khóa sau:

            * Database Connection

            * Class Mapping Setup

+ SessionFactory: Đối tượng cấu hình tạo đối tượng SessionFactory để cấu hình Hibernate cho ứng dụng bằng cách sử dụng tệp cấu hình được cung cấp.

+ Session: Đối tượng Session được sử dụng để thiết lập kết nối vật lý với cơ sở dữ liệu.

+Transaction: Đây là một đối tượng tùy chọn vì các ứng dụng Hibernate có thể quản lý các giao dịch trong mã ứng dụng của riêng chúng.

+ Query: Đối tượng Truy vấn sử dụng chuỗi SQL hoặc Hibernate Query Language (HQL) để truy xuất dữ liệu từ cơ sở dữ liệu và tạo các đối tượng.

+ Criteria: Đối tượng Criteria được sử dụng để tạo và thực thi các truy vấn tiêu chí hướng đối tượng để truy xuất các đối tượng.


1.6.4 Tích hợp Hibernate với Spring Framework

- Các nhà phát triển có thể tích hợp một ứng dụng Hibernate với Spring Framework. Trong khuôn khổ Hibernate, họ cần cung cấp tất cả thông tin cơ sở dữ liệu trong tệp hibernate.cfg.xml. Trong khi đó, khi tích hợp ứng dụng Hibernate với Spring, họ không cần tạo tệp hibernate.cfg.xml mà chỉ cần cung cấp tất cả thông tin trong tệp applicationContext.xml.

 


Không có nhận xét nào:

Đăng nhận xét