findByAll (), findBy {columnName} не работает в Spring данных jpa - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в весенней загрузке и весенних данных JPA. Я пытаюсь получить все данные из таблицы, а также хочу получить данные по имени пользователя, поэтому я использую методы findAll() и findByUsername(String username) в своем хранилище. Я расширил JpaRepository в своем интерфейсе репозитория. Но не удалось получить данные. findAll() return empty, где findByUsername return null object. В таблице одна запись. И еще одна вещь, что repository.save (object) метод работает нормально. Возникают проблемы только в методах поиска.

Мой интерфейс хранилища.

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.SpringBoot.model.User;

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

    User findByUsername(String username);
}

Мой класс обслуживания.

@Service
public class UserServiceImp {

    UserRepository userRepository;

    public List<User> getAllUsers() throws Exception {
        return (List<User>) userRepository.findAll();
    }

    public User getUserById(String username) throws Exception {
        System.out.println("in service imp class ***************************");
        return userRepository.findByUsername(username);
    }

    public void addUsers(User user) throws Exception {
        userRepository.save(user);

    }
}

Мой класс сущности.

@Entity
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String username;
    private String name;
    private int userCode;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getUserCode() {
        return userCode;
    }

    public void setUserCode(int userCode) {
        this.userCode = userCode;
    }
}

Мой контроллер

package com.SpringBoot.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.SpringBoot.model.User;
import com.SpringBoot.service.Userservice;

@RestController
public class UserController {

    @Autowired
    UserServiceImp userservice;

    @PostMapping("/user/add")
    public void addUsers(@RequestBody User user) {
        try {
            userservice.addUsers(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable("id") String username) {
        User user = null;
        try {
            System.out.println("***************  " + username);
            user = userservice.getUserById(username);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }


    @GetMapping(value = "/users")
    public List<User> getAllUser() {
        List<User> user = new ArrayList<User>();
        System.out.println("***************  ");
        try {
            user = userservice.getAllUsers();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }
}

Мой пом. xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test.junit</groupId>
    <artifactId>SpringBoot</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.4</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Попробуйте изменить класс сущностей, связав имя столбца таблицы с каждым членом класса сущности. Например,

@Entity
@Table(name="USER")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="ID", unique=true, nullable=false, precision=20)
    private Long id;

    @Column(name="USERNAME", length=100)
    private String username;

    @Column(name="NAME", length=100)
    private String name;

    @Column(name="USER_CODE", precision=20)
    private int userCode;
}

by Если приведенный выше код не работает, попробуйте сгенерировать классы сущностей, создав проект JPA и импортировав объекты из таблиц

0 голосов
/ 17 апреля 2020

Вам необходимо внедрить хранилище в класс обслуживания либо с помощью @Autowired, либо с помощью инжекции в конструктор. Конструктор инъекций рекомендуется Spring

@Service
public class UserServiceImp {

private final UserRepository userRepository;

public UserServiceImp(final UserRepository userRepository){
    this.userRepository=userRepository;
}



public List<User> getAllUsers() throws Exception {
    return (List<User>) userRepository.findAll();
}

public User getUserById(String username) throws Exception {
    // FiXME
    System.out.println("in service imp class ***************************");
    return userRepository.findByUsername(username);
}

public void addUsers(User user) throws Exception {
    userRepository.save(user);

 }
}
...