CHƯƠNG 1. CƠ SỞ LÝ THUYẾT 1. Ngôn ngữ lập trình Java 1. Giới thiệu [7] Java là một ngôn ngữ lập trình hướng đối tượng (OOP) và dựa trên các lớp (class), ban đầu được phát triển bởi Sun Microsystems do James Gosling khởi xướng và phát hành vào năm 1995.
Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy. Các tính năng của Java: + Hướng đối tượng: Trong Java, tất cả đều là một Object. Java có thể mở rộng và bảo trì dễ dàng bởi nó được xây dựng dựa trên mô hình Object. + Nền tảng độc lập: Khi được biên dịch, Java không được biên dịch thành ngôn ngữ máy trên nền tảng cụ thể mà thay vào mã byte – một nền tảng độc lập.
Mã byte này được thông dịch từ máy ảo (JVM) trên một nền tảng nào đó mà nó đang chạy. + Đơn giản: Java được thiết kế đơn giản, dễ học, chỉ cần hiểu khái niệm cơ bản về OOP trong Java. + Bảo mật: Tính năng an toàn của Java cho phép phát triển các hệ thống không virus, không giả mạo, việc xác thực dựa trên mã hoá khóa công khai. + Kiến trúc – trung lập: Trình biên dịch của Java tạo ra các định dạng tệp đối tượng kiến trúc trung lập, khiến mã biên dịch được thực thi trên nhiều bộ vi xử thông qua máy ảo Java.
+ Mạnh mẽ: Java luôn nỗ lực loại trừ các tình huống dễ bị lỗi thông qua việc kiểm tra lỗi tại thời điểm biên dịch và kiểm tra lỗi tại runtime. + Đa luồng: Giúp tạo ra các chương trình thực hiện cùng lúc nhiều tác vụ, cho phép các nhà phát triển xây dựng ứng dụng tương tác chạy trơn tru hơn. + Thông dịch: Các mã byte Java được dịch trực tiếp tới các máy tính gốc và không được lưu trữ ở bất cứ đâu. + Phân tán: Java được sử dụng thiết kế cho môi trường phân tán của Internet.
18 + Năng động: Java năng động hơn C hoặc C++ do được thiết kế với mục đích thích ứng môi trường đang phát triển. Các chương trình Java sở hữu lượng lớn thông tin tại runtime có thể được sử dụng để xác minh hay giải quyết các truy cập vào các đối tượng tại runtime. Ưu điểm Java có các ưu điểm như: + Java là ngôn ngữ độc lập với nền tảng vì chúng ta có thể chạy mã Java ở bất kỳ máy nào mà không cần phần mềm đặc biệt. + Là ngôn ngữ lập trình cấp cao dễ học và dễ hiểu.
+ Là ngôn ngữ hướng đối tượng làm tăng khả năng phát triển mã dễ dàng và tăng hiệu quả. + Là ngôn ngữ an toàn vì Java không sử dụng con trỏ. + Quản lý bộ nhớ hiệu quả. + Hỗ trợ đa luồng, người dùng có thể thực hiện cùng lúc nhiều chương trình.
+ Có nhiều tính năng: tự động thu gom rác, không sử dụng con trỏ, xử lý ngoại lệ… 1. Nhược điểm Tuy sở hữu nhiều ưu điểm nhưng Java vẫn tồn tại một số nhược điểm như: + Là ngôn ngữ cấp cao nên phải xử lý các mức biên dịch và trừu tượng của một máy ảo. + Hiệu suất kém. + Có ít trình xây dựng GUI (Giao diện người dùng đồ họa) như Swing, SWT, JSF và JavaFX.
Giới thiệu [6] Spring là một framework mã nguồn mở dùng để phát triển các ứng dụng Java được sử dụng bởi hàng triệu lập trình viên, có cộng đồng người dùng rất lớn. Spring có kích thước nhẹ và trong suốt nên có thể hoạt động một cách trong suốt nhất với lập trình viên. Spring mặc dù nhẹ nhưng lại có khả năng hỗ trợ cho các ứng dụng tạo ra hiệu năng cao, sử dụng lại code dễ dàng và dễ kiểm thử,. Nhờ vậy mà các 19 lập trình viên có thể dễ dàng thực hiện việc tối ưu hóa được hầu hết mọi công việc cũng như tiết kiệm được tối đa thời gian làm việc.
Các tính năng chính của Spring chủ yếu được sử dụng để có thể xây dựng được các ứng dụng bên trong Java Desktop, một số ứng dụng mobile, các Java Web. Một trong những mục tiêu chính nhất của Spring là đảm bảo cho việc phát triển những ứng dụng J2EE một cách dễ dàng hơn dựa trên mô hình sử dụng POJO (Plain Old Java Object). Spring được chia thành nhiều module, mỗi module làm một chức năng, ví dụ Spring Core, Web, Data access, AOP,… Spring được xây dựng dựa trên 2 khái niệm nền tảng là Dependency injection và AOP (Aspect Oriented Programming). Kiến trúc tổng thể của Spring Framework [2] Các lợi ích khi sử dụng Spring Framework: + Spring cho phép lập trình viên sử dụng POJOs.
Việc sử dụng POJOs giúp ta không phải làm việc với EJB, ứng dụng, các luồng chạy,cấu hình… đơn giản hơn rất nhiều. + Spring được tổ chức theo kiểu mô đun. Số lượng các gói và các lớp khá nhiều, nhưng chỉ cần quan tâm đến những gì ta cần và không cần quan tâm đến phần còn lại. 20 + Spring hỗ trợ sử dụng khá nhiều công nghệ như ORM Framework, các logging framework, JEE, các thư viện tạo lịch trình (Quartz và JDK timer)… + Module Web của Spring được thiết kế theo mô hình MVC nên nó cung cấp đầy đủ các tính năng giúp thay thế các web framework khác.
Spring Boot Spring Boot, một trong số những module của Spring Framework chuyên cung cấp các tính năng Rapid Application Development (RAD) để tạo ra và phát triển nhanh các ứng dụng độc lập dựa trên Spring, ra đời ra đời với mục đích loại bỏ những cấu hình phức tạp của Spring, nó không yêu cầu cấu hình XML và nâng cao năng suất cho các nhà phát triển. Với sự góp mặt của Spring Boot, hệ sinh thái Spring đã trở nên mạnh mẽ, phổ biến và hiệu quả hơn bao giờ hết. Mô hình cấu tạo của Spring Boot [3] Một số ưu điểm chính của Spring boot: + Hội tụ đầy đủ các tính năng của Spring Framework. + Đơn giản hóa cấu hình và xây dựng được các ứng dụng độc lập có khả năng chạy bằng java - jar nhờ các dependency starter.
+ Dễ dàng deploy vì các ứng dụng server được nhúng trực tiếp vào ứng dụng để tránh những khó khăn khi triển khai lên môi trường production mà không cần thiết phải tải file WAR. Spring Data JPA & Hibernate Search 1. Spring Data JPA Spring Data JPA thuộc Spring Data là một module của Spring Framework giúp giảm thiểu việc thực hiện quá nhiều bước để có thể triển khai được JPA (Java Persistence API) với JPA provider mặc định là Hibernate. Mục đích của việc sử dụng JPA để lưu trữ/trích xuất dữ liệu từ cơ sở dữ liệu một cách dễ dàng mà không quan tâm quá nhiều đến các câu truy vấn SQL, đồng thời độc 21 lập nền tảng với cơ sở dữ liệu khiến ứng dụng trở nên linh hoạt, có thể thay đổi hệ quản trị cơ sở dữ liệu mà không cần sửa mã nguồn quá nhiều.
Hibernate Một ứng dụng có thể chia thành 3 phần: giao diện người dùng (presentation layer), phần xử lý nghiệp vụ (business layer) và phần chứa dữ liệu (data layer). Cụ thể ra, business layer có thể được chia nhỏ thành 2 layer con là business logic layer và persistence layer: + Business logic layer: các tính toán logic nhằm thỏa mãn yêu cầu người dùng. + Persistence layer: chịu trách nhiệm giao tiếp với data layer; đảm nhiệm các nhiệm vụ mở kết nối, truy xuất và lưu trữ dữ liệu vào các hệ quản trị cơ sở dữ liệu. Hibernate là một thư viện ORM (Object Relational Mapping) mã nguồn mở giúp lập trình viên viết ứng dụng Java có thể ánh xạ các đối tượng với cơ sở dữ liệu quan hệ, không cần bận tâm đến persistence layer, do đó giúp đơn giản hóa việc lập trình.
Hibernate cho phép người lập trình thao tác với cơ sở dữ liệu một cách hoàn toàn tự nhiên thông qua các đối tượng (Java Persistence API - JPA) hoặc bằng ngôn ngữ SQL mở rộng của Hibernate (HQL) mà không cần quan tâm đến loại cơ sở dữ liệu quan hệ sử dụng (MySQL, SQL Server, PostgreSQL,…). Vì vậy khi ứng thay đổi cơ sở dữ liệu cũng sẽ giảm rủi ro các lỗi phát sinh và giảm khối lượng code phải sửa. Đồng thời Hibernate cung cấp hiệu suất nhanh do áp dụng kỹ thuật cache. Hibernate Search Hibernate Search là một thư viện trong framework Hibernate, được sử dụng để tìm kiếm dữ liệu trong các hệ thống quản lý cơ sở dữ liệu quan hệ.
Nó mang lại khả năng tìm kiếm toàn văn (full - text search) và tìm kiếm theo tiêu chí (criteria search) một cách dễ dàng và hiệu quả. Dưới đây là một số đặc điểm và tính năng chính của Hibernate Search: + Tìm kiếm toàn văn: Hibernate Search cho phép tìm kiếm dữ liệu theo nội dung văn bản, bằng cách sử dụng các truy vấn full-text search. Nó hỗ trợ các tính năng như tìm kiếm độ phù hợp (fuzzy search), tìm kiếm theo vị trí (geospatial search) và phân tích ngôn ngữ tự nhiên (natural language processing). + Tìm kiếm theo tiêu chí: Hibernate Search cho phép tìm kiếm dữ liệu dựa trên các tiêu chí cụ thể, giúp tìm kiếm theo các biểu thức điều kiện và thuộc tính của đối tượng.
22 + Tích hợp dễ dàng với Hibernate: Hibernate Search được tích hợp chặt chẽ với Hibernate ORM, cho phép sử dụng các annotation và API của Hibernate để thực hiện các thao tác tìm kiếm. + Hỗ trợ nhiều công cụ tìm kiếm: Hibernate Search hỗ trợ nhiều công cụ tìm kiếm phổ biến như Apache Lucene, Elasticsearch và Infinispan. Điều này cho phép lựa chọn công cụ tìm kiếm phù hợp với yêu cầu và môi trường của dự án. + Tối ưu hóa hiệu suất: Hibernate Search sử dụng các kỹ thuật tối ưu hóa để cải thiện hiệu suất tìm kiếm, bao gồm caching, prefetching và nén dữ liệu.
+ Hỗ trợ quản lý chỉ mục tự động: Hibernate Search tự động quản lý chỉ mục (index), bao gồm việc tạo và cập nhật chỉ mục khi có sự thay đổi dữ liệu. Spring Data MongoDB Spring Data MongoDB cung cấp sự kết hợp và sử dụng MongoDB từ dự án Spring. Tương tự Spring Data JPA, Spring Data MongoDB giúp việc lưu trữ và trích xuất dữ liệu từ cơ sở dữ liệu phi quan hệ (NoSQL) MongoDB một cách dễ dàng. Spring Security & JWT Spring Security là một module của Spring Framework đảm nhận việc bảo mật, xác thực và phân quyền trong các ứng dụng Spring.
Ứng dụng Spring, cụ thể là ứng dụng RESTful API web service sẽ xác thực người dùng và cung cấp JSON Web Tokens nếu xác thực thành công.