Na warsztat trafia ORM, JPA i Hibernate w ramach cyklu Fundamenty JPA i Hibernate. Co kryje się za skrótem ORM i JPA i właściwie czym jest Hibernate?
Czytaj dalej JPA #2 – ORM, JPA i HibernateTag: Java
Debugowanie w IntelliJ #1
W pierwszej części krótkiego cyklu o debugowaniu w IDE IntelliJ Community przyjrzymy się zupełnym podstawom.
Czym jest debugowanie?
Zacznijmy od tego, czym jest debugowanie. Przede wszystkim jest to proces, podczas którego szukamy błędów w kodzie i je naprawiamy. Oczywiście nie jest to tak, że manager rzuca hasłem „a teraz debugujemy” i każdy szuka błędów w ciemno.
O wiele bardziej przypomina to „zabawę” w detektywa – zawsze znamy kontekst danego błędu. To znaczy wiemy, co tester (albo użytkownik) zrobił, jakie były dane wejściowe, jak miał być efekt, a co stało się faktycznie.
Czytaj dalej Debugowanie w IntelliJ #1JPA #1 – Czym jest persystencja?
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 JavieJava 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.
Java 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.
Java – Od zera do aplikacji desktopowej. Część 6. Wprowadzenie do metod
Po wprowadzeniu podstaw klas i zmiennych nadszedł czas na ostatni z podstawowych klocków, które składają się na program – metody, zwane również funkcjami (a przynajmniej na poziomie podstawowym można śmiało te dwie nazwy stosować naprzemiennie). Na tapetę bierzemy, więc linijkę public static void main(String[] args)
UWAGA! Kurs darmowy, zaktualizowany na stan z roku 2020 dostępny na https://kursy.clockworkjava.pl/java-fundamenty-programowania/ Czytaj dalej Java – Od zera do aplikacji desktopowej. Część 6. Wprowadzenie do metod
Java – od zera do aplikacji desktopowej. Część 5. Zmienne.
Zanim przejdziemy do omówienia kolejnej linijki naszego pierwszego programu, mianowicie public static void main(String[] args)
musimy wprowadzić pojęcie zmiennych w języku Java (java zmienne) oraz ich dwóch podstawowych typów.
UWAGA! Kurs darmowy, zaktualizowany na stan z roku 2020 dostępny na https://kursy.clockworkjava.pl/java-fundamenty-programowania/
Czytaj dalej Java – od zera do aplikacji desktopowej. Część 5. Zmienne.