MyBatis to Java persistence framework, który nastawiony jest na wydajność. W przeciwieństwie do Hibernate nie jest to framework obiektowo-relacyjny, lecz pozwalający na mapowanie metod na instrukcje SQL.
Cechuje go również prostota użytkowania i implementacji. Również każdy, kto ma uprzedzenie do nadmiernego stosowania adnotacji w Spring na pewno się ucieszy 😉
Gdzie MyBatis najlepiej się sprawdzi?
- gdy zależy nam na wydajności;
- do wykonywania operacji masowego wstawiania danych;
- do rozwiązań dokonujących operacji pomiarowych, mających osiągnąć wydajny zapis wielu rekordów w krótkim odstępie czasowym;
- kiedy nie chcemy korzystać z ORM;
- kiedy chcemy osiągnąć wydajność zbliżoną do JDBC, natomiast zależy nam na prostym, czytelnym kodzie.
Porównanie wydajności MyBatis vs Hibernate vs JDBC
Wykonałem proste porównanie trzech aplikacji, które odpowiadały za dodawanie i pobieranie 1000 rekordów komunikując się z lokalną bazą danych H2. Każda z aplikacji implementowała różne podejścia:
Zapis
JDBC | MyBatis | Hibernate | |
próba 1 | 32 ms | 87 ms | 121 ms |
próba 2 | 18 ms | 24 ms | 47 ms |
próba 3 | 13 ms | 15 ms | 38 ms |
próba 4 | 10 ms | 16 ms | 34 ms |
próba 5 | 10 ms | 11 ms | 42 ms |
Średnio:
- MyBatis wydajniejsze od Hibernate o 46%
- JDBC wydajniejsze od Hibernate o 71%
- JDBC wydajniejsze od MyBatis o 46%
Odczyt
JDBC | MyBatis | Hibernate | |
próba 1 | 6 ms | 11 ms | 100 ms |
próba 2 | 0 ms | 3 ms | 5 ms |
próba 3 | 0 ms | 2 ms | 5 ms |
próba 4 | 1 ms | 2 ms | 3 ms |
próba 5 | 0 ms | 1 ms | 3 ms |
Średnio:
- MyBatis wydajniejsze od Hibernate o 84%
- JDBC wydajniejsze od Hibernate o 94%
- JDBC wydajniejsze od MyBatis o 63%
Przykład implementacji MyBatis w Spring Boot
Na swoim kanale YouTube demonstruje w jaki sposób zaimplementować rozwiązanie wykorzystujące ten framework:
Kod aplikacji
Przykładowa aplikacja pozwalająca na zapis elementów do bazy danych z wykorzystaniem prostego API jest dostępna na moim repozytorium:
https://github.com/bykowski/spring-boot-mybaits
Wnioski
Opisane rozwiązanie stanowi stanowi ciekawą alternatywę dla wymagających frameworków mapowania obiektowo-relacyjnego. Jego dużą zaletą jest wysoka kontrolą wszystkich zapytań. Dlatego warto przyjrzeć się temu rozwiązaniu, zwłaszcza, że tworzony kod w nim jest schludny i czytelny.
A może Tobie udało się mieć styczność z tym rozwiązaniem? Jakie jaką masz o nim opinie? Koniecznie podziel się w komentarzu 😉