Breaking

Hiển thị các bài đăng có nhãn WCD_WebComponentDevelopment. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn WCD_WebComponentDevelopment. Hiển thị tất cả bài đăng

09 tháng 6, 2021

tháng 6 09, 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.

 


31 tháng 5, 2021

tháng 5 31, 2021

Kết nối Database trong Jakarta Servlet dùng Connection Pooling

 


Bước 1. Cấu hình các thư viện cần thiết trong file "porm.xml".  (tất cả code dưới đây copy được nhé).

a. Thư viện MySql:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>


b. Thư viện JSTL:

<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>


Chú ý: những đoạn mã trên nằm trong thẻ <dependencies>, như sau:

<dependencies>
<!-- Copy vào đây nè, ở trong thẻ 'dependencies' -->
</dependencies>


Sau khi chỉnh sửa file "porm.xml", nút  sẽ xuất hiện ở góc trên cùng bên phải. Ấn vào nút này để intellij-idea tải lại các thư viện cần thiết theo đúng theo cấu hình vừa sửa trong file "porm.xml".



Bước 2. Tạo cơ sở dữ liệu mẫu:

# 00. Tạo Tài khoản truy cập cơ sở dữ liệu (tùy chọn, nếu cần):
GRANT ALL PRIVILEGES ON *.* TO javauser@localhost
IDENTIFIED BY 'javadude' WITH GRANT OPTION;

# 01. Tạo Cơ sở dữ liệu:
create database DatabaseName_Test;
use DatabaseName_Test;

# 02. Tạo Bảng:
create table TableName_Test (
id int not null auto_increment primary key,
foo varchar(25),
bar int);

# 03. Nhập dữ liệu mẫu vào bảng vừa tạo:
insert into TableName_Test value (null, 'hello', 12345);
insert into TableName_Test value (null, 'welcome', 56789);



Bước 3. Tạo file "webapp/META-INF/context.xml" (chưa có thư mục 'META-INF' thì tạo nhé)

<Context>
<Resource name="jdbc/mysql/DatabaseName_Test"
auth="Container"
type="javax.sql.DataSource"

maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"

username="root"
password=""
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/DatabaseName_Test"/>

<!-- maxTotal(int): số lượng kết nối tối đa tại 1 thời điểm. -->
<!-- maxIdle(int): số lượng kết nối nhàn rỗi được duy trì tối đa. -->
<!-- maxWaitMillis: số mili giây tối đa đợi kết nối,         sau số giây này thì coi như ko kết nối được, để hệ thống chuyển sang việc khác. -->

<!-- CHÚ Ý: Sửa lại username, password và tên cơ sở dữ liệu trong url cho đúng -->
</Context>



Bước 4. Cấu hình file "webapp/WEB-INF/web.xml"

(Không cần làm bước này code vẫn chạy)

<resource-ref>
<description>Database Connection Test</description> <!-- Mô tả này là tùy chọn -->
<res-ref-name>jdbc/mysql/DatabaseName_Test</res-ref-name> <!-- Tên Resource đã khai báo
trong file "META-INF/context.xml" -->
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>



Bước 5. Tạo file "webapp/test.jsp", để kiểm tra kết nối và hiển thị kết quả.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<sql:query var="resultSet" dataSource="jdbc/mysql/DatabaseName_Test">
select * from TableName_Test
</sql:query>

<html>
<head>
<title>DB Test</title>
</head>
<body>

    <h2>Results</h2>

    <c:forEach var="row" items="${resultSet.rows}">
    Foo: ${row.foo} <br>
     Bar: ${row.bar} <br>         <br>
    </c:forEach>

</body>
</html>



Kết quả nè:



💜 Cảm ơn bạn đã đọc bài, mọi thắc mắc hoặc góp ý hãy để lại bình luận cho mình nhé 💜

Chúc các bạn thành công!


Nguồn tham khảo: 



Cùng chủ đề, đọc tiếp:


29 tháng 5, 2021

tháng 5 29, 2021

DataBase JDBC và Listener trong Jakarta Servlet

 


DataBase JDBC và Listener - Jakarta Servlet


1. Chuẩn bị cơ sở dữ liệu: bạn tải về file .sql ở đây và nhập cơ sở dữ liêu từ PhpMyAdmin:

Sau khi tải về file, hãy vào PhpMyAdmin và làm theo hướng dẫn của tôi để nhập cấu trúc bảng và dữ liệu mẫu nhé. Tên cơ sở dữ liệu tôi để giúp bạn là: WCD_WebComponentDevelopment




