-
[SPRING BOOT] 게시판 CRUD API 만들기카테고리 없음 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
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