Audit-module-4 – coin card – Trình bày cách Spring MVC xư뀉 l礃Ā request Request từ người dùng tới ứng – StuDocu

  1. Trình bày
    cách Spring
    MVC xư뀉 l礃Ā
    request

  2. Request từ người dùng tới ứng dụng web của chúng
    ta, DispatcherServlet sẽ là đối tượng nhận request.

  3. Tìm và điều hướng request tới handler phù hợp, ở đây là các Controllers
    trong ứng dụng web của chúng ta.

  4. Xư뀉 l礃Ā request

  5. Chuẩn bị model và chọn view hiển thị.

  6. Trả về kết quả xư뀉 l礃Ā request cho DispatcherServlet.

  7. DispatcherServlet sẽ gọi View Template phù hợp để xư뀉 l礃Ā việc hiển thị
    trên giao diện bằng cách sư뀉 dụng model.

  8. View template trả kết quả về cho DispatcherServlet.

  9. Trả response về cho người dùng.

2 .Trình bày cơ chế
Dependency
Injection trong
Spring

Dependency Injection là cơ chế tiêm sự phụ thuộc để giảm sự phụ thuộc.
Cơ chế:
Khi chương trình chạy thì IoC container sẽ thực hiện scan các pagkage để tìm
các class được đánh dấu là bean dưới dạng annotation như @Repository,
@Controller, @Service…. Khi có một bean phụ thuộc vào bean khác, thì IoC sẽ
tìm trong container, nếu chưa có thì tạo, nếu đã có thì lấy ra và tiêm vào bean cần
dùng.
3. Có bao nhiêu
cách để thực hiện
Dependency
Injection? Trình
bày?

Có 3 cách để thực hiện Dependency Injection.
1. Sư뀉 dụng annotation @Autowired: Ta dùng annotation @Autowired để báo
cho Spring biết tự động tìm và tiêm bean phù hợp vào vị trí đặt
annotation. Trường hợp có 2 class cùng implement 1 interface thì khi
muốn tiêm 1 trong 2 class đó chúng ta phải đặt tên cho
@Component(“name”) đó và dùng annotation @Qualifier (“name”) hoặc
dùng @Primary đánh dấu lên một bean. Khi đó bean này sẽ được ưu tiên
chọn trước.
2. Inject qua constructor: Code inject theo kiểu constructor-based nên dùng
khi các module là bắt buộc. Khi đó Spring Boot khi tạo bean (cũng chỉ là
tạo object, gọi constructor thôi) thì sẽ đưa các phụ thuộc vào constructor
khi gọi.
3. Inject qua setter: Cách dùng setter để inject thường dùng trong trường hợp
phụ thuộc vòng, module A phụ thuộc vào B và ngược lại. Do đó, nếu cả
hai đều sư뀉 dụng constructor based injection thì Spring Boot sẽ không biết
nên tạo bean nào trước.
4. Framework là
gì?
Framework

Library là một tập hợp các functions, class được viết sẵn để có thể tái sư뀉 dụng.
Mỗi function hay class sẽ thực hiện cho một công việc cụ thể nào đó.
Ví dụ như JQuery là một library, nó cung cấp các function giúp chúng ta thao tác

khác Library
chỗ nào?

với DOM.
Framework là một tập hợp các library đã được đóng gói để hỗ trợ phát triển ứng
dụng dựa trên framework đó. Đồng thời, Framework cung cấp các nguyên tắc,
cấu trúc của ứng dụng mà chúng ta phải tuân thủ theo nó.
Khác nhau:

  • Framework và Library đều cung cấp các tính năng (functions) được viết sẵn để
    chúng ta có thể tái sư뀉 dụng.
  • Framework lớn hơn và phức tạp hơn Library.
  • Sư뀉 dụng Framework bạn phải thay đổi cấu trúc code của dự án (project’s
    structure) theo các quy tắc của framework đó để có thể sư뀉 dụng được các
    functions mà framework đó cung cấp.
  • Chúng ta có thể sư뀉 dụng các functions của Library một cách trực tiếp mà
    không cần thay đổi cấu trúc code của dự án.
  • Framework có thể hiểu là một khung chương trình, người dùng bổ sung code
    và tuân theo quy tắc để tạo ra ứng dụng. Còn Library chỉ cung cấp các chức năng
    tiện ích hay các class để sư뀉 dụng trong quá trình xây dựng ứng dụng.
  • Framework hoạt động chủ động. Nghĩa là nó có thể đưa ra các quyết định gọi
    hoặc bị gọi bởi các Library hay ứng dụng nào đó.
  • Library hoạt động bị động. Nghĩa là nó chỉ được gọi khi nào chúng ta cần dùng
    nó.
  1. Spring
    Framework là
    gì?

