post-image

Spring Data web support

7. Spring Data Repository

Spring Data web support là khả năng của Spring Data hỗ trợ các thao tác cho tầng web. Cụ thể hơn, Spring Data Web giúp tự động hoá việc chuyển đổi từ dữ liệu của request sang thành các đối tượng khác. Để kích hoạt Spring Data web support, có thể sử dụng annotation.

@EnableSpringDataWebSupport:

@Configuration
@EnableWebMvc
@EnableSpringDataWebSupport
class WebConfiguration {}

Các module của Spring Data hỗ trợ các component:

  • DomainClassConverter: Cho phép Spring MVC ánh xạ các tham số của request sang thành các đối tượng entity
  • HandlerMethodArgumentResolver cho phép ánh xạ các tham số của request sang các đối tượng Pageable và Sort

DomainClassConverter

Ví dụ 1, DomainClassConverter giúp ánh xạ các tham số request sang thành đối tượng user:

@Controller
@RequestMapping("/users")
class UserController {

  @RequestMapping("/{id}")
  String showUserForm(@PathVariable("id") User user, Model model) {

    model.addAttribute("user", user);
    return "userForm";
  }
}

Ở đoạn mã trên, Spring Data Web Support giúp tự động lấy về id của User và trả về một đối tượng User tương ứng với id đó. Chúng ta không cần phải thực hiện thao tác lấy về đối tượng User thủ công từ CSDL. Spring Data Web Support thực hiện điều này bằng cách tự động gọi phương thức findById(…) đã được định nghĩa trong repository tương ứng.

HandlerMethodArgumentResolver

Ví dụ 2, HandlerMethodArgumentResolver cho phép tự động ánh xạ thành đối tượng pageable:

@Controller
@RequestMapping("/users")
class UserController {

  private final UserRepository repository;

  UserController(UserRepository repository) {
    this.repository = repository;
  }

  @RequestMapping
  String showUsers(Model model, Pageable pageable) {

    model.addAttribute("users", repository.findAll(pageable));
    return "users";
  }
}

Các tham số được ánh xạ tới đối tượng pageable bao gồm: page, size và sort.

  • page: số trang hiện tại. Mặc định là 0.
  • size: số phần tử trong một trang. Mặc định là 20.
  • sort: trật tự của các phần tử. Mặc định là tăng dần (ascending). Các giá trị của sort có thể là asc hoặc desc.

Như vậy, với đoạn mã trên, chúng ta có thể truy cập vào đường dẫn là:

/users?page=2&size=30&sort=lastname,asc

Leave a Reply

Your email address will not be published.