MyBatis는 현재까지 레거시 프로젝트에서만 사용했었다.
https://mybatis.org/mybatis-3/ko/index.html
JPA는 SQL문은 거진 사용안함
MyBatis는 SQL위주
단순 CRUD는 JPA가 편하다
테이블 구성이 복잡한 경우에는 MyBatis ( join 사용이 필요할 때 )사용이 편리하다.
스프링부트에서 MyBatis를 사용해 보겠당.
레거시 프로젝트에서는 MyBatis사용을 위해서 많은 설정이 필요했는데,
스프링 부트에서는 많은 설정이 필요없다.
또한 만약
백엔드랑 프론트랑 나눠서 프로젝트를 한다면
백엔드에서는 데이터만 rest api까지만 보냄
화면은 프론트엔드에서 하고 프론트에서 데이터를 받아서 화면을 보여줌
2.7.17로 변경!!
3.1.5 버전은 java 17버전부터 가능
웹프로젝트에는 spring web 필요
새로고침 spring boot devtool
get ,set 메소드 자동생성 lombok
mybais framwork/ mysql driver - DB
finish
java 버전 선택 잘못해서 ㅎ . 11버전으로 pom.xml 수정하고 메이븐 업데이트함
User 클래스 생성
package com.myapp.mybatis.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor //모든 필드 변수를 사용해서 만든 생성자
public class User {
private String id;
private String name;
private String phone;
private String address;
}
@AllArgsConstructor //모든 필드 변수를 사용해서 만든 생성자
MySQL에서 스키마 생성
jpa에서는 엔티티를 사용해서 자동으로 만들었는데
mybatis 사용을 위해서는 테이블 만들어줘야함
mybatis 설정
#MYSQL DB설정
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=1234
UserController 패키지와 usercontroller생성
package com.myapp.mybatis.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.myapp.mybatis.mapper.UserMapper;
import com.myapp.mybatis.model.User;
@RestController //화면없이 데이터만 전달
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/users/{id}")
public User getUser(@PathVariable("id") String id) {
User user = userMapper.getUser(id);
return user;
}
}
mapper 패키지 생성
인터페이스로 UserMapper 생성
package com.myapp.mybatis.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import com.myapp.mybatis.model.User;
//jpa의 repository 역할이다.
@Mapper
public interface UserMapper {
@Select("select * from user where id=#{id}")
User getUser(String id);
}
두 개의 방법이 있는데
첫 번째 방법은
바로 sql문 작성하는 방법이 있다.
위의 코드는 sql문을 바로 작성한 방법임
결과는 User으로 나옴
테스트를 위해서
mysql에 유저 한명 직접 입력해줌
브라우저에서 확인하기
http://localhost:8080/user/1
제이슨 형식으로 보여줌
원래는 mapper를 service에서 가져와서 사용하고 그 후에 컨트롤러로 이동하는데
일단은 간단하게 해보기위해서 컨트롤러로 바로 사용함
그러면 전체 유저의 정보를 가져올려면 어떻게 작성하면 될까?
UserController
//모든 유저 정보 가져오기
@GetMapping("/users")
public List<User> getUserList(){
List<User> userList = userMapper.getUserList();
return userList;
}
UserMapper
@Select("select * from user")
List<User> getUserList();
브라우저에서 확인하기
유저 데이터 생성하기 (insert)
//유저 데이터 생성하기
@PostMapping
public void createUser(@RequestParam("id") String id,
@RequestParam("name") String name,
@RequestParam("phone") String phone,
@RequestParam("address") String address) {
userMapper.insertUser(id,name,phone,address);
}
파라미터로 받아서 유저 생성
@Insert("insert into user values(#{id}, #{name}, #{phone}, #{address})")
void insertUser(String id, String name, String phone, String address);
클라이언트에서 서버로 데이터를 넘겨줌
id,name, phone,address
postmapping은 주소창에 입력이 불가능하다
그래서 이런것들을(restapi) 테스트하기위해 만들어진 툴이 있음.
회원가입해야 사용가능함
구글로 함
ADD request
get 조회
post 입력
put patch 업데이트
delete 삭제
send 누르면 아래에 답변이 출력됨.
send 클릭하면 아래에 오류 안나는지 확인함
나는 400 오류가 떠서 스프링부트 코드 확인해보니까
id String 인데 int로 입력했음
500은 sql문 잘못입력하니까 나오더이다..
DB에서도 확인하기
유저 정보 수정하기
UserController
// 유저 정보 수정하기
@PutMapping("/{id}")
public void editUser(@PathVariable("id") String id,
@RequestParam("name") String name,
@RequestParam("phone") String phone,
@RequestParam("address") String address) {
userMapper.updateUser(id, name, phone, address);
}
UserMapper
//유저 수정하기
@Update("update user set name=#{name}, phone=#{phone}, address=#{address} "
+ "where id=#{id}")
void updateUser(String id, String name, String phone, String address);
http://localhost:8080/users/3?name=펭수 &phone=010-1111-1113&address=부산진구 1동 3
아이디가 3인 유저를 수정할거니까 위와 같이 수정해줘야함 .
(id-3)펭수를 아래와 같이 수정할거임
200ok 나오면 정상적으로 수정된거임
유저 조회
유저 삭제하기
UserController
// 유저 삭제
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable("id") String id) {
userMapper.deleteUser(id);
}
UserMapper
//유저 삭제하기
@Delete("delete from user where id=#{id}")
void deleteUser(String id);
자바 버전 체크
참고하기
'BACKEND > SpringBoot' 카테고리의 다른 글
스프링부트에서 JSP 설정 (0) | 2023.11.14 |
---|---|
스프링 부트 - MyBatis 2 / xml 매핑 (0) | 2023.11.14 |
스프링부트 게시판 만들기 강의 (0) | 2023.11.13 |
h2 -> MySQL로 DB변경하기 (0) | 2023.11.13 |
질문/답변 추천 기능 (0) | 2023.11.13 |