Spring Framework là một trong những khung ứng dụng dựa trên Java phổ biến
nhất. Spring Framework là một khung mã nguồn mở có thể được sư뀉 dụng để phát
triển các ứng dụng Java một cách dễ dàng và với tốc độ nhanh chóng. Nó là một
khung công tác nhẹ cũng cung cấp hỗ trợ cơ sở hạ tầng được xác định rõ ràng để
phát triển các ứng dụng trong Java. Nói cách khác, bạn có thể nói rằng Spring xư뀉
l礃Ā cơ sở hạ tầng để bạn có thể tập trung hơn vào việc phát triển ứng dụng của
mình.
6. Lợi ích của
Spring
Framework?

1) Đảo ngược kiểm soát (IoC)
Spring cung cấp tính năng chèn phụ thuộc hoặc Inversion of control trong đó lập
trình viên không cần tạo đối tượng thay vào đó họ chỉ cần mô tả rằng nó sẽ được
tạo như thế nào? Hơn nữa, các nhà phát triển hoặc lập trình viên không cần phải
kết nối trực tiếp các thành phần ứng dụng và dịch vụ của chương trình với nhau.
Ở đây, người lập trình chỉ phải mô tả rằng thành phần nào sẽ sư뀉 dụng dịch vụ nào
trong tệp XML. Tất cả các thành phần chỉ bị ràng buộc bởi khung công tác
Spring.
2) Trọng lượng nhẹ
Nếu chúng ta nói về độ trong suốt và kích thước thì Spring là một framework
nhẹ. Khung cơ bản Spring chỉ có kích thước khoảng 1MB và chi phí xư뀉 l礃Ā của
Spring không quá nhiều.
3) Định hướng theo khía cạnh
Lập trình hướng khía cạnh cũng được hỗ trợ bởi Spring. Trong mô hình lập trình
hướng theo khía cạnh, các chức năng phụ hoặc chức năng hỗ trợ được tách biệt
khỏi logic nghiệp vụ chính của chương trình chính. Mối quan tâm cắt ngang có
thể được tách biệt trong công nghệ AOP mà khó có thể làm được trong lập trình
hướng đối tượng. Trong AOP, mô-đun ứng dụng được tăng lên và việc bảo trì nó
trở nên khá dễ dàng hơn.
4) MVC Framework

thuộc tính …)

8 là gì?
Spring Beans chính là những Java Object mà từ đó tạo nên khung sườn của một
Spring applicationúng được cài đặt, lắp ráp và quản l礃Ā bởi Spring IoC
container. Những bean này được tạo ra bởi configuration metadata được cung
cấp từ container, ví dụ, trong tag nằm trong file XML.

Các bean được define trong spring framework là singleton bean. Có một thuộc
trính trong bean với tên là “singleton” nếu được gán giá trị là true thì bean đó sẽ
trở thành singleton, nếu là false thì bean đó sẽ trở thành prototype bean. Mặc
định nếu không được định nghĩa giá trị của nó sẽ là true. Vì thế tất cả các bean
trong spring framework mặc định sẽ là singleton bean.

  1. Trong Spring có
    bao nhiêu Bean
    Scope?

Có 5 scope được định nghĩa cho Spring Bean:

Singleton: Chỉ duy nhất một thể hiện của bean sẽ được tạo cho mỗi
container. Đây là scope mặc định cho spring bean. Khi sư뀉 dụng scope này
cần chắc chắn rằng các bean không có các biến/thuộc tính được share.
Prototype: Một thể hiện của bean sẽ được tạo cho mỗi lần được yêu
cầu(request)
Request: giống với prototype scope, tuy nhiên nó dùng cho ứng dụng
web, một thể hiện của bean sẽ được tạo cho mỗi HTTP request.
Session: Mỗi thể hiện của bean sẽ được tạo cho mỗi HTTP Session
Global-Session: Được sư뀉 dụng để tạo global sesion bean cho các ứng
dụng Portlet.

10.@Autowire là gì? @Autowired đánh dấu cho Spring biết rằng sẽ tự động inject bean tương ứng vào
vị trí được đánh dấu.
11.@Component có
礃Ā nghĩa gì?

