Sesac 16일차

SungMin·2022년 10월 26일
0

Sesac-Java/Spring

목록 보기
12/13

데이터베이스

Maria DB




회원가입, 로그인 구현

  • controller/userController.java
package com.example.sessac.first.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.example.sessac.first.mapper.UserMapper;
import com.example.sessac.first.model.User;

// 유저 관련된 요청을 처리하는 컨트롤러
//회원가입, 로그인, 로그아웃
@Controller
@RequestMapping("user") // http://localhost:8080/user
public class UserController {
    @Autowired
    UserMapper userMapper;

    @GetMapping("join") // http://localhost:8080/user/join
    public String join() {
        return "user/join";
    }

    @PostMapping("join")
    public String join(HttpSession session, User user){
        // session.setAttribute("joinUser", user);
        userMapper.join(user);
        return "redirect:/";
    }

    @GetMapping("login")
    public String login(){
        return "user/login";
    }

    @PostMapping("login")
    public String login(HttpSession session, User user){
        // 로그인 시도하는 계정 정보
        String id = user.getUserId();
        String pw = user.getUserPw();

        return "redirect:/";
    }

    // 로그아웃 기능 구현 http://localhost:8080/user/logout
    @GetMapping("logout")
    public String logout(HttpSession session){
        session.removeAttribute("user");
        return "redirect:/";
    }
}

  • mapper/UserMapper.java
package com.example.sessac.first.mapper;

import org.apache.ibatis.annotations.Mapper;

import com.example.sessac.first.model.User;

@Mapper
public interface UserMapper {
    public void join(User user);

    public String getPw(String id);

    public User selectUser(String id);
}

  • model/User.java
package com.example.sessac.first.model;

import lombok.Data;

