Spring Boot - RestAPI 1

 

서버에 요청을 보내면

DB에 있는 데이터를 JSON으로 출력해 주는 API를 만들어볼게요..

 

http://localhost:8089/member/멤버 번호

로 접속하게 되면, 해당 멤버 번호에 매칭되는 데이터를 출력해 주고,

http://localhost:8089/members

로 접속하게 되면, 모든 멤버들의 데이터를 출력해 주고,

http://localhost:8089/member

에 POST 방식으로 데이터를 실어서 보내주면 데이터를 추가할 수 있게끔 설계했습니다.


 

http://localhost:8089/members>

 

http://localhost:8089/member/1>

 

 

http://localhost:8089/member/3>

 

 

데이터 테이블>>

 

CREATE TABLE `tbl_member` (
	`mno` INT(11) NOT NULL AUTO_INCREMENT,
	`NAME` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci',
	`id` VARCHAR(20) NOT NULL COLLATE 'utf8mb4_general_ci',
	`pw` VARCHAR(20) NOT NULL COLLATE 'utf8mb4_general_ci',
	PRIMARY KEY (`mno`) USING BTREE,
	UNIQUE INDEX `id` (`id`) USING BTREE
)

 

테스트 데이터>>

 

 

dependencies>>

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
	annotationProcessor 'org.projectlombok:lombok'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.3.1'
	implementation 'javax.servlet:jstl'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
	implementation 'org.springdoc:springdoc-openapi-ui:1.6.6'
}

 

application.properties>>

server.port=8089

#JSP
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#DB
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/DBNAME
spring.datasource.username=DBID
spring.datasource.password=DBPW

#Mybatis
mybatis.mapper-locations=classpath:mybatis/mapper/**/**.xml

 

MemberDto>>

package com.study.springboot.dto;

import lombok.Data;

@Data
public class MemberDto {
	private int mno;
	private String name;
	private String id;
	private String pw;
}

 

Controller>>

package com.study.springboot.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.study.springboot.dao.IMemberDao;
import com.study.springboot.dto.MemberDto;
import com.study.springboot.service.RestApiService;

@CrossOrigin
@RestController
public class RestApiController {

	@Autowired
	RestApiService service;

	@Autowired
	IMemberDao dao;

	@GetMapping("/member/{mno}")
	public ResponseEntity<MemberDto> member(@PathVariable String mno) {
		MemberDto dto = service.member(mno);
		return ResponseEntity.status(HttpStatus.OK).body(dto);
	}

	@GetMapping("/members")
	public ResponseEntity<List<MemberDto>> members() {
		List<MemberDto> mlist = service.members();
		return ResponseEntity.status(HttpStatus.OK).body(mlist);
	}

	@PostMapping("/member")
	public String postMember(@RequestBody MemberDto member) {
		boolean result = service.postMember(member);
		if (result) {
			return "성공";
		}
		return "실패";
	}

}

 

Service>>

package com.study.springboot.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.study.springboot.dao.IMemberDao;
import com.study.springboot.dto.MemberDto;

@Service
public class RestApiService {

	@Autowired
	IMemberDao dao;

	public MemberDto member(String mno) {
		System.out.println(dao);
		return dao.getMember(Integer.parseInt(mno));
	}

	public List<MemberDto> members() {
		System.out.println(dao.list());
		return dao.list();
	}

	public boolean postMember(MemberDto member) {
		System.out.println(member);
		dao.insert(member);
		return true;
	}
}

 

IMemberDao>>

package com.study.springboot.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.study.springboot.dto.MemberDto;

@Mapper
public interface IMemberDao {
	public List<MemberDto> list();

	public MemberDto getMember(int mno);

	public int insert(@Param("member") MemberDto member);

	public int update(MemberDto member);

	public int delete(int mno);
}

 

MemberDao>>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.study.springboot.dao.IMemberDao">
	<select id="list"
		resultType="com.study.springboot.dto.MemberDto">
		SELECT * FROM tbl_member
	</select>
	<select id="getMember"
		resultType="com.study.springboot.dto.MemberDto">
		SELECT * FROM tbl_member WHERE mno=#{param1}
	</select>
	<insert id="insert">
		INSERT INTO tbl_member (name, id, pw)
		VALUES(#{member.name}, #{member.id}, #{member.pw})
	</insert>
	<update id="update">
		UPDATE tbl_member SET
		name=#{member.name},pw=#{member.pw} WHERE mno=#{member.mno}
	</update>
	<delete id="delete">
		DELETE FROM tbl_member WHERE mno=#{param1}
	</delete>
</mapper>