@Component là một Annotation (chú thích) đánh dấu trên các Class để giúp
Spring biết nó là một Bean.
12ình bày 礃Ā nghĩa
của Controller

Trong mô hình MVC, controller là nơi nhận request từ người dùng, xư뀉 l礃Ā request,
xây dựng dữ liệu cho view (model) và chọn view để trả lại kết quả của cho người
dùng.
13ình bày 礃Ā nghĩa
của ModelAndView
Class

Là sự kết hợp của 2 khía cạnh truyền dữ liệu và view.

14ình bày 礃Ā nghĩa
của ModelMap

Class ModelMap là lớp con của LinkedHashMap được sư뀉 dụng trong việc xây
dựng data model bằng sư뀉 dụng kiểu dữ liệu cặp gồm key và value. ModelMap sư뀉
dụng phương thức addAttribute() để tạo liên kết giữa model và tên logic trong
model. Thuộc tính đặt trong ModelMap có thể sư뀉 dụng để hiển thị dữ liệu dạng
form trong sự kiện submit form.
15ình bày 礃Ā nghĩa
của ViewResolver

bước cuối cùng của việc xư뀉 l礃Ā request, DispatcherServlet sẽ chọn View Template
và truyền Model data để View Template có thể xư뀉 l礃Ā, render giao diện và trả về

Interface lại cho DispatcherServlet. View Template sẽ là những đối tượng hiện thực
interface ViewResolver và chúng sẽ quyết định việc render giao diện sẽ xảy ra
như thế nào dựa trên tên view mà chúng ta trả về trong controller. Spring MVC
có nhiều đối tượng hiện thực interface ViewResolver, một trong số đó chúng ta
có InternalResourceViewResolver.
16ân biệt POST
với PUT thường sư뀉
dụng để làm gì?

POST để tạo dữ liệu còn PUT thì để cập nhật lại dữ liệu.
PUT là phương thức bảo toàn dữ liệu nên khi chúng ta ấn submit bao nhiêu lần đi
chăng nữa thì dữ liệu cũng chỉ tính như chúng ta submit 1 lần. Còn đối với POST
thì chúng ta submit quá nhiều lần thì có thể nó sẽ cho ra những kết quả khác
nhau.
17.@RequestMappi
ng làm gì?

@RequestMapping là một trong những annotation phổ biến nhất được sư뀉 dụng
trong các ứng dụng Web Spring. Annotation này ánh xạ các HTTP request tới các
phương thức xư뀉 l礃Ā của MVC và REST controller.
18ộc tính
consumes trong các
Request Mapping là
gì?

Để quy định định dạng dữ liệu mà một request có thể process khi người dùng
request tới, ví dụ như định dạng dữ liệu JSON, chúng ta có thể sư뀉 dụng
annotation @RequestMapping với thuộc tính consumes trong Spring MVC.
Đọc thêm: huongdanjava/vi/su-dung-annotation-requestmapping-voi-
thuoc-tinh-consumes-trong-spring-mvc
19. Thuộc tính
produces trong các
Request Mapping là
gì?

Để quy định định dạng dữ liệu sẽ trả về cho người dùng khi họ request một URL
nào đó, trong Spring MVC chúng ta có thể sư뀉 dụng annotation
@RequestMapping với thuộc tính produces.
Đọc them: huongdanjava/vi/su-dung-annotation-requestmapping-voi-
thuoc-tinh-produces-trong-spring-mvc
20. Trình bày cơ chế
Data Binding trong
Spring

Data Binding là cơ chế liên kết dữ liệu đầu vào hoặc đầu ra với các đối tượng
model. Hay nói cách khác đó là sự kết nối dữ liệu của bean đặt trong model đến
các điều khiển trên form.
Data Binding giúp cho việc tương tác với dữ liệu trở nên dễ dàng. Sư뀉 dụng Data
binding, các form đều được liên kết với một đối tượng biểu diễn dữ liệu ở phía
sau (dữ liệu của bean đặt trong model). Khi tương tác với form, dữ liệu trên form
sẽ được tự động chuyển đổi thành các thuộc tính của đối tượng liên kết với nó.
Khi thay đổi dữ liệu của đối tượng thì dữ liệu trên các điều khiển cũng thay đổi
theo.
Một cách hiểu khác là ràng buộc dữ liệu có thể là một chiều hoặc hai chiều
Chiều đi: Chuyển dữ liệu từ các điều khiển trên form vào các thuộc tính
của đối tượng dữ liệu (bean)
Chiều về: Hiển thị dữ liệu từ của các thuộc tính của đối tượng lên các điều
khiển của form

