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

Chuỗi tìm kiếm JPA, Dài và Boolean

Bạn đã xem xét việc sử dụng Thông số kỹ thuật ?

Sử dụng thông số kỹ thuật, bạn có thể tạo động WHERE một phần của truy vấn dữ liệu mùa xuân. Để sử dụng thông số kỹ thuật với các truy vấn JPA dữ liệu mùa xuân, bạn sẽ phải mở rộng org.springframework.data.jpa.repository.JpaSpecificationExecutor giao diện. Vì vậy, kho lưu trữ người dùng của bạn có thể trông giống như sau:

public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
}

Phương pháp tìm kiếm của bạn có thể trông giống như thế này

public List<User> getAllFilterByString(String text) {

    if(StringUtils.isEmpty(text))
        return userRepository.findAll();

    Specification<User> specification =
            (root, query, cb) -> {
                List<Predicate> predicates = new ArrayList<>();
                predicates.add(cb.like(cb.lower(root.get("name")), "%"+text.toLowerCase()+"%"));

                //check if the text value can be casted to long.
                //if it is possible, then add the check to the query
                try {
                    long longValue = Long.valueOf(text);
                    predicates.add(cb.equal(root.get("id"), longValue));
                }
                catch (NumberFormatException e) {
                    //do nothing, the text is not long
                }

                //check if the text can be casted to boolean
                //if it is possible, then add the check to the query

                Boolean value = "true".equalsIgnoreCase(text) ? Boolean.TRUE :
                        "false".equalsIgnoreCase(text) ? Boolean.FALSE : null;

                if(value != null) {
                    predicates.add(cb.equal(root.get("isActive"), value));
                }

                return cb.or(predicates.toArray(new Predicate[] {}));
            };

    return userRepository.findAll(specification);

}

Đầu tiên, chúng ta bắt đầu bằng cách thêm name LIKE %text% một phần của biểu thức where.

Tiếp theo, chúng tôi kiểm tra xem giá trị của text biến có thể được chuyển thành long . Nếu có thể, thì chúng tôi lấy giá trị dài ra khỏi chuỗi và thêm nó vào truy vấn where.

Cuối cùng, chúng tôi kiểm tra xem text biến có thể được chuyển thành boolean. Nếu có thể, thì chúng tôi cũng thêm séc đó vào truy vấn.

Ví dụ:nếu giá trị của text biến là test1 phần sẽ ở đâu

WHERE name LIKE '%test1%;

Nếu giá trị của text biến là true thì phần sẽ ở đâu

WHERE name LIKE '%true%' OR is_active = true;

Cuối cùng, nếu giá trị của text biến là 12 thì phần sẽ ở đâu

WHERE name LIKE '%12%' OR id = 12;

Lưu ý: Tôi đã thêm cb.lower(root.get("name"))text.toLowerCase() phần khi chúng tôi tìm kiếm theo tên để làm cho cụm từ tìm kiếm không phân biệt chữ hoa chữ thường.




  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 các lệnh mysql từ thiết bị đầu cuối khi cài đặt MAMP?

  2. xóa liên kết không xóa bất kỳ bản ghi nào trong cơ sở dữ liệu mysql

  3. Sử dụng chuỗi con trong tiêu chí MySQL

  4. javax.naming.NoInitialContextException với mysql DataSource

  5. Lỗi SQL 1630:Hàm SUBSTRING không tồn tại .. huh?