Java 向Spring数据存储库添加自定义功能的问题

Java 向Spring数据存储库添加自定义功能的问题,java,spring-boot,spring-data,Java,Spring Boot,Spring Data,我通过crudepository的内置方法获取数据,但在将自定义方法应用于数据存储库时出错 这是存储库 @Repository public interface EmployeeRepository extends CrudRepository<Employee, Integer> { List<Employee> findAllByEmployeeLastName(String last); } 堆栈跟踪: [I:\spring\u boot\u projec

我通过
crudepository
的内置方法获取数据,但在将自定义方法应用于数据存储库时出错

这是存储库

@Repository
public interface EmployeeRepository extends CrudRepository<Employee, Integer> {
    List<Employee> findAllByEmployeeLastName(String last);
}
堆栈跟踪:

[I:\spring\u boot\u project\u factory\project\u factory\u 1\section\u 1\project\target\classes\com\project\service\EmployeeService.class]: 通过构造函数参数0表示的未满足依赖关系; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“employeeRepository”的bean:调用init 方法失败;嵌套异常为java.lang.IllegalArgumentException: 无法为方法public abstract java.util.List创建查询 com.project.repository.EmployeeRepository.findByEmployeeLastName(java.lang.String)! 找不到类型Employee的属性employeeLastName!2019-04-19 15:02:25.321信息3920---[重新启动主站] j、 LocalContainerEntityManagerFactoryBean:正在关闭JPA 持久化单元“默认值”的EntityManagerFactory 2019-04-19 15:02:25.334信息3920---[重新启动主站] com.zaxxer.hikari.HikariDataSource:HikariPool-1-关闭 启动。。。2019-04-19 15:02:25.345信息3920---[restartedMain] com.zaxxer.hikari.HikariDataSource:HikariPool-1-关闭 完整的。2019-04-19 15:02:25.348信息3920---[重新启动主站] o、 apache.catalina.core.StandardService:停止服务[Tomcat] 2019-04-19 15:02:25.390信息3920---[重新启动主站] ConditionEvaluationReportLoggingListener:

启动ApplicationContext时出错。显示条件报告的步骤 在启用“调试”的情况下重新运行应用程序。2019-04-19 15:02:25.409 错误3920---[restartedMain]o.s.boot.SpringApplication
:应用程序运行失败

org.springframework.beans.factory.unsatifiedDependencyException: 创建文件中定义了名为“employeeRestController”的bean时出错


日志中指出:

无法为方法public abstract java.util.List创建查询 com.project.repository.EmployeeRepository.findByEmployeeLastName(java.lang.String)! 找不到类型Employee的属性employeeLastName

EmployeeRepository
中的方法名称应为
findAllByLast(最后一个字符串)


另外,我建议您阅读java编码和命名约定,以避免此类错误。

在数据存储库中创建自定义方法时,您的方法命名约定是强制性的,取决于您的DAO类字段

在姓氏的DAO类中,您已经创建了
last
变量,因此您的方法名不能是findAllByLastName(字符串last),因为DAO类中没有任何名为lastName的变量


所以应该是
findAllByLast(最后一个字符串)
findByLast(最后一个字符串)

显示您的员工实体和stacktrace of Exception已通过编辑先生添加。非常感谢您的帮助,我们一定会遵循您的建议。我建议您更好地了解
spring数据
@Service
public class EmployeeService {

    private EmployeeRepository employeeRepository;

    @Autowired
    public EmployeeService(EmployeeRepository _employeeRepository) {
        employeeRepository = _employeeRepository;
    }

    public Iterable<Employee> findAll() {
        return employeeRepository.findAll();
    }

    public Employee findById(int id) {

        Optional<Employee> id_of_employee = employeeRepository.findById(id);

        Employee employee = null;

        if (id_of_employee.isPresent()) {
            employee = id_of_employee.get();
        } else {
            throw new RuntimeException("ID not found : " + id);
        }

        return employee;
    }

    public List<Employee> getEmployeeByLastName(String last) {
        return employeeRepository.findAllByEmployeeLastName(last);
    }
}
@RestController
@RequestMapping("/api") public class EmployeeRestController {

    public EmployeeService employeeService;

    @Autowired
    public EmployeeRestController(EmployeeService _employeeService) {
        employeeService = _employeeService;
    }

    @GetMapping("/list_of_employees")
    public Iterable<Employee> getAllEmployees() {
        return employeeService.findAll();
    }

    @GetMapping("/find_an_employee_by_id/{id}")
    public Employee getAnEmplopyeeByID(@PathVariable int id) {
        Employee employee = employeeService.findById(id);

        if (employee == null) {
            throw new RuntimeException("ID not found : " + id);
        }

        return employee;

    }

    @RequestMapping("/find_employee_by_last_name/{last}")
    public List<Employee> getEmployeeByLastName(@PathVariable(value = "last") String last) {
        return employeeService.getEmployeeByLastName(last);
    }

}
@Entity
@Table(name = "employees")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "first_name")
    private String first_name;

    @Column(name = "last")
    private String last;

    @Column(name = "salary")
    private double salary;

    @Column(name = "email")
    private String email;

    public int getId() {
        return id;
    }

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

    public String getFirst_name() {
        return first_name;
    }

    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }

    public String getLast() {
        return last;
    }

    public void setLast(String last) {
        this.last= last;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Employee() {
    }
}