%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de
%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}
%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}
%neue Rechtschreibung
\usepackage[ngerman]{babel}
%Umlaute ermöglichen
\usepackage[utf8]{inputenc}
%Gesamtseitenzahl
\usepackage{lastpage}
% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}
%Hyperlinks
\usepackage{hyperref}
%Quellcode-Listings
\usepackage{listings}
%Kopfzeile
\ihead{Java}
\chead{}
\ohead{http://kohnlehome.de/java/jpa-maven.pdf}
\setheadsepline{0.5pt}
%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von \pageref{LastPage}}
\ofoot{\today}
\pagestyle{scrheadings}
\begin{document}
% Überschrift
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
JPA mit Maven
\end{center}
\section{leere Datenbank erstellen}
\begin{lstlisting}
mysql> CREATE DATABASE beispieldb;
mysql> CREATE USER 'benutzer'@'localhost';
mysql> ALTER USER 'benutzer'@'localhost' IDENTIFIED BY 'passwort';
mysql> GRANT ALL PRIVILEGES ON beispieldb.* TO 'benutzer'@'localhost';
\end{lstlisting}
\section{Maven-Projekt erstellen}
\begin{itemize}
\item maven-archetype-quickstart
\item GroupId: de.gbsschulen.jpabeispiel
\item ArtifactId: jpabeispiel
\end{itemize}
\section{Java 11 konfigurieren in pom.xml}
\subsection*{Löschen}
\begin{verbatim}
1.7
1.7
\end{verbatim}
\subsection*{Erweitern}
\begin{verbatim}
maven-compiler-plugin
3.8.0
11
\end{verbatim}
\section{Dependencies hinzufügen in pom.xml}
\begin{verbatim}
mysql
mysql-connector-java
8.0.18
org.eclipse.persistence
eclipselink
2.7.5
\end{verbatim}
\newpage
\section{JPA-Konfigurationsdatei src/main/resources/META-INF/persistence.xml}
\begin{verbatim}
org.eclipse.persistence.jpa.PersistenceProvider
de.gbsschulen.jpabeispiel.Person
\end{verbatim}
\section{de.gbsschulen.jpabeispiel.Person}
\begin{verbatim}
package de.gbsschulen.jpabeispiel;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.UUID;
@Entity
public class Person {
@Id
private String id;
private String vorname;
private String nachname;
public Person(String vorname, String nachname) {
this.id = UUID.randomUUID().toString();
this.vorname = vorname;
this.nachname = nachname;
}
public Person() { this("Max", "Mustermann"); }
public String getVorname() { return vorname; }
public void setVorname(String vorname) { this.vorname = vorname; }
public String getNachname() { return nachname; }
public void setNachname(String nachname) { this.nachname = nachname; }
}
\end{verbatim}
\section{Entity-Manager und Transaktion}
\begin{verbatim}
EntityManagerFactory emf = Persistence.createEntityManagerFactory("BeispielPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// Hier CRUD-Aktionen ausführen
em.getTransaction().commit();
em.close();
emf.close();
\end{verbatim}
\section{CRUD-Operationen}
\subsection*{CREATE}
\begin{verbatim}
Person person = new Person();
em.persist(person);
\end{verbatim}
\subsection*{READ}
\begin{verbatim}
Person person = em.find(Person.class, "d4319f2b-ad8a-44bf-ac14-43d03d78920a"); // primary key
\end{verbatim}
oder
\begin{verbatim}
Query query = em.createQuery("SELECT Person FROM Person person"); // JPQL
List list = query.getResultList();
for (Person person : list) {
... = person ...
}
\end{verbatim}
\subsection*{UPDATE}
\begin{verbatim}
person.setVorname("Anna");
\end{verbatim}
\subsection*{DELETE}
\begin{verbatim}
em.remove(person);
\end{verbatim}
\end{document}