MyBatis или Hibernate?
Рано или поздно Java-разработчик задаёт себе вопрос: Hibernate или MyBatis? От ответа зависит архитектура проекта, а ответ, в свою очередь, зависит от задачи. Давайте разберёмся, что они такое и когда какой лучше.
Итак, Hibernate это ORM framework. Его полное название Hibernate ORM. Он полностью поддерживает JPA и, фактически, является имплементацией JPA. Его основная задача – понять, как размечены ваши классы аннотациями ORM, построить по ним схему и собирать объекты по строкам из базы. Hibernate сам пишет за вас запросы к базе. Для вас работа с базой выглядит как работа с объектами. Сохранить объект, загрузить объект, обновить объект. Как, собственно, и должно быть. Это же Object Relational Mapping!
MyBatis это Java persistence framework. Не ORM. MyBatis связывает методы интерфейса маппера с SQL-запросом. MyBatis не умеет создавать схему. И, честно говоря, вообще ничего о схеме не знает. Он превращает вызов метода в запрос к базе, и как результат вызова метода возвращает результат запроса.
➡️ Читать дальше
@javatg
Рано или поздно Java-разработчик задаёт себе вопрос: Hibernate или MyBatis? От ответа зависит архитектура проекта, а ответ, в свою очередь, зависит от задачи. Давайте разберёмся, что они такое и когда какой лучше.
Итак, Hibernate это ORM framework. Его полное название Hibernate ORM. Он полностью поддерживает JPA и, фактически, является имплементацией JPA. Его основная задача – понять, как размечены ваши классы аннотациями ORM, построить по ним схему и собирать объекты по строкам из базы. Hibernate сам пишет за вас запросы к базе. Для вас работа с базой выглядит как работа с объектами. Сохранить объект, загрузить объект, обновить объект. Как, собственно, и должно быть. Это же Object Relational Mapping!
MyBatis это Java persistence framework. Не ORM. MyBatis связывает методы интерфейса маппера с SQL-запросом. MyBatis не умеет создавать схему. И, честно говоря, вообще ничего о схеме не знает. Он превращает вызов метода в запрос к базе, и как результат вызова метода возвращает результат запроса.
➡️ Читать дальше
@javatg
👍7❤1🔥1
Thread’ом Java не испортишь: Callable, Future и друзья
Поток — это Thread, в нём что-то запускается run, поэтому воспользуемся tutorialspoint java online compiler‘ом и выполним следующий код:
Единтсвенный ли это вариант запуска задачи в потоке?
➡️ Читать дальше
@javatg
Поток — это Thread, в нём что-то запускается run, поэтому воспользуемся tutorialspoint java online compiler‘ом и выполним следующий код:
public class HelloWorld {
public static void main(String []args){
Runnable task = () -> {
System.out.println("Hello World");
};
new Thread(task).start();
}
}
Единтсвенный ли это вариант запуска задачи в потоке?
➡️ Читать дальше
@javatg
👍9❤1🔥1🤔1
Это глубокое погружение в управление памятью Java позволит расширить ваши знания о том, как работает куча, ссылочные типы и сборка мусора.
Вероятно, вы могли подумать, что если вы программируете на Java, то вам незачем знать о том, как работает память. В Java есть автоматическое управление памятью, красивый и тихий сборщик мусора, который работает в фоновом режиме для очистки неиспользуемых объектов и освобождения некоторой памяти.
Поэтому вам, как программисту на Java, не нужно беспокоиться о таких проблемах, как уничтожение объектов, поскольку они больше не используются. Однако, даже если в Java этот процесс выполняется автоматически, он ничего не гарантирует. Не зная, как устроен сборщик мусора и память Java, вы можете создать объекты, которые не подходят для сбора мусора, даже если вы их больше не используете.
Поэтому важно знать, как на самом деле работает память в Java, поскольку это дает вам преимущество в написании высокопроизводительных и оптимизированных приложений, которые никогда не будут аварийно завершены с ошибкой OutOfMemoryError. С другой стороны, когда вы окажетесь в плохой ситуации, вы сможете быстро найти утечку памяти.
➡️ Читать дальше
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1🔥1
Что такое busy spin?
busy spin – это техника, которую программисты используют, чтобы заставить поток ожидать при определённом условии. В отличие от традиционных методов wait(), sleep() или yield(), которые подразумевают уступку процессорного времени, этот метод вместо уступки выполняет пустой цикл. Это необходимо, для того, чтобы сохранить кэш процессора, т.к. в многоядерных системах, существует вероятность, что приостановленный поток продолжит своё выполнение уже на другом ядре, а это повлечет за собой перестройку состояния процессорного кэша, которая является достаточно затратной процедурой.
➡️ Подробнее
@javatg
busy spin – это техника, которую программисты используют, чтобы заставить поток ожидать при определённом условии. В отличие от традиционных методов wait(), sleep() или yield(), которые подразумевают уступку процессорного времени, этот метод вместо уступки выполняет пустой цикл. Это необходимо, для того, чтобы сохранить кэш процессора, т.к. в многоядерных системах, существует вероятность, что приостановленный поток продолжит своё выполнение уже на другом ядре, а это повлечет за собой перестройку состояния процессорного кэша, которая является достаточно затратной процедурой.
➡️ Подробнее
@javatg
👍8❤1🔥1
Оптимизация программ на Java
Производительность программ на Java™ в AIX моно улучшить разными способами.
-Для того чтобы при выполнении большого числа операций со строками избежать создания ненужных объектов, после которых нужно будет освобождать память, вместо конкатенации строк можно использовать функцию StringBuffer.
- Постарайтесь максимально сократить число операций вывода данных на консоль Java, так как для этого требуется выполнить некоторые действия над строками, отформатировать текст и записать данные.
- По возможности создавайте переменные простых типов, так как для работы с ними требуется меньше ресурсов системы.
- Заносите часто используемые объекты в кэш; это позволит уменьшить нагрузку на функцию сбора мусора и избежать многократного создания этих объектов.
- Объединяйте в группы внутренние операции для уменьшения числа вызовов интерфейса JNI Java.
- Для снижения числа процессов в JVM и операционной системе не применяйте синхронизированные методы, когда задачу можно решить другими способами.
- Вызывайте функцию сбора мусора только при необходимости.
- Запускать эту функцию рекомендуется только во время простоя или низкой загруженности системы.
- Используйте тип int вместо long всегда, когда это возможно, потому что 32-разрядные операции выполняются быстрее, чем 64-разрядные.
- Объявляйте методы с ключевым словом final всегда, когда это возможно. В JVM такие методы обрабатываются быстрее.
- Для снижения числа операций по инициализации переменных создавайте константы с ключевым словом static final.
- Постарайтесь сократить число ссылок "cast" и "instanceof", поскольку соответствующие ссылки в Java преобразуются во время выполнения.
- Старайтесь использовать массивы вместо векторов.
- Добавляйте и удаляйте элементы из конца вектора.
-Избегайте операций выделения памяти под объекты внутри циклов.
- Пользуйтесь буферизованным вводом-выводом и выберите оптимальный размер буфера.
- Пользуйтесь пулами соединений и предварительной подготовкой операторов при работе с базами данных.
- Пользуйтесь пулами соединений с базой данных и повторно используйте соединения вместо того, чтобы всякий раз открывать и закрывать соединения.
- Применяйте максимальное возможное время жизни нити и минимизируйте количество операций по созданию и уничтожению нитей.
- Минимизируйте конкуренцию за общие ресурсы.
- Минимизируйте количество операций создания объектов, используемых в течение непродолжительного времени.
- Старайтесь как можно реже вызывать удаленные методы.
- Пользуйтесь функциями callback для того, чтобы избежать блокирования обращений к удаленным методам.
- Не создавайте объекты, которые будут применяться только для обращения к методам.
- По возможности не пользуйтесь синхронизированными методами внутри циклов.
- Храните строковые и символьные данные в базе данных в формате Unicode.
- Выберите оптимальный порядок библиотек в переменной CLASSPATH.
➡️ Еще советы
@javatg
Производительность программ на Java™ в AIX моно улучшить разными способами.
-Для того чтобы при выполнении большого числа операций со строками избежать создания ненужных объектов, после которых нужно будет освобождать память, вместо конкатенации строк можно использовать функцию StringBuffer.
- Постарайтесь максимально сократить число операций вывода данных на консоль Java, так как для этого требуется выполнить некоторые действия над строками, отформатировать текст и записать данные.
- По возможности создавайте переменные простых типов, так как для работы с ними требуется меньше ресурсов системы.
- Заносите часто используемые объекты в кэш; это позволит уменьшить нагрузку на функцию сбора мусора и избежать многократного создания этих объектов.
- Объединяйте в группы внутренние операции для уменьшения числа вызовов интерфейса JNI Java.
- Для снижения числа процессов в JVM и операционной системе не применяйте синхронизированные методы, когда задачу можно решить другими способами.
- Вызывайте функцию сбора мусора только при необходимости.
- Запускать эту функцию рекомендуется только во время простоя или низкой загруженности системы.
- Используйте тип int вместо long всегда, когда это возможно, потому что 32-разрядные операции выполняются быстрее, чем 64-разрядные.
- Объявляйте методы с ключевым словом final всегда, когда это возможно. В JVM такие методы обрабатываются быстрее.
- Для снижения числа операций по инициализации переменных создавайте константы с ключевым словом static final.
- Постарайтесь сократить число ссылок "cast" и "instanceof", поскольку соответствующие ссылки в Java преобразуются во время выполнения.
- Старайтесь использовать массивы вместо векторов.
- Добавляйте и удаляйте элементы из конца вектора.
-Избегайте операций выделения памяти под объекты внутри циклов.
- Пользуйтесь буферизованным вводом-выводом и выберите оптимальный размер буфера.
- Пользуйтесь пулами соединений и предварительной подготовкой операторов при работе с базами данных.
- Пользуйтесь пулами соединений с базой данных и повторно используйте соединения вместо того, чтобы всякий раз открывать и закрывать соединения.
- Применяйте максимальное возможное время жизни нити и минимизируйте количество операций по созданию и уничтожению нитей.
- Минимизируйте конкуренцию за общие ресурсы.
- Минимизируйте количество операций создания объектов, используемых в течение непродолжительного времени.
- Старайтесь как можно реже вызывать удаленные методы.
- Пользуйтесь функциями callback для того, чтобы избежать блокирования обращений к удаленным методам.
- Не создавайте объекты, которые будут применяться только для обращения к методам.
- По возможности не пользуйтесь синхронизированными методами внутри циклов.
- Храните строковые и символьные данные в базе данных в формате Unicode.
- Выберите оптимальный порядок библиотек в переменной CLASSPATH.
➡️ Еще советы
@javatg
👍5👎2🔥2❤1🤔1
Spring Boot: Up and Running
Автор: Mark Heckler
Год издания: 2021
Рецензия на книгу:
Spring Boot - это самый популярный фреймворк Java. В этом практическом пособии показано, как использовать Spring Boot для написания приложений.
Плюсы: хороший авторский стиль, книга легко читается.
Минусы: не замечено.
#java #kotlin #spring #english
📒 Книга
@javatg
Автор: Mark Heckler
Год издания: 2021
Рецензия на книгу:
Spring Boot - это самый популярный фреймворк Java. В этом практическом пособии показано, как использовать Spring Boot для написания приложений.
Плюсы: хороший авторский стиль, книга легко читается.
Минусы: не замечено.
#java #kotlin #spring #english
📒 Книга
@javatg
👍11🔥2❤1
🔥 Полезнейшая Подборка каналов
🖥 Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
🖥 Python
@pro_python_code – погружение в python
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
🖥 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
🖥 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка
👣 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
🖥 Linux
@linux_kal - чат kali linux
@linuxkalii - linux kali
@linux_read - книги linux
👷♂️ IT работа
@hr_itwork - ит-ваканнсии
🖥 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust
#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат
📓 Книги
@programming_books_it
@datascienceiot
@pythonlbooks
@golang_books
@frontendbooksit
@progersit
@linux_read
@java_library
@frontendbooksit
📢 English for coders
@english_forprogrammers - Английский для программистов
🖥 Github
@github_code
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
@pro_python_code – погружение в python
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
@linux_kal - чат kali linux
@linuxkalii - linux kali
@linux_read - книги linux
👷♂️ IT работа
@hr_itwork - ит-ваканнсии
@sqlhub - базы данных
@chat_sql - базы данных чат
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust
#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат
📓 Книги
@programming_books_it
@datascienceiot
@pythonlbooks
@golang_books
@frontendbooksit
@progersit
@linux_read
@java_library
@frontendbooksit
@english_forprogrammers - Английский для программистов
@github_code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥2
Java, по мнению Amazon, один из оптимальных по энергопотреблению и времени выполнения языков программирования. Он зарекомендовал себя для серверной разработки, на тех платформах, где может работать виртуальная машина. Не зря же его называют WORA (Write Once and Run Anywhere — «Напиши один раз, запускай где угодно»). Но кроме того, его применяют для разработки игр, облачных вычислений, больших данных, искусственного интеллекта и интернета вещей.
Кто же ему наступает на пятки и пробует выбить из основных сегментов? Изначальный клон Java под названием Kotlin. Авторы хотели улучшить типобезопасность по сравнению с прародителем и сделать язык более простым, чем Scala.
В мае 2017 года Google объявил, что язык программирования Kotlin теперь является предпочтительным языком для разработчиков приложений для Android. Это стало признанием отрасли.
Google оценивает, что 70% из 1 000 лучших приложений в Play Store написаны на Kotlin. Также на нём сделаны Maps, Play, Drive. Однако этот язык программирования используют и для бэкенд-разработки, например, он доступен в Spring Framework.
Рассмотрим эти два популярных языка с разных аспектов для новичков, опытных программистов и бизнеса. Я приведу релевантные, на мой взгляд, факты и умозаключения, а лучшего предлагаю выбрать читателю.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👎5❤1🔥1
Автономные (консольные) приложения Java и аплеты могут создавать окна на базе класса Frame. Если эти окна используются для интерактивного взаимодействия с пользователем, вы должны организовать в соответствующих классах обработку событий, переопределив методы handleEvent, mouseDown, mouseMove и аналогичные.
При обработке событий в аплетах мы переопределяли перечисленные выше методы в главном классе аплета, который наследуется от класса Applet. Что же касается окон Frame, то они создаются на базе классов, произведенных от класса Frame. Именно там вы и должны переопределять методы, предназначенные для обработки событий.
В остальном события обрабатываются таким же образом, что и в аплетах.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2❤1
Самый популярный Java-репозиторий на GitHub – коллекция паттернов проектирования всех видов и мастей.
Паттерны – это лучшие практики организации проектов, которые упрощают и ускоряют процесс разработки. Они представляют собой хорошо продуманные и протестированные решения самых распространенных задач программирования. Паттерны учитывают много мелочей, о которых вы легко можете забыть, и спасают от распространенных и глупых ошибок.
Каждый паттерн в репозитории, будь он моно или нет, содержит подробное описание и примеры реализации на Java.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - iluwatar/java-design-patterns: Design patterns implemented in Java
Design patterns implemented in Java. Contribute to iluwatar/java-design-patterns development by creating an account on GitHub.
👍11❤3🔥1😢1
Одинарные и двойные кавычки
Что ты ожидаешь в результате выполнения кода с картинки?
Казалось бы, строка должна возвращать «
Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды (
@javatg
Что ты ожидаешь в результате выполнения кода с картинки?
Казалось бы, строка должна возвращать «
HaHa
», но на самом деле это будет «Ha169
».Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды (
'H' и 'a'
) в целые значения посредством расширения примитивных типов — получается 169
.@javatg
👍22❤1👎1🥰1
java8-tutorial
Подробный гайд по Java 8, шаг за шагом описывающий все возможности и особенности Java. Короткие примеры грамотно иллюстрируют основные концепции: минимум текста, максимум наглядности. Данный репозиторий может быть как справочником, так и учебником.
https://github.com/winterbe/java8-tutorial
@javatg
Подробный гайд по Java 8, шаг за шагом описывающий все возможности и особенности Java. Короткие примеры грамотно иллюстрируют основные концепции: минимум текста, максимум наглядности. Данный репозиторий может быть как справочником, так и учебником.
https://github.com/winterbe/java8-tutorial
@javatg
GitHub
GitHub - winterbe/java8-tutorial: Modern Java - A Guide to Java 8
Modern Java - A Guide to Java 8. Contribute to winterbe/java8-tutorial development by creating an account on GitHub.
👍10🔥3❤2
☕️ @Controller — для классов-контроллеров в проекте Spring MVC.
☕️ @RequestMapping — для настройки сопоставления URI в методах-обработчиках контроллера. Это очень важная аннотация.
☕️ @ResponseBody — для отправки Object в качестве ответа, обычно для отправки данных XML или JSON в качестве ответа.
☕️ @PathVariable — для отображения динамических значений из URI в аргументы метода обработчика.
☕️ @Autowired — для автоматического связывания зависимостей в бинах Spring.
☕️ @Qualifier — с аннотацией @Autowired, чтобы избежать путаницы при наличии нескольких экземпляров типа bean-компонента.
☕️ @Service — для классов сервисного слоя.
☕️ @Scope — для настройки области действия Spring bean.
☕️ @Configuration, @ComponentScan и @Bean — для конфигураций на основе Java.
Аннотации AspectJ для настройки аспектов и советов, @Aspect, @Before, @After, @Around, @Pointcut и т. д.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤4🔥4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🔥1
XPrivacyLua – менеджер по конфиденциальности приложений для Android
Отзыв разрешений у Android приложений часто приводит к ограничениям в функционале или сбоям в работе приложений. XPrivacyLua передаёт приложениям поддельные данные вместо реальных, что позволяет сохранить функционал и конфиденциальность одновременно
#Java #Privacy #Android #Useful
@github_code
Отзыв разрешений у Android приложений часто приводит к ограничениям в функционале или сбоям в работе приложений. XPrivacyLua передаёт приложениям поддельные данные вместо реальных, что позволяет сохранить функционал и конфиденциальность одновременно
#Java #Privacy #Android #Useful
@github_code
GitHub
GitHub - M66B/XPrivacyLua: Really simple to use privacy manager for Android 6.0 Marshmallow and later
Really simple to use privacy manager for Android 6.0 Marshmallow and later - M66B/XPrivacyLua
👍4❤1🔥1
Сегодня решил рассказать о своем опыте, как при помощи docker-compose и bash скрипта настроил развертывание бекенд приложения с базой данных.
Какая была идея? Хотелось при помощи одной команды в терминале разворачивать Java приложение с базой данных так, чтобы можно было передать все необходимые переменные в момент запуска и нигде не хранить их.
Так, чтобы можно было развернуть новую версию приложения даже с телефона, просто заранее заготовив необходимую команду.
Статья носит характер руководства по использованию, поэтому все желающие могут сами своими руками создать и воспроизвести весь путь, что я прошел и локально запустить у себя развертывание.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1🔥1
Проекты , которые рреально помогут в разработке и помогут прокачать навыки программирования.
Смотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1🔥1
Стоит также отметить, что проводник предоставляет множество синтаксических анализаторов кода: начиная от esformatter и esprima для JavaScript, заканчивая java-parser для, собственно, Java.
#web #java
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1🔥1