Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Spring JPA sử dụng Thông số kỹ thuật và Tiêu chí truy vấn trên các bảng chung

Bạn có thể bọc Specification của mình định nghĩa của s vào lớp trợ giúp:

public class DelegationSpecificationsHelper {

    public static Specification<Domain> notificationContactSpec(String contact) {
        return (root, query, cb) -> cb.equal(root.join("notification").get("contact"), contact);
    }

    public static Specification<Domain> idSpec(SearchCriteria searchCriteria) {
        switch (criteria.getOperation()) {
          case ":":
            if (root.get(criteria.getKey()).getJavaType() == String.class) {
              return builder.like(
                      root.<String>get(criteria.getKey()),
                      "%" + criteria.getValue() + "%");
            } else {
              return builder.equal(root.get(criteria.getKey()),
                      criteria.getValue());
            }
          case "=":
            return builder.equal(root.get(criteria.getKey()),
                    criteria.getValue());
          default:
            return null;
        }
    }
}

Và sau đó bạn có thể sử dụng nó như thế này:

Specifications<Domain> specifications = Specifications.where(DelegationSpecificationsHelper.idSpec(new SearchCriteria("id", "=", domainId))
                                                      .and(DelegationSpecificationsHelper.notificationContactSpec("someSearchString"));

Sau khi nhập tĩnh và tái cấu trúc một số:

SearchCriteria idCriteria = new SearchCriteria("id", "=", domainId)
Specifications<Domain> specifications = 
                 Specifications.where(idSpec(idCriteria)
                               .and(notificationContactSpec("someSearchString"));

Tất nhiên, bạn nên loại bỏ các giá trị được mã hóa cứng từ đây:cb.equal(root.join("notification").get("contact"), contact); và sử dụng một số đối tượng DTO hoặc mô hình meta JPA được tạo để thay thế.

Sau khi thêm siêu mô hình, nó có thể trông như thế này:

 public static Specification<Domain> notificationContactSpec(String contactValue) {
        return (root, query, cb) -> cb.equal(root.join(Domain_.notification).get(Notification_.contact), contactValue);
 }

Tìm hiểu thêm về cách tạo siêu mô hình: https:// docs. jboss.org/hibernate/orm/5.0/topical/html/metamodelgen/MetamodelGenerator.html




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chạy hai truy vấn cập nhật trong bộ lập lịch sự kiện mysql?

  2. Cách tạo bảng trong MySQL

  3. Xóa hàng triệu hàng trong MySQL

  4. PHP - MYSQL - máy chủ cơ sở dữ liệu thử nghiệm

  5. mysql trả về kết quả từ bản cập nhật