programing

MySQL 데이터베이스 및 JPA에서 Spring Boot을 사용하는 방법

showcode 2023. 4. 5. 22:29
반응형

MySQL 데이터베이스 및 JPA에서 Spring Boot을 사용하는 방법

MySQL과 JPA로 Spring Boot을 설정하고 싶습니다.이를 위해 작성:사람

package domain;

import javax.persistence.*;

@Entity
@Table(name = "person")
public class Person {

@Id
@GeneratedValue
private Long id;

@Column(nullable = false)
private String firstName;

// setters and getters
}

Person Repository(개인 저장소)

package repository;

import domain.Person;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;


public interface PersonRepository extends CrudRepository<Person, Long> {

Page<Person> findAll(Pageable pageable);
}

Person Controller(Person Controller)

package controller;

import domain.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import repository.PersonRepository;

@Controller
public class PersonController {

@Autowired
private PersonRepository personRepository;

@RequestMapping("/")
@ResponseBody
public String test() {
    Person person = new Person();
    person.setFirstName("First");
    person.setLastName("Test");
    personRepository.save(person);
    return "hello";
}
}

시작 클래스의 예:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Example {

public static void main(String[] args) throws Exception {
    SpringApplication.run(Example.class, args);
}

}

데이터베이스 구성을 위해 application.properties를 만듭니다.

spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.globally_quoted_identifiers=true

spring.datasource.url=jdbc:mysql://localhost/test_spring_boot
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver

프로젝트 구조는 다음과 같습니다.

여기에 이미지 설명 입력

그 결과 다음과 같은 예외가 있습니다.

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [Example]; nested exception is java.io.FileNotFoundException: class path resource [org/springframework/security/config/annotation/authentication/configurers/GlobalAuthenticationConfigurerAdapter.class] cannot be opened because it does not exist

예를 들어 spring-boot-sample-data-jpa/pom.xml을 사용합니다.

나도 너처럼 프로젝트를 만들었어.구조는 이렇습니다.

프로젝트 구조

클래스는 복사하여 붙여넣은 것입니다.

application.properties를 다음과 같이 변경했습니다.

spring.datasource.url=jdbc:mysql://localhost/testproject
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

하지만 당신의 문제는 당신의 pom.xml에 있다고 생각합니다.

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

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

<artifactId>spring-boot-sample-jpa</artifactId>
<name>Spring Boot JPA Sample</name>
<description>Spring Boot JPA Sample</description>

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

차이점이 있는지 이 파일들을 확인하십시오.도움이 되었으면 좋겠다

업데이트 1: 사용자 이름이 변경되었습니다.예에 대한 링크는 https://github.com/Yannic92/stackOverflowExamples/tree/master/SpringBoot/MySQL 입니다.

클래스를 저장소, 컨트롤러, 도메인 등의 특정 패키지로 이동하는 경우 일반 패키지만 해당@SpringBootApplication충분하지 않습니다.

구성 요소 검색을 위한 기본 패키지를 지정해야 합니다.

@ComponentScan("base_package")

JPA의 경우

@EnableJpaRepositories(basePackages = "repository")

또한 필요하기 때문에 봄 데이터에서는 저장소 인터페이스를 찾는 위치를 알 수 있습니다.

Jpa 기반 응용 프로그램의 경우: 기본 패키지 스캔 @EnableJpaRepository(basePackages = "저장소") 한 번만 사용해 보십시오!!!
프로젝트 구조

com
 +- stack
     +- app
     |   +- Application.java
     +- controller
     |   +- EmployeeController.java
     +- service
     |   +- EmployeeService.java
     +- repository
     |   +- EmployeeRepository.java
     +- model
     |   +- Employee.java
-pom.xml
dependencies: 
    mysql, lombok, data-jpa

application.properties

#Data source :
spring.datasource.url=jdbc:mysql://localhost:3306/employee?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.generate-ddl=true
spring.datasource.driverClassName=com.mysql.jdbc.Driver

#Jpa/Hibernate :
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto = update

직원.자바

@Entity
@Table (name = "employee")
@Getter
@Setter
public class Employee {

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

    @Column (name = "first_name")
    private String firstName;
    @Column (name = "last_name")
    private String lastName;
    @Column (name = "email")
    private String email;
    @Column (name = "phone_number")
    private String phoneNumber;
    @Column (name = "emp_desg")
    private String desgination;
}

Employee Repository.java

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}

Employee Controller.java

@RestController
public class EmployeeController {

    @Autowired
    private EmployeeService empService;

    @GetMapping (value = "/employees")
    public List<Employee> getAllEmployee(){
        return empService.getAllEmployees();
    }

    @PostMapping (value = "/employee")
    public ResponseEntity<Employee> addEmp(@RequestBody Employee emp, HttpServletRequest 
                                         request) throws URISyntaxException {
        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(new URI(request.getRequestURI() + "/" + emp.getId()));
        empService.saveEmployee(emp);
        return new ResponseEntity<Employee>(emp, headers, HttpStatus.CREATED);
    }

종업원 서비스자바

public interface EmployeeService {
    public List<Employee> getAllEmployees();
    public Employee saveEmployee(Employee emp);
}

Employee Service Impl.java

@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {

    @Autowired
    private EmployeeRepository empRepository;

    @Override
    public List<Employee> getAllEmployees() {
        return empRepository.findAll();
    }

    @Override
    public Employee saveEmployee(Employee emp) {
        return empRepository.save(emp);
    }
}

종업원 어플리케이션자바

@SpringBootApplication
@EnableJpaRepositories(basePackages = "repository")
public class EmployeeApplication {
    public static void main(String[] args) {
        SpringApplication.run(EmployeeApplication.class, args);
    }
}

mysql-connector-java 종속성을 추가하십시오.

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

application.properties에 다음 속성을 추가합니다.

# Data Source properties
spring.datasource.url=jdbc:mysql://localhost:3306/yourDatabaseName?useSSL=false
spring.datasource.username=root
spring.datasource.password=YourPassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# JPA properties 
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql=true
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update

스프링 부츠 레퍼런스에 이렇게 적혀있었어요

클래스에 패키지 선언이 포함되지 않은 경우 클래스는 "기본 패키지"에 있는 것으로 간주됩니다.일반적으로 "기본 패키지" 사용은 권장되지 않으므로 피해야 합니다.@ComponentScan, @EntityScan 또는 @SpringBootApplication 주석을 사용하는 SpringBoot 어플리케이션에서는 모든 jar의 모든 클래스가 읽히기 때문에 특히 문제가 발생할 수 있습니다.

com
 +- example
     +- myproject
         +- Application.java
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

당신의 경우.를 추가해야 합니다.scanBasePackages에서@SpringBootApplication주석입니다.같은@SpringBootApplication(scanBasePackages={"domain","contorller"..})

코드는 기본 패키지에 포함되어 있습니다.즉, 커스텀 패키지가 없는 src/main/java의 모든 파일이 소스입니다.패키지 n을 만들고 소스 파일을 그 안에 넣을 것을 강력히 권장합니다.

Ex-
 src->
     main->
          java->
                com.myfirst.example
                   Example.java
                com.myfirst.example.controller
                   PersonController.java
                com.myfirst.example.repository
                  PersonRepository.java
                com.myfirst.example.model
                   Person.java

이것으로 당신의 문제가 해결되기를 바랍니다.

수 요.Application.javaJava ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」

언급URL : https://stackoverflow.com/questions/27981789/how-to-use-spring-boot-with-mysql-database-and-jpa

반응형