So sánh
RequestParam và
PathVariable?

 @RequestParam được sư뀉 dụng để truy cập (lấy) giá trị của parameters
trên URL(kiểu query string)
 @PathVariable được sư뀉 dụng để lấy giá trị trên URI theo template (còn
gọi là URI template).

server.

  1. Phân biệt
    Session & Cookie

Cookie Session
Cookie
được lưu trữ trên trình duyệt
của người dùng

Session không được lưu trữ trong
trình duyệt người dùng
Dữ liệu Cookie được lưu trữ ở phía
máy khách

Dữ liệu Session được lưu trữ ở phía
máy chủ
Dữ liệu Cookie dễ dàng sư뀉a đổi khi
chúng được lưu trữ ở phía khách hàng

Dữ liệu Session không dễ dàng sư뀉a
đổi vì chúng được lưu trữ ở phía máy
chủ
Dữ liệu Cookie có sẵn trong trình
duyệt của chúng ta đến khi hết hạn

Dữ liệu Session có sẵn cho trình duyệt
chạy. Sau khi đóng trình duyệt sẽ mất
thông tin Session
Lưu
礃Ā: Khi truy cập trang web, Server sẽ tạo ngẫu nhiên 1 ID định danh cho
phiên hoạt động của người dùng và đồng thời máy của người dùng cũng tự sinh
1 Cookie để lưu trữ giá trị Session ID đó. Việc này giúp server quản l礃Ā được
các request gư뀉i lên để có thể trả response về đúng client đã request
46. Session là gì?
Cho ví dụ về
Session?

  • Sesion là một phiên làm việc được dùng trong lập trình web và có thể kết nối
    database
    VD: Thực hiện chức năng đăng nhập, đăng xuất
  1. Cách triển khai
    Session

B1: Sư뀉 dụng @SessionAttributes để khai báo Session
B2: Sư뀉 dụng @ModelAttribute bên ngoài handle method để khởi tạo Session
B3: Sư뀉 dụng @ModelAttribute trong tham số của handle method của Controller
tạo ra nó để tương tác với Session
B4: Sư뀉 dụng @SessionAttribute trong tham số của handle method của Controller
không tạo ra Session đó để tương tác với Session.
48. Web Service là
gì? Lấy ví dụ về
web service

  • Web service là tập hợp các giao thức và tiêu chuẩn mở được sư뀉 dụng để trao đổi
    dữ liệu giữa các ứng dụng hoặc giữa các hệ thống. Tóm gọn:
  • Là phương thức giao tiếp giữa hai thiết bị qua mạng
  • Là ứng dụng hoặc thành phần ứng dụng để giao tiếp
  • Là tập hợp các tiêu chuẩn hoặc giao thức để trao đổi thông tin giữa 2 thiết bị
    hoặc ứng dụng
  • Các ứng dụng phần mềm được viết bằng các ngôn ngữ lập trình khác nhau và
    chạy trên nhiều nền tảng khác nhau, có thể sư뀉 dụng web service để trao đổi dữ
    liệu qua mạng máy tính
  • Web service hoạt động một cách độc lập không phụ thuộc bất kì ngôn ngữ nào.
    Các ứng dụng java, .net hoặc PHP… có thể giao tiếp với các ứng dụng khác
    thông qua web service
    VD: Chúng ta ứng dụng có FE phát triển từ Angular thực hiện việc tiếp nhận
    request. Sau đó gởi dữ liệu về Web service, web service sẽ gởi request về BE

được viểt bằng Spring. BE xư뀉 l礃Ā request và response về cho web service, web
service gởi lại response về FE và FE xư뀉 l礃Ā dữ liệu và trả về dữ liệu mà người
dùng có thể hiểu được.

  1. Phân biệt Web
    Service và Web
    truyền thống

Website Web service

  • Có giao diện – Không có giao diện

  • Được sư뀉 dụng bởi con người – Được sư뀉 dụng bởi các ứng dụng khác

  • Website hoạt động đa nền tảng vì
    chúng cần tinh chỉnh để phù hợp các
    trình duyệt hay hệ điều hanh khác
    nhau

  • Web service độc lập về nền tảng, sư뀉
    dụng giao thức chuẩn để giao tiếp

  • Website được truy cập thong các
    thành phần của giao diện như button,
    form

  • Truy cập thông qua các phương thức
    HTTP: get, post, put, delete, patch

  • Website là ứng dụng đầu cuối, người
    dùng truy cập website qua URL, qua
    đó nhận được những dữ liệu như text,
    hình ảnh, âm thanh có thể dễ dàng
    hiểu được

  • Là 1 khái niệm rộng hơn, dữ liệu trả
    về từ web service, người dùng khó có
    thể hiểu được. Dữ liệu đó được các
    ứng dụng khác sư뀉 dụng và chế biến
    thành các dữ liệu mà người dùng có
    thể đọc được

  1. SOAP là gì?
    RESTful là gì?

