물체를 드래그해서 좌표값을 저장한후 디비에 저장. 새로고침하면 db에서 좌표값을 불러와서 물체의 위치를 지정해줌.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<script>
window.onload = function() {
var ball = document.getElementById('ball');
var xcoordinate = ball.getAttribute('data-xcoordinate');
var ycoordinate = ball.getAttribute('data-ycoordinate');
ball.style.position = 'absolute';
ball.style.left = xcoordinate + 'px';
ball.style.top = ycoordinate + 'px';
}
</script>
</head>
<body>
<img src="https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsV3xg%2FbtskiTBVhXA%2F7gsmX5shLVkwSYBqNlKUSk%2Fimg.jpg" id="gate" class="droppable">
<img src="https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLIl8p%2FbtskiyYPNzI%2F2uelDLhG09ZAK8xsZiJ8RK%2Fimg.png" id="ball" data-xcoordinate="${xcoordinate-120}" data-ycoordinate="${ycoordinate-180}">
<p>${xcoordinate}</p>
<p>${ycoordinate}</p>
<form id="ha" name action="/board/haha.do" method="post">
<input id="x" name="xx">
<input id="y" name="yy">
<button type="submit" id="haha"></button>
</form>
<p>Drag the ball.</p>
<script>
let pagex;
let pagey;
// 잠재적 드롭 가능한 요소
let currentDroppable = null;
document.getElementById('ball').onmousedown = function (event) {
let shiftX = event.clientX - document.getElementById('ball').getBoundingClientRect().left;
let shiftY = event.clientY - document.getElementById('ball').getBoundingClientRect().top;
document.getElementById('ball').style.position = 'absolute';
document.getElementById('ball').style.zIndex = 1000;
document.body.append(document.getElementById('ball'));
moveAt(event.pageX, event.pageY);
pagex = event.pageX;
pagey = event.pageY;
function moveAt(pageX, pageY) {
document.getElementById('ball').style.left = pageX - shiftX + 'px';
document.getElementById('ball').style.top = pageY - shiftY + 'px';
}
function onMouseMove(event) {
moveAt(event.pageX, event.pageY);
ball.hidden = true;
let elemBelow = document.elementFromPoint(event.clientX, event.clientY); // elemBelow : 드롭할 수 있는 공의 아래 요소, 축구골대
document.getElementById('ball').hidden = false;
// 공을 윈도우 밖으로 드래그 했을 때,
// clientX, clientY 가 윈도우 밖에 있으면, elementFromPoint 는 null 반환
if (!elemBelow) return;
// 잠재적으로 드롭할 수 있는 요소를 'droppable' 클래스로 지정한다. 축구 골대
let droppableBelow = elemBelow.closest('.droppable');
// 둘다 null 일 수 있다. 들어오거나, 나가거나에 해당할 때,
// currentDroppale = null : 축구 골대 밖에 있을 때,
// droppableBelow = null : 이벤트 동안 축구 골대 안에 없을 때,
if (currentDroppable != droppableBelow) {
if (currentDroppable) {
// 축구 골대 밖에 있을 때 강조 제거
leaveDroppable(currentDroppable);
}
currentDroppable = droppableBelow;
if (currentDroppable) { // null if we're not coming over a droppable now
// 축구 골대 안으로 들어오는 것을 처리하는 로직
enterDroppable(currentDroppable);
}
}
pagex = event.pageX;
pagey = event.pageY;
document.getElementById('x').value = pagex;
document.getElementById('y').value = pagey;
}
document.addEventListener('mousemove', onMouseMove);
document.getElementById('ball').onmouseup = function () {
document.removeEventListener('mousemove', onMouseMove);
document.getElementById('ball').onmouseup = null;
};
};
function enterDroppable(elem) {
elem.style.background = 'pink';
}
function leaveDroppable(elem) {
elem.style.background = '';
}
document.getElementById('ball').ondragstart = function () {
return false;
};
document.getElementById('haha').addEventListener('click',function (){
{
console.log('시발');
console.log(pagex);
console.log(pagey);
}
})
</script>
</body>
</html>
package com.bit.springboard.dto;
public class xyDTO {
@Override
public String toString() {
return "xyDTO{" +
"xx=" + xx +
", yy=" + yy +
", no=" + no +
'}';
}
public int getXx() {
return xx;
}
public void setXx(int xx) {
this.xx = xx;
}
public int getYy() {
return yy;
}
public void setYy(int yy) {
this.yy = yy;
}
private int xx;
private int yy;
private int no;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
}
package com.bit.springboard.controller;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import com.bit.springboard.common.FileUtils;
import com.bit.springboard.dto.BoardDTO;
import com.bit.springboard.dto.BoardFileDTO;
import com.bit.springboard.dto.Criteria;
import com.bit.springboard.dto.PageDTO;
import com.bit.springboard.dto.UserDTO;
import com.bit.springboard.service.board.BoardService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@Controller
@RequestMapping("/board")
public class BoardController {
@Autowired
private BoardService boardService;
//post,get 요청 모두 받아서 실
@RequestMapping("/getBoardList.do")
public String getBoardList(Model model,
@RequestParam Map<String, String> paramMap,
Criteria cri) {
//화면을 표출하면서 바로 데이터 출력
model.addAttribute("boardList", boardService.getBoardList(paramMap, cri));
//검색조건, 검색어 화면단으로 다시 전달
if(paramMap.get("searchCondition") != null &&
!paramMap.get("searchCondition").equals("")) {
model.addAttribute("searchCondition",
paramMap.get("searchCondition"));
}
if(paramMap.get("searchKeyword") != null &&
!paramMap.get("searchKeyword").equals("")) {
model.addAttribute("searchKeyword",
paramMap.get("searchKeyword"));
}
//총 게시글의 개수 구하기
int boardTotal = boardService.getBoardTotal(paramMap);
model.addAttribute("pageDTO", new PageDTO(cri, boardTotal));
return "board/getBoardList";
}
//새 글 등록 화면으로 이동(get방식)
@GetMapping("insertBoard.do")
public String insertBoardView(HttpSession session) {
//로그인 된 정보가 없으면 로그인 화면으로 이동
//세션에 담겨있는 사용자 정보 조회
UserDTO loginUser = (UserDTO)session.getAttribute("loginUser");
if(loginUser == null) {
return "redirect:/user/login.do";
}
return "board/insertBoard";
}
//새 글 등록 처리(post방식)
//등록 완료후 게시글 목록으로 이동
@PostMapping("/insertBoard.do")
public String insertBoard(BoardDTO boardDTO,
MultipartFile[] uploadFiles,
HttpServletRequest request) throws IOException {
List<BoardFileDTO> boardFileList = new ArrayList<BoardFileDTO>();
//파일 업로드 기능구현
if(uploadFiles.length > 0) {
//업로드 폴더 지정
//서버의 절대 경로 얻기
String attachPath = request.getSession().getServletContext()
.getRealPath("/") + "/upload/";
System.out.println(request.getSession().getServletContext()
.getRealPath("/"));
File directory = new File(attachPath);
//폴더가 존재하지 않으면 폴더 생성
if(!directory.exists()) {
directory.mkdir();
}
for(int i = 0; i < uploadFiles.length; i++) {
BoardFileDTO boardFileDTO = new BoardFileDTO();
boardFileDTO = FileUtils.parseFileInfo(uploadFiles[i], attachPath);
boardFileList.add(boardFileDTO);
}
}
boardService.insertBoard(boardDTO, boardFileList);
return "redirect:/board/getBoardList.do";
}
//조회수 올리기
@GetMapping("/updateBoardCnt.do")
public String updateBoardCnt(@RequestParam("boardNO") int boardNo) {
//조회수 올리기
boardService.updateBoardCnt(boardNo);
return "redirect:/board/getBoard.do?boardNO=" + boardNo;
}
@GetMapping("/haha.do")
public String aa(Model model) {
//조회수 올리기
model.addAttribute("xcoordinate", boardService.getxy(1).getXx());
model.addAttribute("ycoordinate", boardService.getxy(1).getYy());
System.out.println(boardService.getxy(1));
return "board/haha";
}
@PostMapping("/haha.do")
public String aea(@RequestParam("xx") int xx ,@RequestParam("yy") int yy ) {
//조회수 올리기
System.out.println(xx);
System.out.println(yy);
boardService.insertxy(xx,yy);
return "redirect:/board/haha.do";
}
@GetMapping("/getBoard.do")
public String getBoard(@RequestParam("boardNO") int boardNo,
Model model) {
model.addAttribute("board", boardService.getBoard(boardNo));
//첨부파일 리스트 화면단으로 전송
System.out.println(boardService.getBoardFileList(boardNo));
model.addAttribute("boardFileList", boardService.getBoardFileList(boardNo));
return "board/getBoard";
}
@PostMapping("/updateBoard.do")
public String updateBoard(BoardDTO boardDTO, MultipartFile[] uploadFiles, MultipartFile[] changedFiles, @RequestParam("originFiles") String originFiles, HttpServletRequest request) throws IOException {
System.out.println("originFiles =========" + originFiles);
System.out.println("uploadFiles =========" + uploadFiles.length);
//Json string 형태의 originfiles list <boardfiledto>로 변경
List<BoardFileDTO> originFileList = new ObjectMapper().readValue(originFiles, new TypeReference<List<BoardFileDTO>>() {});
String attachPath = request.getSession().getServletContext().getRealPath("/") + "/upload/";
File directory = new File(attachPath);
if(!directory.exists()) {
directory.mkdir();
}
//수정되거나 추가도니 파일 정보가 담기는 List
List<BoardFileDTO> uFileList = new ArrayList<BoardFileDTO>();
for(int i = 0; i < originFileList.size(); i++) {
if(originFileList.get(i).getBoardFileStatus().equals("U")) {
for(int j = 0; j < changedFiles.length; j++) {
if(originFileList.get(i).getNewFileName().equals(
changedFiles[j].getOriginalFilename())) {
BoardFileDTO boardFileDTO = new BoardFileDTO();
boardFileDTO = FileUtils.parseFileInfo(changedFiles[j], attachPath);
boardFileDTO.setBoardNO(
originFileList.get(i).getBoardNO());
boardFileDTO.setBoardFileNo(
originFileList.get(i).getBoardFileNo());
boardFileDTO.setBoardFileStatus("U");
uFileList.add(boardFileDTO);
}
}
} else if(originFileList.get(i).getBoardFileStatus().equals("D")) {
BoardFileDTO boardFileDTO = new BoardFileDTO();
boardFileDTO.setBoardNO(
originFileList.get(i).getBoardNO());
boardFileDTO.setBoardFileNo(
originFileList.get(i).getBoardFileNo());
boardFileDTO.setBoardFileStatus("D");
//실제 서버의 파일 삭제
File dFile = new File(attachPath
+ originFileList.get(i).getBoardFileName());
dFile.delete();
uFileList.add(boardFileDTO);
}
}
if(uploadFiles.length > 0) {
for(int i = 0; i < uploadFiles.length; i++) {
MultipartFile file = uploadFiles[i];
if(!file.getOriginalFilename().equals("") &&
file.getOriginalFilename() != null) {
BoardFileDTO boardFileDTO =
FileUtils.parseFileInfo(file, attachPath);
boardFileDTO.setBoardNO(boardDTO.getBoardNO());
boardFileDTO.setBoardFileStatus("I");
uFileList.add(boardFileDTO);
}
}
}
boardService.updateBoard(boardDTO,uFileList);
//return "redirect:/board/getBoardList.do";
return "redirect:/board/getBoard.do?boardNO=" + boardDTO.getBoardNO();
}
//getBoardListAjax 화면으로 이동
@GetMapping("/getBoardListAjax.do")
public String getBoardListAjaxView() {
return "board/getBoardListAjax";
}
//게시글 목록 json string으로 리턴
// @PostMapping(value="/getBoardListAjax.do",
// produces="application/text; charset=UTF-8")
// //리턴된 데이터만 response body로 전송
// @ResponseBody
// public String getBoardListAjax() throws JsonProcessingException {
// //json string을 생성하기 위한 ObjectMapper 객체 생성
// ObjectMapper objectMapper = new ObjectMapper();
//
// //json 데이터 형식을 만들기 위한 Map생성
// Map<String, Object> jsonMap = new HashMap<String, Object>();
//
// //jsonMap에 담아줄 게시글 목록 조회
// List<BoardDTO> boardList = boardService.getBoardList();
//
// //게시글 목록 jsonMap에 담기
// jsonMap.put("boardList", boardList);
//
// //jsonMap을 jsonString으로 변경
// String jsonStr = objectMapper.writerWithDefaultPrettyPrinter()
// .writeValueAsString(jsonMap);
//
// //변환된 jsonStr 리턴
// return jsonStr;
// }
@GetMapping("/deleteBoard.do")
public String deleteBoard(@RequestParam("boardNO") int boardNo) {
boardService.deleteBoard(boardNo);
return "redirect:/board/getBoardList.do";
}
@RequestMapping("fileDown.do")
@ResponseBody
public ResponseEntity<Resource> fileDown(BoardFileDTO boardFileDTO) {
//화면에서 보내준 boardNo, boardFileNo으로 다운받을 파일 정보 조회
BoardFileDTO boardFile = boardService.getBoardFile(boardFileDTO);
Resource resource = new FileSystemResource(
boardFile.getBoardFilePath() + boardFile.getBoardFileName());
String resourceName = resource.getFilename();
HttpHeaders header = new HttpHeaders();
try {
//헤더에 다운받을 파일에 대한 정보 추가
header.add("Content-Disposition", "attachment; filename="
+ new String(resourceName.getBytes("UTF-8"), "ISO-8859-1"));
} catch(Exception e) {
System.out.println(e.getMessage());
}
return new ResponseEntity<Resource>(resource, header, HttpStatus.OK);
}
}
<?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="BoardDAO">
<insert id="insertBoard" parameterType="board">
<selectKey resultType="int" keyProperty="boardNO"
order="AFTER">
SELECT IFNULL(MAX(BOARD_NO),0) FROM T_BOARD
</selectKey>
INSERT INTO T_BOARD(
BOARD_TITLE,
BOARD_CONTENT,
BOARD_WRITER
) VALUES (
#{boardTitle},
#{boardContent},
#{boardWriter}
)
</insert>
<update id="updateBoard" parameterType="board">
UPDATE T_BOARD
SET
BOARD_TITLE = #{boardTitle},
BOARD_CONTENT = #{boardContent}
WHERE
BOARD_NO = #{boardNO}
</update>
<delete id="deleteBoard" parameterType="int">
DELETE
FROM T_BOARD
WHERE
BOARD_NO = #{boardNO}
</delete>
<select id="getBoard" parameterType="int" resultType="board">
SELECT
BOARD_NO
, BOARD_TITLE
, BOARD_CONTENT
, BOARD_WRITER
, BOARD_REGDATE
,
BOARD_CNT
FROM T_BOARD
WHERE BOARD_NO = #{boardNO}
</select>
<select id="getBoardList" parameterType="map" resultType="board">
SELECT BOARD_NO
, BOARD_TITLE
, BOARD_CONTENT
, BOARD_WRITER
,
BOARD_REGDATE
, BOARD_CNT
FROM T_BOARD
<if
test="search.searchKeyword != null and search.searchKeyword != ''">
<if test="search.searchCondition == 'all'">
WHERE 1=0
OR BOARD_TITLE LIKE CONCAT('%',
#{search.searchKeyword}, '%')
OR BOARD_CONTENT LIKE CONCAT('%',
#{search.searchKeyword}, '%')
OR BOARD_WRITER LIKE CONCAT('%',
#{search.searchKeyword}, '%')
</if>
<if test="search.searchCondition != 'all'">
WHERE 1=1
<if test="search.searchCondition == 'title'">
AND BOARD_TITLE LIKE CONCAT('%',
#{search.searchKeyword}, '%')
</if>
<if test="search.searchCondition == 'content'">
AND BOARD_CONTENT LIKE CONCAT('%',
#{search.searchKeyword}, '%')
</if>
<if test="search.searchCondition == 'writer'">
AND BOARD_WRITER LIKE CONCAT('%',
#{search.searchKeyword}, '%')
</if>
</if>
</if>
LIMIT #{page.amount} OFFSET #{page.startNum}
</select>
<update id="updateBoardCnt" parameterType="int">
UPDATE T_BOARD
SET
BOARD_CNT = BOARD_CNT + 1
WHERE BOARD_NO = #{boardNO}
</update>
<select id="getBoardTotal" parameterType="map" resultType="int">
SELECT COUNT(*) FROM T_BOARD
<if test="searchKeyword != null and searchKeyword != ''">
<if test="searchCondition == 'all'">
WHERE 1=0
OR BOARD_TITLE LIKE CONCAT('%',
#{searchKeyword}, '%')
OR BOARD_CONTENT LIKE CONCAT('%',
#{searchKeyword}, '%')
OR BOARD_WRITER LIKE CONCAT('%',
#{searchKeyword}, '%')
</if>
<if test="searchCondition != 'all'">
WHERE 1=1
<if test="searchCondition == 'title'">
AND BOARD_TITLE LIKE CONCAT('%', #{searchKeyword}, '%')
</if>
<if test="searchCondition == 'content'">
AND BOARD_CONTENT LIKE CONCAT('%', #{searchKeyword},
'%')
</if>
<if test="searchCondition == 'writer'">
AND BOARD_WRITER LIKE CONCAT('%', #{searchKeyword}, '%')
</if>
</if>
</if>
</select>
<!-- <select id="getBoardList" -->
<!-- parameterType="map" -->
<!-- resultType="board"> -->
<!-- SELECT BOARD_NO -->
<!-- , BOARD_TITLE -->
<!-- , BOARD_CONTENT -->
<!-- , BOARD_WRITER -->
<!-- , BOARD_REGDATE -->
<!-- , BOARD_CNT -->
<!-- FROM T_BOARD -->
<!-- <if test="search.searchKeyword != null and search.searchKeyword !=
''"> -->
<!-- <if test="search.searchCondition == 'all'"> -->
<!-- WHERE -->
<!-- BOARD_TITLE LIKE CONCAT('%', #{search.searchKeyword}, '%') -->
<!-- OR BOARD_CONTENT LIKE CONCAT('%', #{search.searchKeyword}, '%') -->
<!-- OR BOARD_WRITER LIKE CONCAT('%', #{search.searchKeyword}, '%') -->
<!-- </if> -->
<!-- <if test="search.searchCondition != 'all'"> -->
<!-- -->
<!-- <if test="search.searchCondition == 'title'"> -->
<!-- WHERE BOARD_TITLE LIKE CONCAT('%', #{search.searchKeyword}, '%') -->
<!-- </if> -->
<!-- <if test="search.searchCondition == 'content'"> -->
<!-- WHERE BOARD_CONTENT LIKE CONCAT('%', #{search.searchKeyword}, '%') -->
<!-- </if> -->
<!-- <if test="search.searchCondition == 'writer'"> -->
<!-- WHERE BOARD_WRITER LIKE CONCAT('%', #{search.searchKeyword}, '%') -->
<!-- </if> -->
<!-- </if> -->
<!-- </if> -->
<!-- LIMIT #{page.amount} OFFSET #{page.startNum} -->
<!-- </select> -->
<!-- <update id="updateBoardCnt" -->
<!-- parameterType="int"> -->
<!-- UPDATE T_BOARD -->
<!-- SET BOARD_CNT = BOARD_CNT + 1 -->
<!-- WHERE BOARD_NO = #{boardNO} -->
<!-- </update> -->
<!-- <select id="getBoardTotal" parameterType="map" resultType="int"> -->
<!-- SELECT COUNT(*) FROM T_BOARD -->
<!-- <if test="searchKeyword != null and searchKeyword != ''"> -->
<!-- <if test="searchCondition == 'all'"> -->
<!-- WHERE 1=0 -->
<!-- OR BOARD_TITLE LIKE CONCAT('%', #{searchKeyword}, '%') -->
<!-- OR BOARD_CONTENT LIKE CONCAT('%', #{searchKeyword}, '%') -->
<!-- OR BOARD_WRITER LIKE CONCAT('%', #{searchKeyword}, '%') -->
<!-- </if> -->
<!-- <if test="searchCondition != 'all'"> -->
<!-- WHERE 1=1 -->
<!-- <if test="searchCondition == 'title'"> -->
<!-- AND BOARD_TITLE LIKE CONCAT('%', #{searchKeyword}, '%') -->
<!-- </if> -->
<!-- <if test="searchCondition == 'content'"> -->
<!-- AND BOARD_CONTENT LIKE CONCAT('%', #{searchKeyword}, '%') -->
<!-- </if> -->
<!-- <if test="searchCondition == 'writer'"> -->
<!-- AND BOARD_WRITER LIKE CONCAT('%', #{searchKeyword}, '%') -->
<!-- </if> -->
<!-- </if> -->
<!-- </if> -->
<!-- </select> -->
<insert id="insertBoardFile" parameterType="boardFile">
INSERT INTO
T_BOARD_FILE (
BOARD_NO,
BOARD_FILE_NO,
BOARD_FILE_NAME,
BOARD_FILE_PATH,
BOARD_FILE_ORIGIN,
BOARD_FILE_CATE
) VALUES(
#{boardNO},
(
SELECT
IFNULL(MAX(A.BOARD_FILE_NO),0) + 1
FROM T_BOARD_FILE A
WHERE A.BOARD_NO = #{boardNO}
),
#{boardFileName},
#{boardFilePath},
#{boardFileOrigin},
#{boardFileCate}
)
</insert>
<select id="getBoardFileList" parameterType="int"
resultType="boardFile">
<!--<[!CDATA[]]> : <> 앨라몬툻 읽히지 않고 부등호로 읽게 해준다. -->
<!-- <[!CDATA[
SELECT BOARD_NO, BOARD_FILE_NO, BOARD_FILE_NAME, BOARD_FILE_PATH,
BOARD_FILE_ORIGIN FROM T_BOARD_FILE WHERE BOARD_NO=#{boardNO}
]]> -->
SELECT BOARD_NO, BOARD_FILE_NO, BOARD_FILE_NAME, BOARD_FILE_PATH,
BOARD_FILE_ORIGIN,BOARD_FILE_CATE FROM T_BOARD_FILE WHERE BOARD_NO=#{boardNO}
</select>
<select id="getBoardFile" parameterType="boardFile" resultType="boardFile">
SELECT BOARD_NO, BOARD_FILE_NO, BOARD_FILE_NAME, BOARD_FILE_PATH,
BOARD_FILE_ORIGIN,
BOARD_FILE_CATE FROM T_BOARD_FILE WHERE BOARD_NO=#{boardNO}
AND BOARD_FILE_NO=#{boardFileNo}
</select>
<select id="getxy" parameterType="int" resultType="xy">
SELECT * FROM updatexy WHERE no=#{no}
</select>
<update id="updateBoardFile">
UPDATE T_BOARD_FILE
SET BOARD_FILE_NAME = #{boardFileName},
BOARD_FILE_ORIGIN = #{boardFileOrigin},
BOARD_FILE_PATH = #{boardFilePath},
BOARD_FILE_CATE = #{boardFileCate}
WHERE BOARD_NO = #{boardNO}
AND BOARD_FILE_NO = #{boardFileNo}
</update>
<update id="updatexy" parameterType="map">
UPDATE updatexy
SET
XX = #{xx},
YY = #{yy}
</update>
<delete id = "deleteBoardFile">
DELETE FROM T_BOARD_FILE
WHERE BOARD_NO = #{boardNO}
AND BOARD_FILE_NO = #{boardFileNo}
</delete>
</mapper>
댓글 영역