카테고리 없음
[SPRING BOOT] 게시판 CRUD API 만들기
worri-pi
2021. 12. 24. 04:01
1.BoardVO 만들기
package com.example.demo.mvc.domain;
import java.util.Date;
public class Board {
private int boardSeq;
private String title;
private String contents;
private Date regDate;
public int getBoardSeq() {
return boardSeq;
}
public void setBoardSeq(int boardSeq) {
this.boardSeq = boardSeq;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public Date getRegDate() {
return regDate;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
}
2.Repository(mapper) 클래스 만들기
package com.example.demo.mvc.repository;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.example.demo.mvc.domain.Board;
@Repository
public interface BoardRepository {
List<Board> getList();
Board get(int boardSeq);
void save(Board board);
void update(Board board);
void delete(int boardSeq);
}
3.Service 클래스 만들기
package com.example.demo.mvc.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.mvc.domain.Board;
import com.example.demo.mvc.repository.BoardRepository;
@Service
public class BoardService {
@Autowired
private BoardRepository repository;
/*
* 목록리턴
* @return
*/
public List<Board> getList(){
return repository.getList();
}
/*
* 상세정보리턴
* @param boardSeq
* @return
*/
public Board get(int boardSeq) {
return repository.get(boardSeq);
}
/*
* 등록 처리
* @param board
*/
public void save(Board board) {
repository.save(board);
}
/*
* 업데이트 처리
* @param board
*/
public void update(Board board) {
repository.update(board);
}
/*
* 삭제처리
* @param boardSeq
*/
public void delete(int boardSeq) {
repository.delete(boardSeq);
}
}
4.Controller 만들기
package com.example.demo.mvc.controller;
import java.util.List;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.mvc.domain.Board;
import com.example.demo.mvc.service.BoardService;
@RestController
@RequestMapping("/board")
public class BoardController {
@Autowired
private BoardService boardService;
/*
* 목록리턴
* @return
*/
@GetMapping
public List<Board> getList(){
return boardService.getList();
}
/*
* 상세정보리턴
* @param boardSeq
* @return
*/
@GetMapping("/{boardSeq}") //boardSeq를 url path로 받게 한다.
public Board get(@PathVariable int boardSeq) {
return boardService.get(boardSeq);
}
/*
* 등록/수정 처리
* @param board
*/
@GetMapping("/save") //실무에서는 data를 저장,삭제 할 때 Get보다는 POST,PUT,DELETE를 사용하는 것이 좋다.
public void save(Board board) {
boardService.save(board);
}
/*
* 삭제처리
* @param boardSeq
*/
@GetMapping("/delete/{boardSeq}")
public void delete(@PathVariable int boardSeq) {
boardService.delete(boardSeq);
}
}
5.MybatisConfiguration 만들기
package com.example.demo.configuration;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*
* mybatis 설정
* @author dong
*/
@Configuration
@MapperScan(basePackages = "com.example.demo.mvc.repository") //BoardRepository를 스캔하기 위해 basePackages 설정
public class MybatisConfiguration {
@Bean
public SqlSessionFactory sqlSessionFactory(@Autowired DataSource datasource,ApplicationContext applicationContext) throws Exception{
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(datasource);
factoryBean.setMapperLocations(applicationContext.getResources("classpath:mybatis/sql/*.xml")); //내가 만든 mybatis/sql에 있는 모든 xml 을 불러온다
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(@Autowired SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
6.Mapper SQL XML 만들기
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mvc.repository.BoardRepository">
<select id="getList" parameterType="com.example.demo.mvc.domain.Board" resultType="com.example.demo.mvc.domain.Board">
SELECT
B.BOARD_SEQ,
B.TITLE,
B.CONTENTS,
B.REG_DATE
FROM T_BOARD B
ORDER BY B.REG_DATE DESC
</select>
<select id="get" parameterType="int" resultType="com.example.demo.mvc.domain.Board">
SELECT
B.BOARD_SEQ,
B.TITLE,
B.CONTENTS,
B.REG_DATE
FROM T_BOARD B
WHERE B.BOARD_SEQ = #{boardSeq}
</select>
<insert id="save" parameterType="com.example.demo.mvc.domain.Board">
INSERT INTO T_BOARD
(
TITLE,
CONTENTS,
REG_DATE
)
VALUES
(
#{title},
#{contents},
NOW()
)
</insert>
<update id="update" parameterType="com.example.demo.mvc.domain.Board">
UPDATE T_BOARD
SET
TITLE = #{title},
CONTENTS = #{contents}
WHERE BOARD_SEQ = #{boardSeq}
</update>
<delete id="delete" parameterType="int">
DELETE FROM T_BOARD
WHERE BOARD_SEQ = #{boardSeq}
</delete>
</mapper>
mariadb 와 springboot를 연결할 때 에러가 생겨, 따로 포스팅 했다.
https://worri-pi.tistory.com/163
mariadb 와 springboot 연결 에러
Could not connect to address=(host=localhost)(port=3306)(type=master) : (conn=5) Access denied for user 'shson'@'localhost' (using password: NO) 외부에서 mysql에 접속하지 못해 발생한 오류이다. 외부..
worri-pi.tistory.com
7. Mybatis 옵션 추가
MybatisConfiguration 변경
package com.example.demo.configuration;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*
* mybatis 설정
* @author dong
*/
@Configuration
@MapperScan(basePackages = "com.example.demo.mvc.repository") //BoardRepository를 스캔하기 위해 basePackages 설정
public class MybatisConfiguration {
@Bean
public SqlSessionFactory sqlSessionFactory(@Autowired DataSource datasource,ApplicationContext applicationContext) throws Exception{
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(datasource);
factoryBean.setMapperLocations(applicationContext.getResources("classpath:mybatis/sql/*.xml")); //내가 만든 mybatis/sql에 있는 모든 xml 을 불러온다
SqlSessionFactory factory =factoryBean.getObject();
factory.getConfiguration().setMapUnderscoreToCamelCase(true);
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(@Autowired SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
8.save 실행
BoardService 수정
public int save(Board board) {
repository.save(board);
return board.getBoardSeq();
}
BoardController 수정
@GetMapping("/save")
public void save(Board board) {
boardService.save(board);
}
Board.xml 수정
<insert id="save" parameterType="com.example.demo.mvc.domain.Board" useGeneratedKeys="true" keyProperty="boardSeq">
INSERT INTO T_BOARD
(
TITLE,
CONTENTS,
REG_DATE
)
VALUES
(
#{title},
#{contents},
NOW()
)
</insert>
9.update 실행
BoardService 수정
public void save(Board parameter) {
//조회하여 리턴된 정보
Board board = repository.get(parameter.getBoardSeq());
if(board==null) {
repository.save(parameter);
}else {
repository.update(parameter);
}
}
BoardController 수정
@GetMapping("/save") //실무에서는 data를 저장,삭제 할 때 Get보다는 POST,PUT,DELETE를 사용하는 것이 좋다.
public int save(Board parameter) {
boardService.save(parameter);
return parameter.getBoardSeq();
}
10.delete 실행
출처 : https://www.youtube.com/watch?v=YYlXmkpjRrU
728x90