SOAP REST

  • SOAP (Simple Object Access
    Protocol – Giao thức truy cập đối
    tượng đơn giản) là giao thức nhắn tin
    cho phép các chương trình chạy trên
    các hệ điều hành khác nhau (như
    Window hay Linus) giao tiếp được với
    nhau thông qua giao thức HTTP và
    ngôn ngữ XML

  • REST (Representational State
    Transfer) là một kiểu kiến trúc không
    phải là một giao thức. Cho phép định
    dạng nhiều kiểu dữ liệu khác nhau
    như: Plain Text, HTML, XML và
    JSON

  • Ưu điểm:

  • SOAP định nghĩa bảo mật riêng
    cho nó được gọi là WS Security
  • Có thể được viết bằng bất kỳ ngôn
    ngữ lập trình nào và được thực thi
    trong bất kỳ nền tảng nào
  • Ưu điểm:
  • Nhanh: RESTful nhanh hơn vì
    không đặc tả nghiêm ngặt như SOAP.
    Chiếm ít băng thông và tài nguyên
    hơn
  • Có thể được viết bằng bất kỳ ngôn
    ngữ lập trình nào và được thực thi
    trong bất kỳ nền tảng nào
  • Nhược điểm:
  • Chậm: SOAP sư뀉 dụng định dạng
    XML phải được phân tích cú pháp.
    Các ứng dụng SOAP phải tuân theo
    nhiều tiêu chuẩn. Vì vậy nó chậm và
    chiếm nhiều băng thông và tài nguyên
  1. CORS là gì – CORS (Cross-origin Resource Sharing) là một cơ chế cho phép nhiều tài nguyên
    khác nhau (fonts, JS, …) của một trang web có thể được truy vấn từ domain khác
    với domain của trang đó.
  2. Spring Boot là
    gì?
  • Spring Boot là 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 các ứng dụng độc lập dựa trên Spring.
  1. Sự khác nhau
    giữa SpringBoot và
    SpringMVC là gì?

Spring MVC Spring Boot

  • Spring MVC là một khung MVC
    hoàn chỉnh theo định hướng HTTP
    được quản l礃Ā bởi Spring Framework
    và dựa trên Servlets. Nó sẽ tương
    đương với JSF trong ngăn xếp
    JavaEE. Các yếu tố phổ biến nhất
    trong đó là các lớp được chú thích
    bằng @Controller, nơi bạn có thể triển
    khai các phương thức bạn có thể truy
    cập bằng các yêu cầu HTTP khác
    nhau. Nó có @RestController tương
    đương để triển khai các API dựa trẻn
    REST

  • Spring Boot là tiện ích giúp thiết lập
    ứng dụng nhanh chóng, cung cấp cấu
    hình ngoài hộp để xây dựng các ứng
    dụng hỗ trợ Spring. Spring tích hợp
    một loạt các module khác nhau trong ô
    của nó như: spring-core, spring-data,
    spring-web (bao gồm Spring MVC)…
    với công cụ này, bạn có thể cho Spring
    biết bao nhiêu trong số chúng sẽ sư뀉
    dụng và bạn sẽ có được thiết lập
    nhanh cho chúng

  • Spring MVC là một khung được sư뀉
    dụng trong các ứng dụng web

  • Spring Boot là trình khởi tạo dự án
    dựa Spring sản xuất sẵn sàng

  1. Cấu hình cho
    Spring Boot. Tìm
    kiếm các Bean ở
    nhiều package khác
    nhau bằng cách nào?
  • Đối với các ứng dụng Spring Boot, @SpringBootApplication là sự kết hợp của
    3 annotation khác là :
  • @Configuration
  • @EnableAutoConfiguration
  • @ComponentScan
    Spring Boot sẽ quét tất cả các class ở cùng package với main class và tất cả các
    sub-package của nó để tìm và khởi tạo các bean tương ứng đã được định nghĩa
  • Và đối với Class ở khác package thì cần chỉ định đây là nơi cần tạo bean bằng
    @ComponentScan để Spring nhận vào danh sách package sẽ quét để khởi tạo
    bean
  1. Trình bày Spring
    Security?
    @EnableWebSecurit
    y làm gì?
  • Spring Security là một loạt các bộ lọc servlet giúp thêm các authentication và
    authorization vào ứng dụng web
  • Thêm @EnableWebSecurity vào lớp @Configuration để xác định cấu hình
    Spring Security trong bất kỳ WebSecurityConfigurer nào hoặc nhiều khả năng
    hơn bằng cách mở rộng lớp cơ sở WebSecurityConfigurerAdapter và ghi đè từng
    phương thức riêng lẻ
  1. Trình bày Spring
    Boot JPA? Cài đặt?
  • Spring Boot JPA giúp sư뀉 dụng JPA trong Spring một cách dễ dàng hơn
  • Có thể sư뀉 dụng với các framework hibernate, OpenJPA, EclipseLink
  • Cải tiến JPA tiêu chuẩn, đơn giản hóa tầng truy xuất, tự tạo repository, tự tạo ra
    các truy vấn thông qua hàm ghi log, phân trang