@Data
public class User {
    private String userId;
    private String userPw;
    private String userName;
    private String userAddr;
}

  • userMapper.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.sessac.first.mapper.UserMapper">
    <insert id="join" parameterType="com.example.sessac.first.model.User">
        insert into user values(#{userId},#{userPw},#{userName},#{userAddr})
    </insert>
    <select id="getPw" parameterType="String" resultType="String">
        select userPw
        from user
        where userId=#{userId}
    </select>
    <select id="selectUser" parameterType="String" resultType="com.example.sessac.first.model.User">
        select *
        from user
        where userId=#{userId}
    </select>
</mapper>
  • 출력 결과물


  • 회원가입에서 입력해도 db로 넘어가지 않는 경우 ->pom.xml에 오타가 있었다. 해결 후 정상적으로 넘어감

게시글 구현

  • 게시글 목록, 작성, 수정, 삭제 구현

  • 데이터셋 세팅


  • controller/BoardController.java
package com.example.sessac.first.controller;

import java.util.ArrayList;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.example.sessac.first.mapper.BoardMapper;
import com.example.sessac.first.model.Board;
import com.example.sessac.first.model.User;

@Controller
@RequestMapping("board")
public class BoardController {
    @Autowired
    BoardMapper boardMapper;

    @GetMapping("boardList") // 게시글 목록 조회
    public String boardList(HttpSession session, Model model){
        // DB에서 게시글 목록을 전부 가져와서 model에 담아준다.
        ArrayList<Board> boardList = boardMapper.boardList();
        model.addAttribute("boardList", boardList);
        return "board/boardList";
    }

    @GetMapping("boardCreate") // 게시글 작성 페이지
    public String boardCreate(){
        return "board/boardCreate";
    }

    @PostMapping("boardCreate") // 게시글 작성 요청
    public String boardCreate(HttpSession session, Board board){
        User user = (User) session.getAttribute("user");
        board.setBoardWriter(user.getUserName());
        boardMapper.boardCreate(board);
        return "redirect:/board/boardList";
    }

    @GetMapping("boardDetail") // 게시글 상세보기
    public String boardDetail(HttpSession session, Model model, @RequestParam("boardNo") int boardNo){
        ArrayList<Board> boardList = boardMapper.boardList();
        for(Board board : boardList){
            if (board.getBoardNo() == boardNo){
                model.addAttribute("board", board);
            }
        }

        return "board/boardDetail";
    }

    @GetMapping("boardUpdate") // 게시글 수정하기
    public String boardupdate(HttpSession session, @RequestParam("boardNo") int boardNo, Model model){
        ArrayList<Board> boardList = boardMapper.boardList();
        for(Board board : boardList){
            if (board.getBoardNo() == boardNo){
                model.addAttribute("board", board);
            }
        }
        return "board/boardUpdate";
    }

    @PostMapping("boardUpdate")
    public String boardUpdate(HttpSession session, Board board){
        boardMapper.boardUpdate(board);
        return "redirect:/board/boardList";
    }

    @GetMapping("boardRemove")
    public String boardRemove(@RequestParam("boardNo") int boardNo){
        boardMapper.boardRemove(boardNo);
        return "redirect:/board/boardList";
    }
}

  • mapper/BoardMapper.java
package com.example.sessac.first.mapper;

import java.util.ArrayList;

import org.apache.ibatis.annotations.Mapper;

import com.example.sessac.first.model.Board;

@Mapper
public interface BoardMapper {
    public ArrayList<Board> boardList();

    public void boardCreate(Board board);

    public void boardUpdate(Board board);

    public void boardRemove(int boardNo);
}

  • model/Board.java
package com.example.sessac.first.model;

import java.util.Date;

import lombok.Data;

@Data
public class Board {
    private int boardNo;
    private String boardTitle;
    private String boardContent;
    private String boardWriter;
    private Date boardTime;
}

  • 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.example.sessac.first.mapper.BoardMapper">
        <select id="boardList" resultType="com.example.sessac.first.model.Board">
            select * from board
        </select>
        <insert id="boardCreate" parameterType="com.example.sessac.first.model.Board">
            insert into board values( NULL , #{boardTitle},#{boardContent},#{boardWriter}, now())
        </insert>
        <update id="boardUpdate" parameterType="com.example.sessac.first.model.Board">
            update board
            set boardTitle=#{boardTitle}, boardContent=#{boardContent}
            where boardNo=#{boardNo}
        </update>
        <delete id="boardRemove" parameterType="int">
            delete from board where boardNo=#{boardNo}
        </delete>
</mapper>

  • boardList.html
<html xmlns:th="http://www.thymeleaf.org">

<head>
</head>
<!-- th:each를 사용해서 게시글의 정보를 나타내는 페이지로 수정-->

<body>
    <table border="1">
        <tr>
            <td>게시글번호</td>
            <td>게시글제목</td>
            <td>작성자</td>
        </tr>
        <th:block th:if="${boardList} !=null">
            <tr th:each="board : ${boardList}">
                <td th:text="${board.boardNo}"></td>
                <td>
                    <a th:href="@{/board/boardDetail(boardNo=${board.boardNo})}">[[${board.boardTitle}]]</a>
                </td>
                <td th:text="${board.boardWriter}"></td>
            </tr>
        </th:block>
        <th:block th:unless="${boardList} != null">
            <tr>
                <td colspan="3">게시글이 존재하지 않습니다.</td>
            </tr>
        </th:block>
    </table>
    <a href="/board/boardCreate">글쓰기</a>
</body>

</html>

  • boardDetail.html
<html xmlns:th="http://www.thymeleaf.org">

<head>
</head>

<body>
    <h1>- 게시글 상세보기 -</h1>
    <h3>작성자 : [[${board.boardWriter}]]</h3>
    <h3>글 제목</h3>
    <textarea name="boardTitle" style="width:100%;"  readonly>[[${board.boardTitle}]]</textarea>
    <h3>글 내용</h3>
    <textarea name="boardContent" style="width:100%; height:200px;" readonly>[[${board.boardContent}]]</textarea>
    <h3>글 작성 시간</h3>
    <span>[[${board.boardTime}]]</span><br/>
    <a href="/board/boardList">목록으로</a> 
    <th:block th:if="${board.boardWriter} == ${session.user.userName}">
        <!-- 글 작성자와 로그인한 사용자의 이름이 같을 경우 -->
        <a th:href="@{/board/boardUpdate(boardNo=${board.boardNo})}">글 수정</a>
        <a th:href="@{/board/boardRemove(boardNo=${board.boardNo})}">글 삭제</a>
    </th:block>
</body>

</html>

  • boardCreate.html
<html xmlns:th="http://www.thymeleaf.org">

<head>
</head>

<body>
    <h1>- 게시글 작성 -</h1>
    <form action="/board/boardCreate" method="post">
        <h3>작성자 : [[${session.user.userName}]]</h3>
        <h3>글 제목</h3>
        <textarea name="boardTitle" style="width:100%;"></textarea>
        <h3>글 내용</h3>
        <textarea name="boardContent" style="width:100%; height:200px;"></textarea>
        <input type="submit" value="게시글작성"/>
    </form>
</body>

</html>

  • boardUpdate.html
<html xmlns:th="http://www.thymeleaf.org">

<head>
</head>

<body>
    <h1>- 게시글 수정 -</h1>
    <form action="/board/boardUpdate" method="post">
        <input type="hidden" name="boardNo" th:value="${board.boardNo}"/>
        작성자 : <input type="text" name="boardWriter" th:value="${board.boardWriter}"/>
        <h3>글 제목</h3>
        <textarea name="boardTitle" style="width:100%;">[[${board.boardTitle}]]</textarea>
        <h3>글 내용</h3>
        <textarea name="boardContent" style="width:100%; height:200px;">[[${board.boardContent}]]</textarea>
        <input type="submit" value="게시글수정"/>
    </form>
</body>

</html>

  • 출력 결과물





  • Export

profile
초보 개발자의 학습 저장용 블로그

0개의 댓글