W cyklu Fundamenty JPA i Hibernate ruszamy z wyjaśnieniem podstawowych pojęć. Dziś na warsztat trafia pojęcie persystencji. Czym ona jest? Czy jest potrzebna? Co to oznacza? Zacznijmy od tego czym w ogóle jest persystencja…
Czytaj dalej JPA #1 – Czym jest persystencja?Fundamenty pracy z JPA i Hibernate
Na mojej platformie z kursami pojawił się nowy, darmowy kurs dotyczący JPA i Hibernate.
Jest to kurs wprowadzający do pracy ze standardem JPA, a konkretnie z biblioteką Hibernate. Z tego, ponad godzinnego, kursu wideo dowiesz się:
- Czym jest persystencja danych, ORM, JPA i Hibernate
- Jak działają podstawowe elementy Hibernate – EntityManager, PersistenceContext, Entity
- Jak skonfigurować projekt z Hibernate (z bazą relacyjną H2)
- Jak wykonywać z użyciem JPA operacje bazodanowe CRUD – Create, Read, Update, Delete.
- Jak tworzyć i korzystać z relacji One-to-One
- Jak tworzyć i korzystać z relacji One-to-Many
Praca z formatem JSON w Javie
Format JSON jest obecnie najpopularniejszym formatem do komunikacji pomiędzy aplikacjami, niezależnie od języka, w jakim są napisane. Jak pracować z formatem JSON w języku Java?
Czytaj dalej Praca z formatem JSON w JavieSzkolenie „Kompletna aplikacja w języku Java” wystartowało!
Oto jest! Mój pierwszy kurs płatny na mojej platformie 🙂
Szkolenie „Kompletna aplikacja w języku Java – od zera do installera” zostało rozpoczęte. Zapisywać się można na https://java.clockworkjava.pl.
- Jeden program rozwijany krok po kroku przez 22 godziny materiału
- Architektura aplikacji
- Najlepsze praktyki i testy jednostkowe
- Integracja z bazą danych
- Graficzny interfejs użytkownika
Wszystko to w kontekście jednej, dużej aplikacji. Szczegółowa agenda programu na https://java.clockworkjava.pl/#course-index. Zapisy zamykam 23.X.2020.
Java 15 – Record
W Javie 14 zawitał do nas bardzo ciekawy feature o nazwie „records”. W Javie 15 jest w fazie „second preview”, czyli zbliża się do finalnego wydania. O co więc w recordach chodzi?
Czytaj dalej Java 15 – RecordJava 15 – Text Block
W Javie 15 dotarł do nas feature o nazwie Text Block, choć w fazie preview był już od bodaj wersji 13.
Mam dla niego nawet doskonały, praktyczny przykład wprost z mojego kursu Kompletna aplikacja w języku Java – od zera do installera ;). Do tej pory, gdy chcieliśmy sformatować wizualnie np. zapytanie do bazy danych
ResultSet resultSet = statement .executeQuery("SELECT R.ID, R.ROOM_NUMBER, B.BED FROM ROOMS AS R LEFT JOIN BEDS AS B ON R.ID=B.ROOM_ID");
Kończyliśmy z czyś takim
Statement statement = SystemUtils.connection.createStatement(); ResultSet resultSet = statement.executeQuery("" + "SELECT " + "R.ID, " + "R.ROOM_NUMBER," + "B.BED " + "FROM " + "ROOMS AS R " + "LEFT JOIN " + "BEDS AS B " + "ON" + " R.ID=B.ROOM_ID");
Używając „bloku tekstu” możemy zapisać to w o wiele przyjemniejszy dla oka sposób:
Statement statement = SystemUtils.connection.createStatement(); ResultSet resultSet = statement.executeQuery(""" SELECT R.ID, R.ROOM_NUMBER, B.BED FROM ROOMS AS R LEFT JOIN BEDS AS B ON R.ID=B.ROOM_ID """);
Odpada nam więc ciągłe otwieranie ” i używanie plusów do łączenia. Blok tekstu zaczynamy i kończymy potrójnym cudzysłowiem """
Dodatkowo wewnątrz bloku możemy do woli korzystać z „ bez konieczności ciągłego używania \” np.
""" Przykład "użycia" """
Text block jest traktowany jak zwyczajny String, więc możemy spokojnie zastosowań String.format bądź .replace, by wstrzyknąć tam dane.
int id = 2; String query =""" SELECT ID, ROOM_NUMBER FROM ROOM WHERE ID = %d """; String finalQuery = String.format(query, id);
Dodano nawet specjalną funkcję do klasy String, by ułatwić powyższe
int id = 2; String finalQuery =""" SELECT ID, ROOM_NUMBER FROM ROOM WHERE ID = %d """.formatted(id);
By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.
Java 14 – Więcej informacji przy NullPointerException
Java w wersji 14 daje możliwość uruchomienia rozszerzonych informacji o znanym i lubianym NullPointerException.
Standardowo, gdy odpalimy taki kawałek kodu:
public static void main(String[] args) { howLong(null); } private static int howLong(String s) { return s.length(); }
Dostaniemy taki oto wyjątek:
Exception in thread "main" java.lang.NullPointerException at NPEEx.howLong(NPEEx.java:12) at NPEEx.main(NPEEx.java:5)
Natomiast, gdy uruchomimy naszą aplikację z dodatkowym argumentem dla Virtual Machine
-XX:+ShowCodeDetailsInExceptionMessages
Dostaniemy już nieco więcej informacji
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "s" is null at NPEEx.howLong(NPEEx.java:8) at NPEEx.main(NPEEx.java:4)
I o ile w powyższym, prymitywnym przykładzie to nie potrzebujemy pomocy to, gdy mamy do czynienia z typowym anty-patternem „train wreck”:
person.getContactInfo().getAddress().getStreet()
To już dobrze wiedzieć co konkretnie się popsuło. Wówczas dostaniemy taką informację:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Address.getStreet()" because the return value of "ContactInfo.getAddress()" is null at NPEEx.main(NPEEx.java:5)
W IntelliJ możemy dodać argument do wirtualnej maszyny w menu Run -> Edit Configurations -> VM Options.
By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.
Pragmatyczny plan nauki dla ekosystemu Java – v3.0
Jakiś czas temu zapytałem na swojej mailiście o pytania, do nagrania godzinnego i technicznego Q&A z ekosystemu Javy. Jedno spośród pytań było nietechniczne, ale na tyle ciekawe, że postanowiłem przysiąść nad nim poza konkursem. Dodatkowo na tyle popularne, że stwierdziłem, żeby od razu stworzyć wpis na blogu na ten temat.
Chodziło o pokazanie jasnej roadmapy, planu nauki, jak i czego w roku 2021 uczyć się „na juniora”.
No to zaczynamy (i od razu – planuję rozbudowę tego wpisu, ale do tego potrzebuję Twojego feedbacku – po przeczytaniu daj znać na pawel@clockworkjava.pl)
Nagrania z mentoringu Java – droga do Juniora idą właśnie tą ścieżką.
Poziom ZERO
Czytaj dalej Pragmatyczny plan nauki dla ekosystemu Java – v3.0Java 14 – ulepszona instrukcja switch
W Javie 14 ulepszono nieco składnie dla instrukcji warunkowej switch. Do tej pory przykładowa instrukcja wyglądała tak:
String command = "add"; String result = ""; switch(command) { case "add": result = "ok"; break; case "remove": case "update": result = "not ok"; break; default: result = "meh"; break; }
Dzięki użyciu nowej składni możemy powyższe zamienić na coś o wiele przyjemniejszego dla oka:
String command = "add"; String result = ""; switch(command) { case "add" -> result = "ok"; case "remove", "update" -> result = "not ok"; default -> result = "meh"; } System.out.println(result);
Przede wszystkim pozbywamy się nieszczęsnego break, o którym to każdemu programiście zdarzyło się co najmniej raz w karierze zapomnieć. Dodatkowo wszystkie wartości jakie mają mieć taką samą obsługę wrzucam do jednego case’a, a nie tworzymy jeden pod drugim, co też jest generalnie czytelniejsze.
Ale to nie wszystko! Możemy też używać teraz switcha jako swoistej funkcji, mianowicie taki kod zadziała:
String command = "add"; String result = switch(command) { case "add" -> "ok"; case "remove", "update" -> "not ok"; default -> "meh"; }; System.out.println(result);
Możemy ominąć niepotrzebne przypisywanie, tylko użyć switch jako funkcji, z tą różnicą, że nawet nie musimy używać return (podobnie jak w lambdach jednolinijkowych).
By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.
Uczenie się – najważniejsza umiejętność dla programistów
Poza językiem angielskim jest jeszcze jedna ważna umiejętność dla każdego w branży IT, a mianowicie wiedzieć JAK się uczyć. Nieważne czy dopiero starasz się o pierwszą pracę, jesteś już juniorem, czy masz już dwucyfrowy staż pracy w branży. Na każdym z tych etapów uczyć się trzeba, jeśli pewnego dnia nie chcę się obudzić w bardzo niefajnej sytuacji. Zwłaszcza w obecnej rzeczywistości, a coś o tym wiem, bo moja etatowa firma żyję ze sprzedaży biletów lotniczych i rezerwacji hotelowych. Tough luck.
Mnie nigdzie nie nauczono jak się uczyć. Wiadomo – stare, sprawdzone, przekazywane z pokolenia na pokolenie „nie uczyć się na dzień przed egzaminem”, „wyśpij się” etc. etc. Oczywiście to wszystko prawda, problem był taki, że ja muszę wiedzieć DLACZEGO, prawdy objawione jakoś specjalnie nigdy na mnie nie działały.
O tym dlaczego proces nauki powinno się rozciągać w czasie i dziennie poświęcać jej godzinę, dwie. Nie więcej. O tym dlaczego sen jest ważny w kontekście uczenia się i o wielu, wielu rzeczach można dowiedzieć się ze świetnego, darmowego (!) kursu – Learning How to Learn – https://www.coursera.org/learn/learning-how-to-learn.
Polecam z całego serca.