23 Sử dụng lặp trong Thymeleaf như thế nào? Sử dụng điều kiện trong Thymeleaf như thế nào?

– th:each = “object, iterStat : S{array}”

Đối tượng iterStat cung cấp các trạng thái:

 Index: chỉ số hiện tại, bắt đầu từ 0

 Count: chỉ số, bắt đầu từ 1

 Size: tổng số phần tử

 Current: even, odd, first, last

24 Formatter là gì? Converter là gì?

  • Formatter và converter đều là 2 thành phần hỗ trợ chuyển đổi dữ liệu nhập vào sang kiểu dữ liệu thích
    hợp.

  • Kiểu dữ liệu nguồn của formatter là String, trong khi đó converter có thể làm việc với bất kỳ kiểu dữ liệu
    nguồn nào.

  • Formatter phù hợp hơn với tầng web (web-tier), còn converter thì có thể sử dụng ở bất cứ tầng nào.

  • Trong trường hợp muốn chuyển đổi dữ liệu nhập vào từ một trường input trong form trong một ứng dụng
    Spring MVC, chúng ta nên lựa chọn formatter hơn là converter.

25 ORM là gì?

ORM ( O bject R elational M apping), là một kỹ thuật/cơ chế lập trình thực hiện ánh xạ CSDL sang các đối tượng
trong các ngôn ngữ lập trình hướng đối tượng như Java, C# …(các table tương ứng các class, mối ràng buộc
giữa các table tương ứng quan hệ giữa các class ‘has a’ , ‘is a’).
Việc sử dụng ORM cho phép lập trình viên thao tác với database 1 cách hoàn toàn tự nhiên, dễ hiểu thông qua
các đối tượng. Lập trình viên không cần tới loại database, kiểu dữ liệu trong database…
– ƯU ĐIỂM ORM:

 OOP: ORM giúp lập trình viên tập trung vào lập trình hướng đối tượng
 Tính độc lập: Làm việc được với nhiều loại database(hệ quản trị cơ sở dữ liệu), nhiều kiểu dữ liệu khác nhau. Dễ
dàng thay đổi loại database hơn. Các câu lệnh SQL không phụ thuộc vào loại database.
 Đơn giản, dễ sử dụng: Hỗ trợ HSQL, cung cấp nhiều nhiều API truy vấn.
 Năng suất hơn: viết code ít hơn, dễ hiểu hơn. Phù hợp các case CRUD (Create, Read, Update, Delete)
 Khả năng sử dụng lại code.
– NHƯỢC ĐIỂM:
 Khả năng truy vấn bị hạn chế, nhiều trường hợp ta vẫn phải dùng native SQL để truy vấn database.
 Khó tối ưu câu lệnh SQL (do câu lệnh SQL được ORM tự động sinh ra).

29 Entity là gì?

  • Trong JPA – Hibernate, một entity là một Java class tương ứng với một table trong database, mỗi entity object
    tương ứng với một dòng trong bảng. JPA yêu cầu một entity class phải cung cấp đầy đủ các metadata để ánh xạ
    giữa entity class và table như tên cột, kiểu dữ liệu, khoá chính, khoá ngoại, etc.

30 Persistence Context & Entity Manager là gì?

