%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}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Kopfzeile
\ihead{Java}
\chead{}
\ohead{http://kohnlehome.de/java/jpa-grundlagen.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-Grundlagen
\end{center}


\section{Bibliotheken}
\begin{itemize}
\item EclipseLink(JPA 2.0), MySQL JDBC-Treiber
\end{itemize}

\section{MySQL-Datenbank}
\begin{itemize}
\item Datenbank: \texttt{beispieldb}, Benutzer: \texttt{root}, Passwort: \texttt{mysql}
\item Tabelle: \texttt{PERSON}, Spalten: \texttt{ID: VARCHAR}, \texttt{VORNAME: VARCHAR}, \texttt{NACHNAME: VARCHAR}
\end{itemize}


\section{\texttt{META-INF/persistence.xml}}
\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="BeispielPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>beispiel.Person</class>
    <properties>
      <property name="javax.persistence.jdbc.url"
                value="jdbc:mysql://localhost:3306/beispieldb"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.password" value="mysql"/>
    </properties>
  </persistence-unit>
</persistence>
\end{verbatim}

\section{\texttt{beispiel/Person.java}}
\begin{verbatim}
@Entity
public class Person {
    @Id
    private String id;
    
    private String vorname;
    private String nachname;

    public Person() {
        this.id = UUID.randomUUID().toString();
    }

    public Person(String vorname, String nachname) {
        this();
        this.vorname = vorname;
        this.nachname = nachname;
    }

    // getter und setter  ...
}

\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<Person> 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}
