ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [포스코x코딩온] Mybatis를 활용한 게시판 기능 구현(with lombok)
    [포스코x코딩온] 웹개발자 풀스택 부트캠프8기 2023. 11. 9. 00:38
    728x90

    Mybatis를 활용한 게시판 기능 구현

    lombok도 사용해볼게요.

    그러면 lombok에 대해서도 알아야겠죠?

     

    Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your jva.
    Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

    https://projectlombok.org/

     

    Project Lombok

     

    projectlombok.org

     

    즉, Java 라이브러리로 반복되는 getter, setter, toString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러입니다.  Lombok은 다양한 어노테이션을 제공하고 이를 기반으로 코드를 컴파일과정에서 생성해 주는 방식으로 동작하는 라이브러리로 코딩 과정에서는 보이지 않고 실제 컴파일된 결과물에만 코드가 생성되어서 실행됩니다. 

    • 종류
      • @Getter, @Setter
      • @NoArgsConstructor : 기본 생성자를 만들어준다.
      • @AllArgsConstructor : 모든 필드값을 사용하는 생성자
      • @RequiredArgsConstructor : final이나 @NotNull인 필드값만 사용하는 생성자 final로 선언된 필드의 의존성이 자동 주입(생성자 주입을 통해서)
      • @Data : @Getter, @Setter, @RequiredArgConstructor 등등을 포함하고 있다.

    https://dololak.tistory.com/783

     

    [JAVA] Lombok이란? Lombok 적용하는 방법

    Lombok이란? Lombok 이클립스에 적용하는 방법 Lombok(롬복)은 Java 라이브러리로 반복되는 getter, setter, toString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리입니다. 보통 Model 클래스나

    dololak.tistory.com

     

    프로젝트 시작

    1. Spring Boot 다운받기

    의존성 종류

     

    ※ 프로젝트 구조 잡고 가기

     

    2. 코드

    • MySQL (DB 생성)
    use mybatiscrud;
    
    create table board(
    	id int not null auto_increment,
        title varchar(255) not null,
        content varchar(255) not null,
        name varchar(20) not null,
        primary key(id)
        );

     

     

    • 도메인(Board.java)
    package com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.domain;
    
    import lombok.Getter;
    import lombok.Setter;
    
    @Setter
    @Getter
    public class Board {
        private int id;
        private String title;
        private String content;
        private String name;
    
    }

     

    • application.properties (MySQL과 intellj 연결 설정)
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    #mybatiscrud 가 DB 이름이다.
    spring.datasource.url=jdbc:mysql://localhost:3306/mybatiscrud?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul
    spring.datasource.username=
    spring.datasource.password=
    
    
    
    mybatis.type-aliases-package=com.spring.boot.mapper
    mybatis.mapper-locations=mybatis-mapper/*.xml

     


     

    • Mapper (BoardMapper.java)
    package com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.mapper;
    
    import com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.domain.Board;
    import com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.dto.BoardDTO;
    import org.apache.ibatis.annotations.*;
    
    import java.util.List;
    
    @Mapper
    public interface BoardMapper {
        List<Board> retrieveAll();
    
        @Insert("insert into board(title, content, name) values(#{title}, #{content}, #{name})")
        void insertBoard(Board board);
    
        @Select("select * from board where id=#{id}")
        Board selectBoard(Long  id);
    
        @Update("update board set title = #{title}, content = #{content} where id = #{id}")
        void updateBoard(BoardDTO board);
        @Delete("delete from board where id = #{id}")
        void deleteBoard(Long id);
    
    }

     

    • mybatis-mapper (BoardMapper.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.kdt8mybatisCRUD.kdt8_mybatis_CRUD.mapper.BoardMapper">
        <select id="retrieveAll" resultType="com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.domain.Board">
            SELECT board.* FROM board
        </select>
    </mapper>

     

     

    • Service (BoardService.java)
    package com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.service;
    
    import com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.domain.Board;
    import com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.dto.BoardDTO;
    import com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.mapper.BoardMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Service
    public class BoardService {
        @Autowired
        BoardMapper boardMapper;
        //목록보기
        public List<BoardDTO> getboardList(){
            List<Board> result = boardMapper.retrieveAll();
            List<BoardDTO> boards = new ArrayList<>();
            for(int i = 0; i<result.size(); i++){
                BoardDTO board = new BoardDTO();
                board.setId(result.get(i).getId());
                board.setTitle(result.get(i).getTitle());
                board.setContent(result.get(i).getContent());
                board.setName(result.get(i).getName());
    
    
                boards.add(board);
            }
            return boards;
        }
        //글쓰기
        public void insertBoard(Board board){
    
            boardMapper.insertBoard(board);
        }
        //자세히 보기
        public Board getBoardById(Long id) {
            return boardMapper.selectBoard(id);
        }
        // 게시물을 업데이트합니다.
        public void updateBoard(BoardDTO board) {
    
            boardMapper.updateBoard(board);
        }
    
        //삭제하기
        public void deleteBoard(Long boardId) {
            boardMapper.deleteBoard(boardId);
        }
    
    }

     

     

    • Controller (BoardController.java)
    package com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.controller;
    
    import com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.domain.Board;
    import com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.dto.BoardDTO;
    import com.kdt8mybatisCRUD.kdt8_mybatis_CRUD.service.BoardService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @Controller
    public class BoardController {
    
        @Autowired
        BoardService boardService;
    
    //    @GetMapping
    //    public String getBoards(){
    //        return "board";
    //    }
    //목록 보기
        @GetMapping("/board")
        public String getBoards(Model model){
            List<BoardDTO> boards = boardService.getboardList();
            model.addAttribute("list", boards);
            return "board";
        }
    //글쓰기 페이지 열기
        @GetMapping("/create")
        public String  getBoardInsert(){
            return "create";
        }
    //글쓰기
        @PostMapping("/create")
        @ResponseBody
        public boolean getBoardInsert(@RequestParam String title, @RequestParam String content, @RequestParam String name){
            System.out.print("title: " + title);
            Board board = new Board();
            board.setTitle(title);
            board.setContent(content);
            board.setName(name);
            boardService.insertBoard(board);
            return true;
        }
    
        //상세 보기
        @GetMapping("/edit")
        public String editBoard(@RequestParam("boardId") Long boardId, Model model) {
            Board board = boardService.getBoardById(boardId);
            model.addAttribute("board", board);
            return "edit"; // 수정 페이지로 이동
        }
    
        //수정하기
        @PostMapping("/update")
        public String updateBoard(@ModelAttribute("board") BoardDTO board) {
            boardService.updateBoard(board);
            return "redirect:/board"; // 수정 후 목록 페이지로 이동
        }
    
        //삭제하기
        @PostMapping("/delete")
        public String deleteBoard(@RequestParam("boardId") Long boardId) {
            boardService.deleteBoard(boardId);
            return "redirect:/board"; // 삭제 후 목록 페이지로 이동
        }
    
    
    }

     

     

     


     

     

    3. 결과

     

     

    728x90
Designed by Tistory.