[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-chto-takoe-query-methods-v-spring-data":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},633,"chto-takoe-query-methods-v-spring-data",14,"spring","Spring","🌱","Что такое query methods в Spring Data?","Query methods (derived queries) -- механизм автоматической генерации SQL-запросов на основе имени метода в интерфейсе репозитория. Spring Data анализирует имя метода и создаёт соответствующий JPQL-запрос.\n\n### Основные ключевые слова\n\n```java\npublic interface UserRepository extends JpaRepository\u003CUser, Long> {\n\n    Optional\u003CUser> findByEmail(String email);                  \u002F\u002F WHERE email = ?\n    List\u003CUser> findByFirstNameAndLastName(String fn, String ln); \u002F\u002F AND\n    List\u003CUser> findByAgeGreaterThan(int age);                  \u002F\u002F WHERE age > ?\n    List\u003CUser> findByAgeBetween(int from, int to);             \u002F\u002F BETWEEN\n    List\u003CUser> findByEmailContaining(String fragment);         \u002F\u002F LIKE %?%\n    List\u003CUser> findByStatusIn(Collection\u003CString> statuses);    \u002F\u002F IN\n    List\u003CUser> findByDeletedFalse();                           \u002F\u002F WHERE deleted = false\n    List\u003CUser> findByEmailIsNull();                            \u002F\u002F IS NULL\n    List\u003CUser> findByStatusOrderByLastNameAsc(String status);  \u002F\u002F ORDER BY\n    Optional\u003CUser> findFirstByOrderByCreatedAtDesc();          \u002F\u002F LIMIT 1\n    List\u003CUser> findTop5ByStatusOrderByCreatedAtDesc(String s); \u002F\u002F TOP 5\n    long countByStatus(String status);                         \u002F\u002F COUNT\n    boolean existsByEmail(String email);                       \u002F\u002F EXISTS\n    void deleteByStatus(String status);                        \u002F\u002F DELETE\n}\n```\n\n### Вложенные свойства\n\n```java\n\u002F\u002F Навигация по связям: user.address.city\nList\u003CUser> findByAddressCity(String city);\n\n\u002F\u002F Разрешение неоднозначности через _\nList\u003CUser> findByAddress_City(String city);\n```\n\n### Пагинация в query methods\n\n```java\nPage\u003CUser> findByStatus(String status, Pageable pageable);\nSlice\u003CUser> findByStatus(String status, Pageable pageable);\nList\u003CUser> findByStatus(String status, Sort sort);\n```\n\n> **На собеседовании:** покажите знание основных ключевых слов и навигации по связям. Частая ошибка -- создавать слишком длинные имена методов. Если имя становится нечитаемым, лучше использовать `@Query`.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое query methods в Spring Data? — Gymterview","Query methods (derived queries) -- механизм автоматической генерации SQL-запросов на основе имени метода в интерфейсе репозитория. Spring Data анализирует имя м","Query methods (derived queries) -- механизм автоматической генерации SQL-запросов на основе имени метода в интерфейсе ре",[7,13],"Query methods (derived queries) -- механизм автоматической генерации SQL-запросов на основе имени метода в интерфейсе репозитория. Spring Data анализирует имя метода и создаёт соответствующий JPQL-запрос.",true]