스프링수업 14일차

하파타카·2022년 4월 13일
0

SpringBoot수업

목록 보기
14/23

한 일

MyBatis

  • MyBatis 사용하기
  • GET/POST/PUT/DELET

MyBatis란?

sql mapping을 사용하는 영속성 프레임워크.
보통 스프링부트를 사용할때 JPA나 MyBatis중 하나를 사용하는편이다.
혹은 복잡한 쿼리는 MyBatis를 사용하고 나머지는 JPA를 사용하는 등의 방법도 가능.
JPA보다 가볍다는 장점이 있음.

MyBatis 사용해보기


새 프로젝트 생성


pom.xml에 mybatis가 추가됨.


User클래스 생성

- User -

private String id;
private String name;
private String phone;
private String address;
// 모든 필드가 추가된 생성자, get/set메서드 자동생성


DB에 새 스키마 mybatis 생성

user테이블 생성.
참고로 DB의 테이블이름은 대부분 소문자로 작성.

CREATE TABLE IF NOT EXISTS mybatis.user (
	id int not null,
    name VARCHAR(45) not null,
    phone VARCHAR(45) not null,
    address VARCHAR(200) not null,
	PRIMARY KEY (id)
);

- application.properties -
DB설정

# MySQL DB setting
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=1234


UserController클래스 생성

- UserController -

@RestController
@RequestMapping("/users")
public class UserController {
	
	@Autowired
	private UserMapper userMapper;

	@GetMapping("/{id}")
	public User getUser(@PathVariable("id") String id) {
		User user = userMapper.getUser(id);
		
		return user;
	}
}

@RestController는 view없이 바로 리턴

User user = 연결할 매퍼(repository).메서드(id);의 방법으로 DB에서 id로 검색해 데이터를 가져옴.
MyBatis에서는 repository대신 매퍼를 사용.
로고 repository를 불러와 사용하듯 mapper를 불러와 사용. (<-private UserMapper userMapper; 이 부분을 말하는것임)


repository대신 매퍼 인터페이스를 생성.

- UserMapper -

@Mapper	// jpa의 repository와 같은 역할을 함
public interface UserMapper {
	
	@Select("select * from user where id = #{id}")
	User getUser(String id);	// 유저객체 리턴 id로 DB의 user테이블에서 데이터를 찾아 유저객체로 리턴
}


#{id}는 매개변수의 id가 들어간다는 의미.

insert into mybatis.user(id, name, phone, address)
values (1, '홍길동', '010-1111-1111', '부산진구');
insert into mybatis.user(id, name, phone, address)
values (2, '강감찬', '010-2222-2222', '부산시 중구');
insert into mybatis.user(id, name, phone, address)
values (3, '계백', '010-3333-3333', '서울시 강서구');
insert into mybatis.user
values (4, '이순신', '010-4444-4444', '서울시 북구');

DB에 데이터를 입력 (모든 필드데이터 입력 시 4번 이순신처럼 ()생략가능)

실행 후 http://localhost:8080/users/1 로 접속하여 데이터확인

json형식으로 id가 1번인 user데이터가 User객체로 리턴됨

GET 모든 user정보 가져오기

- UserController -

@GetMapping
public List<User> getUsersList(){
	List<User> userList = userMapper.getUserList();
	
	return userList;
}

컨트롤러 클래스에 @RequestMapping("/users")어노테이션을 통해 주소를 지정했으므로 기본주소를 사용하는 getUserList()메서드는 주소를 따로 지정하지 않아도 된다.

- UserMapper -

@Select("select * from user")
List<User> getUserList();

http://localhost:8080/users

POST user정보 입력

- UserController -

@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);
}

- UserMapper -

@Insert("insert into user values(#{id}, #{name}, #{phone}, #{address})")
void insertUser(String id, String name, String phone, String address);

http://localhost:8080/users?id=5&name=송상현&phone=010-5555-5555&address=부산진구 양정동

postman을 사용해 전송. 아무것도 리턴되지 않으면 다시 /users로 접근하여 입력되었는지 확인.


정상적으로 입력되었음.

PUT user정보 수정

- UserController -

@PutMapping("/{id}")
public void editUser(@PathVariable("id") String id,
					@RequestParam("name") String name,
					@RequestParam("phone") String phone,
					@RequestParam("address") String address) {
	int i = userMapper.updatetUser(id, name, phone, address);
	if (i > 0) System.out.println("성공!");	
}

- UserMapper -

@Update("update user set name = #{name}, phone = #{phone}, address = #{address} where id = #{id}")
int updatetUser(String id, String name, String phone, String address);

http://localhost:8080/users/5?name=송상현&phone=010-5566-5566&address=부산진구 양정동

DELET user정보 삭제

- 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);

http://localhost:8080/users/5

5번 유저가 삭제됨


profile
천 리 길도 가나다라부터

0개의 댓글

관련 채용 정보