При переходе через JPA QueryDSL все они включили концепцию безопасных типов запросов. Но что это такое? Согласно блогам/статьям, я предполагаю, что это функция JPA/QueryDSL, которая проверяет свой тип параметра при выполнении запросов. И что-то не так с запросом будет отображаться во время компиляции, а не во время выполнения. Я прав? Это только для этого или я чего-то здесь не вижу?Что конкретно означают безопасные запросы?
ответ
QueryDSL и Criteria являются библиотеками, которые пытаются обеспечить проверку типа данных при сборке запроса в JPA.
Просто потому, что JPQL - это просто запрос, который будет проверяться только во время выполнения, легко написать недопустимый запрос, который не обнаружен компилятором. Конечно, быстрее исправлять, пока вы кодируете, чем при запуске приложения.
Конечно, ни QueryDSL, ни критерии не могут защитить ваш запрос от всех видов ошибок (связанный тип данных или нет), но это безопаснее, чем JPQL.
С другой стороны, запись запросов в JPQL может быть намного проще и быстрее. Всегда компромисс :-)
API является безопасным по типу, если он использует систему типов языка программирования для предотвращения ошибок типа. В частности, QueryDSL позволяет компилятору проверить, что
- всех классы, используемых в запросе существуют (без опечаток ...) и постоянных (т.е. сопоставляется с базой данных)
- всех свойств, используемых в запросе существуют этот объект, и является стойкими
- результирующего запрос синтаксический действительный (не недостающих пунктов или ключевыми слов)
- всех операторов получают операнды приемлемого типа
Кроме того, выразительный запрос api позволяет вашей среде IDE обеспечивать завершение кода (также для классов домена и их свойств) и поддержку рефакторинга (если свойство переименовано, вы можете просто переименовать его в метамодель, а IDE будет переименовывать во всех запросах).
В качестве побочного преимущества очень сложно написать запрос, содержащий уязвимость SQL-инъекций.
Короче говоря, использование QueryDSL вместо JPQL (или запросов критики JPA в отсутствие статической метамодели) делает запись или изменение запросов более быстрыми и менее подверженными ошибкам.
- 1. Что означают непризнанные запросы GET?
- 2. Что означают [0, строки) и [1, строки]? более конкретно [и]
- 3. Безопасные запросы веб-службы
- 4. CometD Безопасные запросы
- 5. Скелетная структура Медиа-запросы - что они означают?
- 6. Что означают запросы на кросс-начало?
- 7. Запросы OpenStreetMap/Nominatim Очень конкретно
- 8. Безопасные запросы и ответы JSON
- 9. Безопасные запросы между различными приложениями
- 10. Что конкретно делает?
- 11. Что означают «\\. \», «\ ?? \», «\\? \», «\\»?
- 12. Что означают эти NULLS?
- 13. Как сделать безопасные запросы ajax с jquery?
- 14. Безопасные запросы Codeigniter и xss clean
- 15. Как создавать динамические и безопасные запросы
- 16. Безопасные запросы db в одностраничном веб-приложении
- 17. эффективные и безопасные запросы идея - MySQL
- 18. Что более конкретно в css?
- 19. Что конкретно написано на странице?
- 20. Что конкретно означает «Facebook ID»?
- 21. Что конкретно делает setup.py clean?
- 22. Что конкретно выполняет функтор Identity?
- 23. Что конкретно определяет приложение django?
- 24. Что означают `:` и `?` В `{:?}`
- 25. Что означают двойные звездочки?
- 26. Что означают замыкания?
- 27. Что означают трансформаторы?
- 28. Что означают двойные скобки?
- 29. Что означают эти «классификаторы»: []?
- 30. Что означают двойные подчеркивания?
Ничего себе .. великое объяснение брата .. Вы выяснили мои смущения ... спасибо Лев .. –