From 387880d926ece7e9099780e368e27da2d7e1d4de Mon Sep 17 00:00:00 2001 From: 0qln <0qln@proton.me> Date: Fri, 12 Jun 2026 11:02:25 +0200 Subject: [PATCH] praktikum6 --- ... - Transaktionen und Spring - Aufgaben.pdf | Bin 0 -> 50961 bytes spring/pom.xml | 24 ++++++++----- .../org/example/demo/praktikum6/Auto.java | 20 +++++++++++ .../org/example/demo/praktikum6/AutoDAO.java | 32 ++++++++++++++++++ .../org/example/demo/praktikum6/LogEntry.java | 16 +++++++++ .../example/demo/praktikum6/LogEntryDAO.java | 30 ++++++++++++++++ .../example/demo/praktikum6/TestClient.java | 28 +++++++++++++++ .../demo/uebung6/SpringDemoApplication.java | 4 ++- .../src/main/resources/application.properties | 6 ++++ 9 files changed, 150 insertions(+), 10 deletions(-) create mode 100644 docs/praktikum/aufgaben/Componentware - Praktikum - Transaktionen und Spring - Aufgaben.pdf create mode 100644 spring/src/main/java/org/example/demo/praktikum6/Auto.java create mode 100644 spring/src/main/java/org/example/demo/praktikum6/AutoDAO.java create mode 100644 spring/src/main/java/org/example/demo/praktikum6/LogEntry.java create mode 100644 spring/src/main/java/org/example/demo/praktikum6/LogEntryDAO.java create mode 100644 spring/src/main/java/org/example/demo/praktikum6/TestClient.java diff --git a/docs/praktikum/aufgaben/Componentware - Praktikum - Transaktionen und Spring - Aufgaben.pdf b/docs/praktikum/aufgaben/Componentware - Praktikum - Transaktionen und Spring - Aufgaben.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eae30e37a34df4ca142db3b72c1e8177c1bd5f6e GIT binary patch literal 50961 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 literal 0 HcmV?d00001 diff --git a/spring/pom.xml b/spring/pom.xml index f40d60d..0ec20d0 100644 --- a/spring/pom.xml +++ b/spring/pom.xml @@ -1,34 +1,40 @@ - + 4.0.0 - org.springframework.boot spring-boot-starter-parent 3.3.5 - de.componentware spring-demo 1.0-SNAPSHOT spring-demo Spring Boot Demo – Componentware Übung 6 - 21 - org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + runtime + + + org.projectlombok + lombok + 1.18.46 + - diff --git a/spring/src/main/java/org/example/demo/praktikum6/Auto.java b/spring/src/main/java/org/example/demo/praktikum6/Auto.java new file mode 100644 index 0000000..fb691fe --- /dev/null +++ b/spring/src/main/java/org/example/demo/praktikum6/Auto.java @@ -0,0 +1,20 @@ +package org.example.demo.praktikum6; + +import jakarta.persistence.*; +import java.io.Serializable; + +@Entity +public class Auto implements Serializable { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + public String hersteller; + + @Column(nullable = false) + public String typ; + + @Column(nullable = false) + public String kennzeichen; +} diff --git a/spring/src/main/java/org/example/demo/praktikum6/AutoDAO.java b/spring/src/main/java/org/example/demo/praktikum6/AutoDAO.java new file mode 100644 index 0000000..9ab71db --- /dev/null +++ b/spring/src/main/java/org/example/demo/praktikum6/AutoDAO.java @@ -0,0 +1,32 @@ +package org.example.demo.praktikum6; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +public class AutoDAO { + + @PersistenceContext + private EntityManager em; + + @Autowired + private LogEntryDAO logEntryDAO; + + @Transactional + public void createAuto(String hersteller, String typ, String kennzeichen) { + try { + Auto auto = new Auto(); + auto.hersteller = hersteller; + auto.typ = typ; + auto.kennzeichen = kennzeichen; + em.persist(auto); + logEntryDAO.createLogEntry("Auto angelegt: " + hersteller + " " + typ + " (" + kennzeichen + ")"); + } catch (Exception e) { + logEntryDAO.createLogEntry("Fehler beim Anlegen des Autos: " + e.getMessage()); + throw e; + } + } +} diff --git a/spring/src/main/java/org/example/demo/praktikum6/LogEntry.java b/spring/src/main/java/org/example/demo/praktikum6/LogEntry.java new file mode 100644 index 0000000..dc6ab25 --- /dev/null +++ b/spring/src/main/java/org/example/demo/praktikum6/LogEntry.java @@ -0,0 +1,16 @@ +package org.example.demo.praktikum6; + +import jakarta.persistence.*; +import java.time.LocalDateTime; +import java.util.Date; + +@Entity +public class LogEntry { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + public Date date; + public LocalDateTime time; + public String message; +} diff --git a/spring/src/main/java/org/example/demo/praktikum6/LogEntryDAO.java b/spring/src/main/java/org/example/demo/praktikum6/LogEntryDAO.java new file mode 100644 index 0000000..0ca4002 --- /dev/null +++ b/spring/src/main/java/org/example/demo/praktikum6/LogEntryDAO.java @@ -0,0 +1,30 @@ +package org.example.demo.praktikum6; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +@Repository +public class LogEntryDAO { + + @PersistenceContext + private EntityManager em; + + @Transactional + public void createLogEntry(String message) { + LogEntry entry = new LogEntry(); + entry.date = new Date(); + entry.time = LocalDateTime.now(); + entry.message = message; + em.persist(entry); + } + + public List getAllLogEntries() { + return em.createQuery("SELECT l FROM LogEntry l", LogEntry.class).getResultList(); + } +} diff --git a/spring/src/main/java/org/example/demo/praktikum6/TestClient.java b/spring/src/main/java/org/example/demo/praktikum6/TestClient.java new file mode 100644 index 0000000..eae7c05 --- /dev/null +++ b/spring/src/main/java/org/example/demo/praktikum6/TestClient.java @@ -0,0 +1,28 @@ +package org.example.demo.praktikum6; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class TestClient implements CommandLineRunner { + + @Autowired + private AutoDAO autoDAO; + + @Autowired + private LogEntryDAO logEntryDAO; + + @Override + public void run(String... args) { + autoDAO.createAuto("BMW", "E32", "NE-IN 0000"); + + List logs = logEntryDAO.getAllLogEntries(); + System.out.println("=== Log-Einträge (" + logs.size() + ") ==="); + for (LogEntry entry : logs) { + System.out.println("[" + entry.time + "] " + entry.message); + } + } +} diff --git a/spring/src/main/java/org/example/demo/uebung6/SpringDemoApplication.java b/spring/src/main/java/org/example/demo/uebung6/SpringDemoApplication.java index 7bd0b3a..e59c1f3 100644 --- a/spring/src/main/java/org/example/demo/uebung6/SpringDemoApplication.java +++ b/spring/src/main/java/org/example/demo/uebung6/SpringDemoApplication.java @@ -2,8 +2,10 @@ package org.example.demo.uebung6; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; -@SpringBootApplication +@SpringBootApplication(scanBasePackages = "org.example.demo") +@EntityScan(basePackages = "org.example.demo") public class SpringDemoApplication { public static void main(String[] args) { diff --git a/spring/src/main/resources/application.properties b/spring/src/main/resources/application.properties index 85127d7..8e3af21 100644 --- a/spring/src/main/resources/application.properties +++ b/spring/src/main/resources/application.properties @@ -1 +1,7 @@ spring.application.name=spring-demo + +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.show-sql=true +spring.h2.console.enabled=true