월루를 꿈꾸는 대학생
[Spring Boot] Rest API & MySQL & MyBatis 연동 본문
데이터 베이스에 테이블과 속성을 만들 경우
객체의 이름과 변수이름이랑 같도록
데이터베이스 및 테이블 생성
CREATE TABLE `springboot`.`userprofile` (
`id` INT NOT NULL,
`name` VARCHAR(64) NULL,
`phone` VARCHAR(64) NULL,
`address` VARCHAR(256) NULL,
PRIMARY KEY (`id`));
데이터베이스랑 테이블 생성 확인
이제 코드랑 디비랑 연결해야함
mysql 라이브러리랑
sql 매핑 기술
2가지가 필요
mysql이랑 mybatis 추가
gradle 파일에 해당 문구 추가
//mysql connector
implementation 'mysql:mysql-connector-java'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'
applicaion.properties 파일에 디비 설정 추가
비밀번호는 8자 이상 넣어야 에러 안 남
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=
spring.thymeleaf.cache=false
자바와 sql 매핑하는 게 필요
mapper 전용 인터페이스를 만들곡 sql문이랑 매핑하기
파라미터의 경우 ${} 가 아니라 #{} 임
@Mapper
public interface UserProfileMapper {
//전달받은 id로 데이터베이스 테이블에서 조회후 객체를 리턴
//이거랑 매핑할 sql문을 어노테이션으로 지정
//id 표시할 때 $ 가 아니라 # 임
@Select("SELECT * FROM UserProfile WHERE id=#{id}")
// 파라미터로 전달된 id가 sql문에 가고 sql문이 실행
// 리턴을 해당 디비에 있는 값들을 리턴하고 UserProfile에 반환
UserProfile getUserProfile(@Param("id") String id);
@Select("SELECT * FROM UserProfile")
List<UserProfile> getUserProfileList();
// sql문에 의해 적용 혹은 영향받은 레코드의 갯수를 반환
// 보통 insert 1개 , update도 1 , delete 도 1 -> 제대로 동작할때
// 0이면 제대로 동작 x
@Insert("INSERT INTO UserProfile VALUES(#{id}, #{name}, #{phone}, #{address})")
int insertUserProfile(@Param("id") String id, @Param("name") String name, @Param("phone") String phone, @Param("address") String address);
@Update("UPDATE UserProfile SET name=#{name}, phone=#{phone}, address=#{address} WHERE id=#{id}")
int updateUserProfile(@Param("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address);
@Delete("DELETE FROM UserProfile WHERE id = #{id}")
int deleteUserProfile(@Param("id") String id);
}
컨트롤러에서 해당 경로와 put,get 이런 거에 따라서
해당하는 함수가 호출되면 해당 호출되는 함수에 있는 mapper의 함수가 어노테이션에서 연동되는 sql문이 실행되고 결과값을 리턴하게 됨
@GetMapping("/user/{id}")
public UserProfile getUserProfile(@PathVariable("id") String id) {
// UserProfile 객체 리턴하면 자동으로 JSON형태로 만들어줌
//return userMap.get(id);
//mapper에 정의된 getUserProfle이 호출되고 거기에 연동된 sql문 실행된 후 결과를 UserProfile로 리턴
return mapper.getUserProfile(id);
}
@GetMapping("user/all")
public List<UserProfile> getUserProfileList() {
//맵에 있는 리스트를 array value로 리턴
//return new ArrayList<UserProfile>(userMap.values());
return mapper.getUserProfileList();
}
// put 같은 거는 브라우저말고 postman같은 툴을 쓰자
@PutMapping("/user/{id}")
// http 형태의 파라미터로 값 전달
public void putUserProfile(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address) {
// 데이터 생성시 패스로 아이디 받고 , 파라미터로 나머지 값을 받네
// UserProfile userProfile = new UserProfile(id, name, phone, address);
//위에서 만든 객체 추가
//userMap.put(id, userProfile);
mapper.insertUserProfile(id, name, phone, address);
}
//수정
@PostMapping("/user/{id}")
public void postUserProfile(@PathVariable("id") String id, @RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address) {
//얘는 수정용임
// UserProfile userProfile = userMap.get(id);
// userProfile.setName(name);
// userProfile.setPhone(phone);
// userProfile.setAddress(address);
mapper.updateUserProfile(id, name, phone, address);
}
@DeleteMapping("/user/{id}")
public void deleteUserProfile(@PathVariable("id") String id) {
//userMap.remove(id);
mapper.deleteUserProfile(id);
}
전체 코드
https://github.com/suhyun96/SpringBoot/tree/main/RestAPI
GitHub - suhyun96/SpringBoot: 스프링 부트 공부한 내용 정리용
스프링 부트 공부한 내용 정리용. Contribute to suhyun96/SpringBoot development by creating an account on GitHub.
github.com
출처
'Programing > Spring Boot' 카테고리의 다른 글
[Springboot] @RequireArgsConstructor & Model (0) | 2023.01.01 |
---|---|
[GIT] .gitignore 관리 (0) | 2022.12.23 |
[Spring Boot] 간단한 RestApi 만들기 (0) | 2022.12.23 |
[Spring Boot] 리포지토리 (0) | 2022.12.23 |
[Spring Boot] 데이터 베이스 세팅 JPA (0) | 2022.12.15 |