Spring Boot Datenbankabfrage

TonioTec

Mitglied
Moin Leute,

ich hab momentan dass Problem das ich schwer in das Thema Query hineinkomme. Ich wollte mit Spring Boot , Hibernate und JavaFX ein Spiel bauen. Da ich ich momentan an dem Login Window bin möchte ich die Login Funktion schreiben, doch da fängt das Problem an. Wie komme ich an die Daten ran. (zb. Name) um am ende eine Prüfung zu. Kann da mir einer einen Denkanstoß geben ?


Danke 😉


Java:
package com.battelquiz.battelquizspringboot.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.battelquiz.battelquizspringboot.entity.User;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

}

Java:
package com.battelquiz.battelquizspringboot;

import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.battelquiz.battelquizspringboot.controller.MitarbeiterService;
import com.battelquiz.battelquizspringboot.entity.Employee;
import com.battelquiz.battelquizspringboot.entity.Item;

import com.battelquiz.battelquizspringboot.entity.User;
import com.battelquiz.battelquizspringboot.exception.HibernateUtil;
import com.battelquiz.battelquizspringboot.exception.ResourceNotFoundException;
import com.battelquiz.battelquizspringboot.repository.EmployeeRepository;

import com.battelquiz.battelquizspringboot.repository.UserRepository;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;



import javafx.application.Application;
import view.Login;

@SpringBootApplication
@ComponentScan()
public class BattelquizSpringBootApplication {

    static EmployeeRepository employeeRepo  ;
    
    public static void main(String[] args) {
    
        
        SpringApplication.run(BattelquizSpringBootApplication.class, args);
        
        Application.launch(Login.class);       

    }
}

Java:
package com.battelquiz.battelquizspringboot.entity;

import java.util.ArrayList;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;



@Entity
@NamedQuery(name = "User.findByUserName",
query = "from User where lastName = :lastName")
@Table(name="users")
public class User {
    
    
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    @Column(name="first_name")
    private String firstName;
    
    @Column(name="last_name")       
    private String lastName;
    
    @Column(name="email")
    private String email;
    
    
    
    public User () {
        
    }
    public User(String firstName, String lastName, String email) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }
    
    
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    
    
    

}
 
Der Query gehört ins Repo. Ein named query ist dafür nicht notwendig, das macht Spring, bei so einfachen queries, automatisch anhand des Namens.
Java:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    Optional<User> findUserByLastName(String lastName);
    
}

Im Entity also löschen.

Und so verwendest Du es dann.
Java:
@Autowire
UserRepository userRepository;

...

Optional<User> optionalUser = userRepository.findUserByLastName("Mustermann");

if(optionalUser.isPresent()) {
    User user = optionalUser.get();
    // do something with the user
}

Ich würde den Login mit Email, Benutzername o.ä. machen, es gibt ja durchaus Menschen mit dem gleichen Namen.
 
Der Query gehört ins Repo. Ein named query ist dafür nicht notwendig, das macht Spring, bei so einfachen queries, automatisch anhand des Namens.
Java:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    Optional<User> findUserByLastName(String lastName);
   
}

Im Entity also löschen.

Und so verwendest Du es dann.
Java:
@Autowire
UserRepository userRepository;

...

Optional<User> optionalUser = userRepository.findUserByLastName("Mustermann");

if(optionalUser.isPresent()) {
    User user = optionalUser.get();
    // do something with the user
}

Ich würde den Login mit Email, Benutzername o.ä. machen, es gibt ja durchaus Menschen mit dem gleichen Namen.
Hab das jetzt so gemacht ist das richtig ? Oder kannst du da noch ein Fehler erkennen?!
ich bekomme folgende Fehlermeldung ->

Exception in thread "main" java.lang.NullPointerException


at com.battelquiz.battelquizspringboot.BattelquizSpringBootApplication.main(BattelquizSpringBootApplication.java:71)

[CODE lang="java" title="SpringBootApplication"]package com.battelquiz.battelquizspringboot;

import java.util.List;
import java.util.Optional;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.battelquiz.battelquizspringboot.controller.MitarbeiterService;
import com.battelquiz.battelquizspringboot.entity.Employee;
import com.battelquiz.battelquizspringboot.entity.Item;

import com.battelquiz.battelquizspringboot.entity.User;
import com.battelquiz.battelquizspringboot.exception.HibernateUtil;
import com.battelquiz.battelquizspringboot.exception.ResourceNotFoundException;
import com.battelquiz.battelquizspringboot.repository.EmployeeRepository;

import com.battelquiz.battelquizspringboot.repository.UserRepository;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;



import javafx.application.Application;
import view.Login;

@SpringBootApplication
@ComponentScan()
public class BattelquizSpringBootApplication {

@Autowired
static
UserRepository userRepository;


public static void main(String[] args) {
//Login2 frame = new Login2();
//frame.setVisible(true);




SpringApplication.run(BattelquizSpringBootApplication.class, args);







Optional<User> optionalUser = userRepository.findUserByLastName("Tonio");

if(optionalUser.isPresent()) {
User user = optionalUser.get();
System.out.println(user);
}

//MitarbeiterService ms = new MitarbeiterService();
//System.out.println(ms.findByIsbnCode("Tonio"));



Application.launch(Login.class);








}
}
[/CODE]


Java:
package com.battelquiz.battelquizspringboot.repository;

import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.battelquiz.battelquizspringboot.entity.User;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    Optional<User> findUserByLastName(String lastName);
}

Java:
package com.battelquiz.battelquizspringboot.entity;

import java.util.ArrayList;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;



@Entity
@Table(name="users")
public class User {
    
    
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    @Column(name="first_name")
    private String firstName;
    
    @Column(name="last_name")       
    private String lastName;
    
    @Column(name="email")
    private String email;
    
    
    
    public User () {
        
    }
    public User(String firstName, String lastName, String email) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }
    
    
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    
    
    

}
 
Ja, das funktioniert so nicht. Da sind ein paar Fehler drin.

In der main Methode sagst Du Spring er soll eine Instanz der Klasse BattelquizSpringBootApplication erstellen. Das ist sozusagen Dein Entrypoint.
Java:
SpringApplication.run(BattelquizSpringBootApplication.class, args);

Das bedeutet, UserRepository wurde hier noch nicht injected und ist daher null.

Java:
@SpringBootApplication
public class BattelquizSpringBootApplication {
    private final UserRepository userRepository;
    @Autowired
    public BattelquizSpringBootApplication(final UserRepository userRepository) {
        this.userRepository = userRepository;
        Optional<User> optionalUser = userRepository.findUserByLastName("Tonio");
        if(optionalUser.isPresent()) {
            User user = optionalUser.get();
          System.out.println(user);
        }
    }
   
    public static void main(String[] args) {
        SpringApplication.run(BattelquizSpringBootApplication.class, args);
        Application.launch(Login.class);
    }
}

Desweiteren schaut für mich die Verbindung von Spring Boot mit JavaFx nicht richtig aus, hier habe ich aber keine Erfahrung, ich nutze die 2 immer nur Separat.
 

Zurück
Oben