PERSISTENCE CONTEXT

  • Ngoài việc map đối tượng Java đến bản ghi trong CSDL (tức là ORM), thì có một vấn đề mà Hibernate phải care
    đến đó là quản lý các Entity. Cái ý niệm về “persistence context” chính là giải pháp để giúp Hibernate làm được
    việc này. Persistence context có thể coi là một “môi trường” chứa toàn bộ các đối tượng mà ta tạo ra và lưu
    vào csdl trong mỗi session.
  • Một Session, hay là 1 phiên, là một giao dịch, có phạm vi tùy vào từng ứng dụng. Khi ta làm việc với DB thông
    qua một Persistence Context, mọi thực-thể sẽ gắn vào context này, mỗi bản ghi trong DB mà ta tương tác sẽ
    tương ứng với 1 thực thể trong context này.
  • Trong Hibernate, PersistenceContext được tạo ra nhờ org.hibernate. Với JPA, PersistenceContext
    được thể hiện thông qua class javax.persistence. JPA là bộ đặc tả cho việc lưu dữ liệu vào DB
    dành cho ngôn ngữ Java, Hibernate sau này đã tuân theo bộ đặc tả đó. Khi đó nếu dùng combo JPA-Hibernate,
    thì Persistence Context được tạo ra bởi EntityManager interface, thực tế sẽ là một lớp bọc lấy cái Session object
    ở phía dưới. Nếu ta xài thẳng Session (ko xài EntityManager) thì sẽ có nhiều phương thức cho ta xài hơn, tiện
    dụng hơn.

ENTITY MANAGER:

  • EntityManager là một giao diện (interface) cung cấp các API cho việc tương tác với các Entity như Persist (lưu
    một đối tượng mới), merge (cập nhật một đối tượng), remove (xóa 1 đối tượng).

31 Câu lệnh truy vấn động là gì? Câu lệnh truy vấn tĩnh là gì?

Câu lệnh truy vấn động

EntityManager cung cấp phương thức createQuery() để tạo các câu lệnh truy vấn động. Ví dụ:

@Override
public List<Product> findAll() {
TypedQuery<Product> query = em(“select p from Product p”, Product);
return query();
}

Câu lệnh truy vấn tĩnh

Trong các lớp entity, chúng ta có thể định nghĩa sẵn các câu lệnh truy vấn. Ví dụ, đoạn mã sau đây định nghĩa một câu

lệnh truy vấn có tên là findAllProductWithName để tìm các sản phẩm có tên mong muốn.

@Entity
@Table(name = “products”)
@NamedQuery(name=”findAllProductWithName”,
query=”SELECT c FROM Product c WHERE c LIKE :name”)
public class Product {

@Id
@GeneratedValue(strategy = GenerationType)
private Long id;

@Column
private String name;

@Column
private float price;
}

Sau đó, chúng ta sử dụng phương thức createNamedQuery của EntityManager để tạo câu truy vấn. Ví dụ:

@PersistenceContext
private EntityManager em;

@Override
public List<Product> findByName(String name) {
Query query = em(“findAllProductWithName”, Product);
query(“name”, name);
return query();
}

32 Trạng thái của Entity bao gồm những gì?

Một đối tượng trong Hibernate có 1 trong 4 trạng thái:

Transient (Tạm thời): Đối tượng không có quan hệ với Session hiện tại của Hibernate. Đối tượng ở trạng thái này
chưa từng gắn vào context, nó không có bản ghi tương ứng trong CSDL

Persistent (Bền vững): Đối tượng đang liên hệ với một context, tức là với một đối tượng Session và trạng thái của
nó được đồng bộ với cơ sở dữ liệu khi mà ta commit cái Session.

Detached (Đã bị tách riêng ra): Đối tượng đã từng có trạng thái persistent nhưng hiện tại đã không còn giữ quan hệ
với Session. Nếu nó không được attached trở lại, nó sẽ bị bộ gom rác của Java quét đi theo cơ chế thông thường.
Một đối tượng đang trong session muốn đạt đươc trạng thái này thì có những cách là gọi hàm evict(), close
Session hoặc làm combo thao tác: serialize/deserialize.

Removed (Đã bị xóa): tương tự như detached nhưng bản ghi tương ứng với đối tượng này trước đó đã bị xóa khỏi
database.

  • Component mapping