2. Khai báo dependency trong file porm.xml (Chú ý: bạn có thể dùng phiên bản mới nhất thời điểm lúc bạn làm dự án)

<dependency>
    <groupId>
mysql</groupId>
    <artifactId>
mysql-connector-java</artifactId>
    <version>
8.0.24</version>
</dependency>


1.    3. Cấu hình các giá trị DataBase trong file webapp/WEB-INF/web.xml

    Khởi tạo các giá trị cấu hình ban đầu: username, password, driver, dbUrl

<context-param>
    <param-name>
username</param-name>
    <param-value>
root</param-value>
</context-param>
<context-param>
    <param-name>
password</param-name>
    <param-value>
123456</param-value>
</context-param>
<context-param>
    <param-name>
driver</param-name>
    <param-value>
com.mysql.cj.jdbc.Driver</param-value>
</context-param>
<context-param>
    <param-name>
dbUrl</param-name>
    <param-value>
jdbc:mysql://192.168.0.3:3306/DatabaseName</param-value>
</context-param>



4. Tạo class: Database/ DatabaseConnectionManager

Khởi tạo và kết nối đến cơ sở dữ liệu, lấy đối tượng connection để Listener sử dụng.

public class DatabaseConnectionManager {
   
private Connection connection;

    public
DatabaseConnectionManager(String username, String password, String driver, String dbUrl) throws ClassNotFoundException, SQLException {
        Class.forName(driver)
;
        this
.connection = DriverManager.getConnection(dbUrl, username, password);
   
}

   
public Connection getConnection() {
       
return this.connection;
   
}
}



1.    5. Tạo class: Listener/ApplicationContextListener


Cl    Class này nẽ lắng nghe sự kiện kích hoạt DataBase để khởi tạo một kết nối đến cơ sở dữ liệu để Controller sử dụng.


@WebListener
public class ApplicationContextListener  implements ServletContextListener {
   
@Override
   
public void contextInitialized(ServletContextEvent sce) {
        ServletContext context = sce.getServletContext()
;

       
String username = context.getInitParameter("username");
       
String password = context.getInitParameter("password");
       
String driver = context.getInitParameter("driver");
       
String dbUrl = context.getInitParameter("dbUrl");

        try
{
            DatabaseConnectionManager databaseConnectionManager =
new DatabaseConnectionManager(username, password, driver, dbUrl);
           
Connection connection = databaseConnectionManager.getConnection();
           
context.setAttribute("dbConnection", connection);
       
} catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace()
;
       
}
    }

   
@Override
   
public void contextDestroyed(ServletContextEvent sce) {
        Connection connection = (Connection) sce.getServletContext().getAttribute(
"dbConnection");
        try
{
            connection.close()
;
       
} catch (SQLException e) {
            e.printStackTrace()
;
       
}
    }
}




1.    6. Tạo class: Controller/TestConnectionDatabase


    Đây là một Controller, Sau khi gọi sự kiện kết nối DataBase thành công, nó thực hiện câu truy vấn lấy danh sách dữ liệu từ bảng User. Dữ liệu trả về sẽ được gửi tiếp đến View. 


    (Đây là một ví dụ đơn giản nên tôi sẽ không sử dụng View ở đây. Tôi chỉ đơn giản lặp và hiển thị các bản ghi thôi. Các bạn hãy phát triển bài toán tiếp nhé. Ví dụ thêm View để hiển thị đẹp và xịn xò nè) 😄😊


@WebServlet({"/test-connection-database", "/test-connection-database/"})
public class TestConnectionDatabase extends HttpServlet {
   
@Override
   
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType(
"text/html");
       
PrintWriter out = response.getWriter();
       
Connection connection = (Connection) request.getServletContext().getAttribute("dbConnection");
        try
{
            PreparedStatement statement = connection.prepareStatement(
"

                    select * from wcd_webcomponentdevelopment.user

                ");
           
ResultSet resultSet = statement.executeQuery();
            while
(resultSet != null && resultSet.next()){
                out.println(
                        resultSet.getString(
"username") +": "
                               
+ resultSet.getString("firstname") +", "
                               
+ resultSet.getString("lastname")
                )
;
           
}
        }
catch (SQLException e) {
            e.printStackTrace()
;
       
}
    }
}



Kết quả nè:



💜 Cảm ơn bạn đã đọc bài, hãy để lại bình luận góp ý cho mình nhé 💜

Chúc các bạn thành công!