JPA(Java Persistence API)
자바 객체와 RDB를 매핑하는 약속, SQL을 직접 작성하지 않아도 DB 작업 가능
Spring Data JPA
Spring이 JPA도 도와줄게
JpaRepository
Spring Data JPA가 지원하는, CRUD 기능을 제공하는 인터페이스
어노테이션
| @Entity | DB 테이블과 매핑되는 객체를 나타내는 어노테이션 |
| @Repository | 여기가 Repository야 |
| @Bean | 이거 Bean으로 만들자 |
| @Configuration | Spring Bean을 정의하는 클래스를 나타내는 어노테이션 |
| @Id | Entity Class에서 primary key 항목 지정 |
| @GeneratedValue(strategy = GenerationType.IDENTITY) | Auto increment 기능을 사용할 항목 지정 |
| @PropertySource("classpath:/application.properties") | 데이터베이스 연결정보 이 파일로 쓰자 |
| @ConfigurationProperties(prefix="spring.datasource.hikari") | prefix로 시작하는 설정값들을 객체에 자동으로 매핑 |
1. 프로젝트 만들 때 의존성 추가
- JDBC API
- MariaDB Driver
- Spring Data JPA
- Spring Web
2. application.properties에 데이터베이스 연결정보 추가 (나뭇잎 같은 아이콘)
spring.application.name=SpringBootDB
//데이터베이스 연결 URL 지정
spring.datasource.hikari.jdbc-url=jdbc:mariadb://localhost:3306/DB이름
//DB 접속 계정 ID
spring.datasource.hikari.username=stdUser
//DB 접속 계정 비밀번호
spring.datasource.hikari.password=wkvmtlf2
//JDBC 드라이버 클래스 이름 지정 (지금은 MariaDB)
spring.datasource.hikari.driver-class-name=org.mariadb.jdbc.Driver
//너가 적는 SQL을 콘솔에 출력해줘
spring.jpa.show-sql=true
3. Entity 클래스 정의
@Entity
public class User { //DB의 테이블 이름도 user
//테이블 항목
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private int age;
public User() {} //기본생성자 반드시 넣어줌
// ID 없이 생성자 (INSERT 시 사용)
public User(String name, int age) {
this.name = name;
this.age = age;
}
// 전체 필드 생성자 (UPDATE, SELECT 시 사용)
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
// Getters and Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
4. Repository
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
//믿을 수 없지만 그냥 비어있어도 된다
}
주의사항: Entity import할 때 패키지 안에 있는 걸로 import하기
5. Service
@Service
public class UserService {
// 생성자가 하나일 때 @Autowired는 생략 가능
private final UserRepository repository;
public UserService(UserRepository repository) {
this.repository = repository;
}
// CREATE
public User create(User user) {
return repository.save(user);
}
// READ
public List<User> read() {
return repository.findAll();
}
// DELETE
public int delete(int id) {
repository.deleteById(id);
}
}
지난번에는 @Autowired를 통해서 의존성 주입을 Spring한테 맡겼는데 이번에는 생성자가 코드에 있어서 의문이 생겼다. 그래서 코파일럿한테 물어봤다.


그러니까 내가 생성자 코드만 써두고 생성자를 호출하지 않아도 알아서 만들어진다는 말인 것 같다. 나는 생성자 안 써도 그것까지 해주는 줄 알았지... 이거라도 해주는 게 어디야...

6. Controller
@RestController
@RequestMapping("/user")
public class SpringDBController {
private final UserService service;
public SpringDBController(UserService service) {
this.service = service;
}
@GetMapping("/list")
public List<User> read(){
return service.read();
}
@PostMapping()
public User create(@RequestBody User user) {
return service.create(user);
}
@PostMapping("/submitForm") //입력폼과 연결
public User submit(@RequestParam(name="name") String name, @RequestParam(name="age") int age) {
System.out.println(name+ ":" + age);
return service.create(new User(name, age));
}
}
7. Configuration
@Configuration
@PropertySource("classpath:/application.properties")
public class DBConfiguration {
@Bean
@ConfigurationProperties(prefix="spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@Bean
public DataSource dataSource() throws Exception{
System.out.println("시작!");
DataSource dataSource = new HikariDataSource(hikariConfig());
//System.out.println(dataSource);
return dataSource;
}
}
Bean: Spring이 관리하는 객체
생성, 초기화, 소멸까지 Spring이 알아서 해줌
DBCP(Database Connection Pool): 데이터베이스 연결을 관리해주는 라이브러리
애플리케이션이 시작될 때 미리 여러 개의 데이터베이스 연결을 Connection Pool에 생성해 두고 필요할 때마다 사용 후 반환하여 재사용할 수 있게 해줌, JDBC를 사용함.
HikariCP(Hikari Connection Pool): Spring의 기본 DBCP
8. html
<html>
<body>
<meta charset="UTF-8">
<form method="post" action="http://127.0.0.1:8080/user/submitForm" accept-charset="UTF-8">
<input type="text" name="name" value="이름" />
<input type="number" name="age" value="5" />
<button type="submit" >보내기</button>
</form>
</body>
</html>
9. SpringBootApplication
@SpringBootApplication
public class SpringBootDbApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDbApplication.class, args);
System.out.println("Spring Data JPA로 CRUD 만들기 시작");
}
}
패키지 구조
주의할 것: kr.ac.ewha.java2.뭐시기 패키지들은 모두 kr.ac.ewha.java2 패키지의 하위 패키지이다

실행결과


'JAVA' 카테고리의 다른 글
| [마피아] Message (0) | 2025.12.02 |
|---|---|
| [마피아] Role (0) | 2025.12.01 |
| [마피아] Start Sequence (0) | 2025.11.21 |
| [마피아] Join Sequence (0) | 2025.11.21 |
| [JAVA] Spring Boot - 1 (0) | 2025.11.18 |