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.java
Java ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」
언급URL : https://stackoverflow.com/questions/27981789/how-to-use-spring-boot-with-mysql-database-and-jpa
'programing' 카테고리의 다른 글
확인 이메일의 ASP.NET 핵심 ID 토큰이 잘못되었습니다. (0) | 2023.04.05 |
---|---|
Angular를 사용하여 쿼리 문자열을 구문 분석하는 가장 좋은 방법html5 모드를 사용하지 않는 JS (0) | 2023.04.05 |
Wordpress - 코드 조각을 레이아웃의 선택된 부분에 포함시키는 플러그인 (0) | 2023.04.05 |
모든 문자열 속성에서 선행/추적 공백을 잘라내도록 잭슨을 구성할 수 있습니까? (0) | 2023.04.05 |
리액트를 사용하여 HTML 태그에 클래스를 추가하시겠습니까? (0) | 2023.04.05 |