34 Để sử dụng interface JpaRepository cần cung cấp những thông tin nào?

  • Cần khai báo kiểu dữ liệu trong Repository triển khai JpaRepository, ví dụ public interface
    ICustomerRepository extends JpaRepository<Customer, Integer>

  •  Customer: đối tượng cần kết nối database
     Integer: kiểu dữ liệu của Id (khóa chính) trong entity customer
    35 Validation dữ liệu là gì?

  • Validation là hành động kiểm tra tính hợp lệ của dữ liệu. Việc này giúp cho hệ thống hoạt động an toàn, đảm
    bảo, tránh xử lý dữ liệu lỗi,… và cũng giúp ngăn chặn một số cuộc tấn công phổ biến như SQL injection hoặc
    XSS.

  • Ví dụ khi nhập dữ liệu vào form đăng kí, cần thực hiện validate dữ liệu form để đảm bảo:

 Trường username không được trống
 Password phải đủ độ khó
 Email phải đúng định dạng email
 …

36 Trình bày cách triển khai validate dữ liệu trong Spring – có 2 cách:

    1. Validate bằng các annotation:

 @NotNull – kiểm tra giá trị null
 @AssertTrue – kiểm tra giá trị thuộc tính là true
 @Size – kiểm tra độ dài min and max
 @Min – kiểm tra giá trị nhỏ nhất
 @Max – Kiểm tra giá trị lớn nhất
 @Email – kiểm tra email có hợp lệ
 @NotEmpty – kiểm tra không được trống và empty
 @NotBlank – kiểm tra giá trị không được null hoặc khoảng trắng
 @Positive and @PositiveOrZero – kiểm tra chỉ được phép là số nguyên dương từ 0 trở đi
 @Negative and @NegativeOrZero – kiểm tra số âm
 @Past and @PastOrPresent – kiểm tra ngày từ quá khứ đến hiện tại.
 @Future and @FutureOrPresent – kiểm tra ngày từ hiện tại đến tương lai

    1. Implements interface Validator. Interface này có 2 phương thức là public boolean supportspublic void
      validate, chúng ta sẽ triển khai thực hiện validate các trường của class trong phương thức public void validate.

37 Binding Result là gì?

  • [BindingResult] là đối tượng của Spring, nơi giữ kết quả xác thực và ràng buộc và chứa các lỗi có thể xảy
    ra. BindingResult phải đến ngay sau khi đối tượng mô hình được xác thực nếu không Spring sẽ không xác thực
    đối tượng và ném ngoại lệ.

38 AOP là gì? AOP gồm những yếu tố nào?
– AOP (Aspect Oriented Programming) là kỹ thuật lập trình hướng khía cạnh, phân tách chương trình thành các
module riêng rẽ, phân biệt và không phụ thuộc lẫn nhau.

  • AOP không thể thay thế cho OOP mà chỉ hỗ trợ phân tách chương trình thành các module nhỏ để dễ quản lý.

  • AOP gồm những yếu tố:

 Core concerns: hàm chính của chương trình (các method cần thực hiện log)
 Crosscutting concerns: những chức năng khác của chương trình: (chức năng log)
 Join points: một điểm của chương trình, là nơi có thể chèn những “custom action” của bạn
 Pointcut: có nhiều cách để xác định joinpoint, những cách như thế được gọi là pointcut.
 Advice: là những xử lý phụ được thêm vào xử lý chính, code để thực hiện các xử lý đó được gọi Adivce.

39 Các loại Advice?

  • Trong Spring AOP, có 4 loại advice được hỗ trợ:
     Before advice : chạy trước khi method được thực thi.
     After returning advice : Chạy sau khi method trả về một kết quả
     After throwing adivce: Chạy khi method ném ra một exception.
     Around advice : Chạy khi method được thực thi (Bao gồm cả 3 loại advice trên)

40 JoinPoint là gì?

41 Nêu cách triển khai AOP mà bạn dùng trong dự án

  • Chia nhỏ chương trình thành nhiều module riêng rẽ, hoạt động độc lập và không phụ thuộc nhau

  • Khi hoạt động, chương trình sẽ kết hợp các module lại để thực hiện các chức năng nhưng khi sửa đổi 1 chức năng thì
    chỉ cần sửa 1 module.

@Aspect
@Configuration
public class TestServiceAspect {
private Logger logger = LoggerFactory(TestServiceAspect);

@Before(“execution(* com.ldt.demospringaop..(..))”)
public void before(JoinPoint joinPoint){
logger(” before called ” + joinPoint());
}
– }

  • @Before(“execution(* com.ldt.demospringaop.dao.TestDAO(..))”)
  • public void before(JoinPoint joinPoint){