jpa란
ORM 기술로 객체 지향 프로그래밍을 통해 데이터베이스와의 상호 작용을 쉽게 해주는 기술이다.
JPA를 이용하면 SQL 쿼리를 직접 작성하지 않고도 데이터베이스 작업을 진행할 수 있다.
의존성 추가
나는 JPA 와 mysql을 사용하였다.
//jpa
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '3.3.0'
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.33'
엔티티 클래스 작성
@Getter
@Table(name = "users")
@NoArgsConstructor
@Entity
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long number;
@Column
private String id;
@Column
private String pw;
@Column
private String name;
@Builder
public Users(Long number,String id,String pw,String name){
this.number=number;
this.id=id;
this.pw=pw;
this.name=name;
}
}
- @Id
- 해당 테이블의 PK 필드를 나타낸다.
- @Column
- 테이블의 컬럼을 나타내며 굳이 선언하지 않더라고 해당 클래스의 필드는 모두 칼럼이 된다.
- 사용하는 이유는, 기본값 외에 추가로 변경이 필요한 옵셥이 있으면 사용한다.
- @Builder
- 해당 클래스의 빌더 패턴 클래스를 생성
- 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- 자동으로 번호가 증가하게 만들어준다.
- @Table(name = "users")
- 데이터베이스에서 users라는 테이블에 매핑된다는 것을 의미한다.
Repository 클래스 작성
JpaRepository 기본적으로 제공하는 메서드들은
- save(S entity): 엔티티를 저장하거나 업데이트합니다.
- findById(ID id): 기본 키를 기준으로 엔티티를 조회합니다.
- findAll(): 모든 엔티티를 조회합니다.
- deleteById(ID id): 기본 키를 기준으로 엔티티를 삭제합니다.
- deleteAll(): 모든 엔티티를 삭제합니다.
- count(): 엔티티의 개수를 반환합니다.
만약 위의 기본 제공 메스드외의 추가적으로 데이터베이스에서 원하는 값을 얻기 위해서는
public interface UserRepository extends JpaRepository <Users,Long> {
//id 값으로 그거와 같은 user 데이터 모두 조회
List<Users> findAllById(String id);
}
이렇게 내가 원하는 메소드를 만들어서 데이터 베이스에서 값을 조정할 수 있다.
이것 외에도 sql 문을 사용해서도 작성이 가능하다.
위의 메서드를 sql 문으로 작성한 경우
@Query(value = "SELECT * FROM users WHERE id = :id", nativeQuery = true)
List<Users> findAllByIdNative(@Param("id") String id);
@Query("select u from Users u where u.id = :id" )
List<Users> findAllByIdNative2(@Param("id") String id);
이렇게 2개의 방식으로 sql 문을 작성하여 사용할수 있다.
이제 간단하게 테스트를 해보자
@Autowired
private UserRepository userRepository;
@RequestMapping("/")
public String main(){
userRepository.save(Users.builder().id("k").pw("j").name("n").build());
System.out.println(userRepository.findById(1L).get().getNumber());
//List<Users> users=userRepository.findAllById("k");
List<Users> users=userRepository.findAllByIdNative2("k");
for(Users i : users)
{
System.out.println("User Number: " + i.getNumber());
}
return "home";
}
기본 레퍼지토리 메서드인 save를 이용하여 user 정보 데이터를 db에 저장한다.
그리고 그후 기본 메서드인 findById를 이용하여 첫 번째 번호를 가지고 있는 사람의 번호를 출력하였다.
그리고 직접 만든 findAllById 사용하여 id 이름이 "k"인 모든 유저 정보를 불러올 수 있었고
findAllByIdNative2 이것또한 첫 번째와 같은 결과가 나온다.
반응형
'자바 공부 > 스프링공부' 카테고리의 다른 글
Jpa를 이용하여 게시판 만들어 보기 2 (0) | 2024.08.08 |
---|---|
jpa를 이용하여 게시판 만들어 보기 1 (0) | 2024.08.07 |
My Batis 사용법 (0) | 2024.07.04 |
SLF4J 스프링 로그 사용방법 (0) | 2024.05.26 |
토이프로젝트 sns 만들어보기 1 (0) | 2024.05.26 |