basic Flashcards
hvad er JPA (Java Persistence API)?
Et sæt regler (en standard), der beskriver, hvordan Java-objekter skal mappes til database-tabeller og omvendt.
JPA udfører ikke noget selv – den kræver en ORM (som Hibernate) til at gøre arbejdet
Hvad er Rest API?
‘Et stateless interface’
Et REST API lader klienter og servere udveksle data via HTTP med metoder som GET, POST, PUT og DELETE
Hvad er Generics?
bruger en typeparameter (T) i klassen/metoden og erstatter den med en konkret datatype ved brug
One to One relationer
en række i en tabel er knyttet til præcis én række i en anden tabel
CommandLineRunner
Spring Boot-interface, der kører kode én gang ved opstart af applikationen. Bruges ofte i InitData til at indsætte testdata i databasen automatisk.
Kan bruges til opstartslogik, f.eks. konfiguration eller logging.
Hvad er Hibernate?
En konkret implementering af JPA, som gør det muligt at gemme, hente og håndtere data i en database ved at mappe Java-objekter til database-tabeller.
Cirkulære referencer
X refererer til Y, og Y refererer tilbage til X. Dette kan skabe uendelige loops.
Hvordan sikres Data-integritet?
sikres ved constraints
Hvad er et Functional interface?
Et interface med et enkelt abstrakt metode (kan have flere default- eller static-metoder)
Hvad gør @JsonBackReference?
Forhindrer uendelige loops i JSON-serialisering, når to objekter refererer til hinanden. Brug på “forældre”-siden af relationen
Hvad står JSON for, og hvad bruges det til?
‘JavaScript Object Notation’
Et letvægtigt dataformat, der bruges til at udveksle data mellem systemer.
Bruges ofte i API’er og webapplikationer til at sende og modtage data.
Hvilke to hovedstrukturer er JSON baseret på?
- Objekter – en samling af navn/værdi-par
- Arrays – en ordnet liste af værdier
RestTemplate
Det er en klasse, der bruges til at lave HTTP-anmodninger (GET, POST, PUT, DELETE) til eksterne API’er.
Hvornår bruger man create-drop/ update?
Update = når man ikke vil miste sine data
Create drop = når data skal resettes hver gang applikationen starter
Hvad må man ikke når man skal navngive endpoints?
Ingen brug af verber(udsagnsord), dvs ingen “getX” “postX”…
mappedBy betyder:
THE MOTHER (forældren)
“Jeg er den passive part – kig på ‘region’ i ‘Kommune’ for at finde relationen.
Den side, der har @OneToMany, har @MappedBy, fordi den ikke ejer relationen.
Hvad tager .forEach() som parameter i Java?
.forEach() tager en lambda-udtryk eller en funktion (Consumer) som parameter, der definerer, hvad der skal gøres med hvert element i en samling.
Hvad er Optional i Java, og hvornår bruges det?
en container, der kan indeholde en værdi eller være tom.
Bruges til at undgå NullPointerException, især når en metode kan returnere null, f.eks. ved databaseopslag som findById(kode)
hvad er: var obj =
betyder, at Java automatisk bestemmer typen af obj baseret på den værdi, du tildeler den.
Hvad er forskellen mellem abstract class og interface?
abstract class → Kan have både implementeret og ikke-implementeret kode.
interface → Kan kun have metode-signaturer (før Java 8), men kan have default/statisk metoder efter Java 8.
Hvad er forskellen på @Controller og @RestController?
@Controller → Returnerer en HTML-side via Thymeleaf.
@RestController → Returnerer JSON-data (REST API).
Hvornår bruges @PathVariable?
Når en værdi er en del af URL’en.
Bruges til at hente dynamiske værdier fra stien.
GET /brugere/5 → “Bruger ID: 5”
Hvornår bruges @RequestParam?
Når en værdi sendes som en forespørgselsparameter i URL’en.
Bruges typisk til valgfri parametre eller filtrering.
GET /søg?navn=Zuhur → “Søger efter: Zuhur”
Hvad er @Transactional, og hvorfor bruges det?
Bruges i Spring Boot til at sikre, at databaseoperationer er atomare.
Hvis en fejl opstår, rulles transaktionen tilbage.
Hvad gør @Column i JPA?
Kan bruges til at annotere navn, type eller længde på kolonnen i databasen, hvis man vil have noget andet end default genereret.
@Column(length = 4)
Hvad gør @OneToOne(mappedBy = “x”)?
Fortæller, at denne side af relationen IKKE ejer relationen.
Fremmednøglen opbevares i den anden entitet under navnet “x”.
Hvad gør @JoinColumn?
Angiver hvilken kolonne der fungerer som fremmednøgle i en relation.
Hvad gør @Entity?
Markerer en klasse som en JPA-entitet, så den repræsenterer en tabel i databasen.
Hvad gør @Id?
Markerer et felt som primærnøgle i en JPA-entitet.
Hvad gør @Component?
Registrerer en klasse som en Spring Bean, så Spring kan administrere den automatisk.
Hvad gør @Autowired?
Injicerer automatisk afhængigheder i en klasse, så man ikke behøver at oprette objekter manuelt.
Hvad gør @RestController?
Bruges til at bygge REST API’er.
Returnerer JSON/XML i stedet for HTML (kombinerer @Controller + @ResponseBody).
Hvad gør cascade = CascadeType.ALL?
Hvis en forælder fjernes, fjernes alle tilknyttede “børn” i databasen.
Hvad gør @SpringBootTest?
Starter hele Spring Boot-applikationen til test, så man kan teste afhængigheder og Beans.
Bruges ofte sammen med @MockBean for at mocke afhængigheder.
Hvad gør @DataJpaTest?
Kører kun tests med JPA (uden at starte hele Spring Boot).
Bruger en H2-database (in-memory test database).
Hvad er forskellen på == og .equals()?
== sammenligner objektreferencer (om de er den samme instans).
.equals() sammenligner indholdet af to objekter.
Hvad er @CrossOrigin, og hvornår bruges den?
bruges til at give en frontend (fx React eller Angular) lov til at snakke med din backend i Spring Boot.
Hvad er ResponseEntity, og hvad bruges det til?
ResponseEntity er en klasse i Spring Boot, der bruges til at returnere HTTP-svar fra en REST API.
Giver kontrol over statuskoder (fx 200 OK, 404 Not Found, 400 Bad Request).
Kan returnere JSON-data, fejlbeskeder eller tekst.
Hjælper med at håndtere fejl korrekt i API’er.
Hvad er @RequestBody, og hvad bruges det til?
bruges i Spring Boot til at modtage data fra frontend (fx JavaScript, React, Postman) og omdanne det til et Java-objekt.
Når en bruger sender data via en POST eller PUT anmodning, hjælper @RequestBody med at konvertere JSON-data til et Java-objekt, så det kan bruges i backenden.
Hvad er @Getter og @Setter?
Lombok-annotationer, der automatisk genererer getter- og setter-metoder for alle felterne i en klasse.
Hvad gør @GeneratedValue(strategy = GenerationType.IDENTITY)?
bruges i Spring Boot/JPA til at gøre en primær nøgle (@Id) automatisk genereret i databasen.
Hvad gør cascade = CascadeType.REMOVE?
sørger for, at hvis en forælder-entitet slettes, så slettes alle dens tilknyttede “børn” automatisk.
Hvad bruges orphanRemoval = true til?
fjerner automatisk “forældreløse” objekter, dvs. hvis et barn ikke længere er tilknyttet en forælder, bliver det også slettet fra databasen.
hvad viser dette:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = “school_id”, referencedColumnName = “id”)
private School school; // Hver student er tilknyttet én skole
Viser en Many-to-One relation mellem Student og School.
@JoinColumn(name = “school_id”) betyder, at Student-tabellen har en fremmednøgle school_id, der refererer til id i School.
fetch = FetchType.EAGER betyder, at School bliver hentet med det samme, når en Student hentes.
Uden EAGER (default LAZY) ville student.getSchool() være nødvendigt for at hente School
Hvad er fetch(), og hvad bruges det til?
en JavaScript-metode, der bruges til at hente data fra en server via HTTP-anmodninger.
Den kan bruges til at sende GET, POST, PUT og DELETE anmodninger til en backend.
fetch() returnerer et Promise, som enten returnerer et svar (response) eller en fejl (error).
Hvad er DOMContentLoaded, og hvornår bruges det?
en JavaScript-event, der trigger, når hele HTML-dokumentet er indlæst, men før billeder og CSS er loadet.
Hvad betyder relationen mellem Kommune og Region i følgende kode?
@Entity
public class Kommune {
@Id @Column(length = 4) private String kode; private String navn; private String href; @ManyToOne @JoinColumn(name = "region", referencedColumnName = "kode", nullable = false) private Region region; }
Viser en Many-to-One relation, hvor mange Kommune-objekter kan være knyttet til én Region.
@ManyToOne betyder, at hver kommune hører til én region.
@JoinColumn(name = “region”, referencedColumnName = “kode”) gør, at Kommune har en fremmednøgle (region), som refererer til kode i Region.
En kommune SKAL have en region, fordi nullable = false.
Hvad betyder relationen mellem Region og Kommune i følgende kode?
@Entity
public class Region {
@Id
@Column(length = 4)
private String kode;
@Column(nullable = false)
private String navn;
private String href;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "region") @JsonBackReference private Set<Kommune> kommuner = new HashSet<>(); }
Viser en One-to-Many relation, hvor én Region kan have mange Kommune-objekter.
@OneToMany(mappedBy = “region”) betyder, at Region har en liste af Kommuner.
CascadeType.ALL betyder, at hvis en Region slettes, slettes alle dens Kommuner også.
@JsonBackReference forhindrer uendelige loops, når JSON data serialiseres.
Hvad er funktionel programmering?
En måde at skrive kode på, hvor man bruger funktioner uden sideeffekter, og hvor data ikke ændres (immutability).
Hvad er en “ren funktion” (pure function)?
En funktion der altid giver det samme resultat, når du giver den det samme input – og som ikke ændrer noget udenfor sig selv.
Hvad betyder “immutability”?
Det betyder, at data ikke må ændres. Hvis du vil ændre noget, laver du en ny kopi i stedet.
Hvad er et lambda-udtryk?
En kort måde at skrive en funktion uden navn. F.eks. x -> x + 1.
Hvad er et funktionelt interface?
Et interface med præcis én metode. Det kan bruges sammen med lambda.
@FunctionalInterface interface MyFunc {
void doSomething();
}
Hvordan kan man sende en funktion som argument i Java?
Ved at bruge et funktionelt interface og en lambda som parameter.
Hvad er et “Consumer” interface?
Det er et funktionelt interface der tager én input og ikke returnerer noget.
Eksempel: Consumer<String> print = s -> System.out.println(s);</String>
Hvad er et “Predicate”?
Et funktionelt interface der tager én input og returnerer true eller false.
Eksempel: Predicate<Integer> isEven = x -> x % 2 == 0;</Integer>
Hvad er en Stream i Java?
En måde at arbejde med en liste (eller anden datastruktur) trin for trin – f.eks. filtrere, ændre, sortere osv.
Hvad gør map() i en Stream?
Den ændrer (transformerer) hvert element og giver en ny liste.
Eksempel: Gør alle navne store: list.stream().map(String::toUpperCase)
Hvad gør filter() i en Stream?
Den fjerner de elementer, der ikke opfylder en betingelse.
Eksempel: list.stream().filter(n -> n > 5)
Hvad gør flatMap()?
Den tager en liste af lister og flader den ud til én samlet liste.
Hvad gør forEach()?
Den udfører en handling på hvert element – f.eks. udskriver det.
⚠️ Den returnerer ikke noget nyt.
Hvad er forskellen på forEach() og map() i JavaScript?
- forEach = gør noget (fx print) på hvert element, men returnerer ikke noget.
- map = laver et nyt array med ændrede værdier.
Hvad betyder “internal iterator”?
Det betyder, at du ikke selv styrer løkken. Du siger bare “gør dette på hvert element”, fx med map().
Hvordan kæder man flere funktioner sammen i Java?
Med .andThen() – den ene funktion kører efter den anden.