TIL/academy

국비 TIL(Today I Learned) 20220812 MEM테이블 리뷰, 로그인, 로그아웃 화면

토희 2022. 8. 12. 16:43
728x90

MEM테이블에서 비밀번호관련

memUpdate.jsp

 

memInsert.jsp

 

Mem_SQL.xml

 

memInsert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<!-- CKEditor -->
<!-- 제이쿼리 뒤에 나와야함, 제이쿼리 기반으로 동작하기 때문에 -->
<script type="text/javascript" src="resources/script/ckeditor/ckeditor.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	
	$("#listBtn").on("click", function () {
		$("#backForm").submit();
	});
	
	$("#insertBtn").on("click", function () {
	
		// $.trim(값) : 값 앞 뒤 공백제거	
		if($.trim($("#memId").val()) == ""){
			alert("아이디 입력하세요");
			$("#memId").focus();
		}else if($.trim($("#memPw").val()) == ""){
			alert("비밀번호를 입력세요");
			$("#memPw").focus();
		} else if($.trim($("#memPw").val()) != $.trim($("#repw").val())){
			alert("비밀번호가 일치하지 않습니다.");
			$("#memPw").val("");
			$("#repw").val("");
			$("#memPw").focus();
		} else if($.trim($("#memNm").val()) == ""){
			alert("이름을 입력하세요");
			$("#memNm").focus();
		} else if($.trim($("#memBirth").val()) == ""){
			alert("생년월일을 입력하세요");
			$("#memBirth").focus();
		} else {
			$("#actionForm").submit();
		}
	});
});

</script>
</head>
<body>
<form action="memList" id="backForm" method="post">
	<input type="hidden" name="page" value="${param.page}" />
	<input type="hidden" name="searchGbn" value="${param.searchGbn}"/>
	<input type="hidden" name="searchTxt" value="${param.searchTxt}"/>
</form>
<form action="memRes" id="actionForm" method="post">
<!-- gbn : 구분, 혹은 flag
구분: i - insert, u - update, d - delete -->
<input type="hidden" name="gbn" value="i"/>
아이디 
<input type="text" name="memId" id="memId" />
<br />
비밀번호 
<input type="password" name="memPw" id="memPw" />
<br />
비밀번호확인
<input type="password" id="repw" />
<br />
이름
<input type="text" name="memNm" id="memNm" />
<br/>
생년월일
<input type="date" name="memBirth" id="memBirth" />
<br/>
</form>  
<input type="button" value="등록" id="insertBtn">
<input type="button" value="목록" id="listBtn">
</body>
</html>

memUpdate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	$("#listBtn").on("click", function () {
		history.back();
	});
	
	$("#updateBtn").on("click", function () {

		// $.trim(값) : 값 앞 뒤 공백제거	
		if($.trim($("#memId").val()) == ""){
			alert("아이디 입력하세요");
			$("#memId").focus();
		}  else if($.trim($("#memNm").val()) == ""){
			alert("이름을 입력하세요");
			$("#memNm").focus();
		} else if($.trim($("#memPw").val()) !="" // 이 부분이 업데이트에 추가됨 
				&& $.trim($("#memPw").val()) != $.trim($("#repw").val())){
			alert("비밀번호가 일치하지 않습니다.");
			$("#memPw").val("");
			$("#repw").val("");
			$("#memPw").focus();
		} else if($.trim($("#memBirth").val()) == ""){
			alert("생년월일을 입력하세요");
			$("#memBirth").focus();
		} else {
			$("#actionForm").submit();
		}
	});
});

</script>
</head>
<body>
<form action="memRes" id="actionForm" method="post">
<input type="hidden" name="gbn" value="u"/>
<input type="hidden" name="no" value="${data.MEM_NO}"/> 
아이디 
<input type="text" name="memId" id="memId" value="${data.MEM_ID}"/>
<br />
이름
<input type="text" name="memNm" id="memNm"  value="${data.MEM_NM}"/>
<br/>
비밀번호
<input type="password" name="memPw" id="memPw"  value="${data.MEM_PW}"/>
<br/>
비밀번호확인
<input type="password" id="repw" />
<br/>
생년월일
<input type="date" name="memBirth" id="memBirth" value="${data.MEM_BIRTH}"/>
<br/>
</form>
<input type="button" value="수정" id="updateBtn">
<input type="button" value="뒤로가기" id="listBtn">
</body>
</html>

Mem_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">
<!-- namespace : 클래스와 동일, 이 파일의 대표명 -->
<mapper namespace="mem">
	<!-- select : 조회 
		id: 구분자, 메소드명과 동일
		resultType : 조회 결과 중 한줄에 대한 자료 형태를 지정
		hashmap: mybatis-config.xml에서 별칭 지정해놔서 줄여쓸수있는거임
		쿼리 삽입시 주의사항: ;이 있는경우 문제가 발생한다. 이유는 해당 쿼리 실행시 자동으로 추가되기 때문
	-->
	<select id="getMemList" resultType="hashmap" parameterType="hashmap">
		SELECT S.MEM_NO, S.MEM_ID, S.MEM_NM, S.REG_DT
		FROM (SELECT MEM_NO, MEM_ID, MEM_NM, TO_CHAR(REG_DT,'YYYY-MM-DD') AS REG_DT,
       		  ROW_NUMBER() OVER(ORDER BY REG_DT DESC, MEM_NO DESC) AS RNK
			  FROM MEM
			  WHERE DEL = 1
			<if test="searchTxt != null and searchTxt != ''"> <!-- 검색어가 있다면 -->
				<choose>
					<when test="searchGbn == 0"> <!-- 품목 -->
						AND MEM_ID LIKE '%' || #{searchTxt} || '%'
					</when>
					<when test="searchGbn == 1"> <!-- 수량 -->
						AND MEM_NM = #{searchTxt}
					</when>
				</choose>
			</if>
             ) S
		WHERE S.RNK BETWEEN #{start} AND #{end}
	</select>
	
	<!-- 
		parameterType : 실행시 받는 값 
		#{키} : 헤당위치에 문자열로 키에 해당하는 값을 넣어준다
		ex) no에 3이 들어있는 경우
		WHERE SELL_NO = #{no}
		=> WHERE SELL_NO = '3' // 문자열이기 때문에  ' '이 들어감
		parameterType dao받는값, resultType값이 db실행결과
	-->
	<select id="getMem" resultType="hashmap" parameterType="hashmap">
		SELECT MEM_NO, MEM_ID, MEM_NM, TO_CHAR(MEM_BIRTH,'YYYY-MM-DD') AS MEM_BIRTH, TO_CHAR(REG_DT,'YYYY-MM-DD') AS REG_DT
		FROM MEM
		WHERE MEM_NO = #{no}
	</select>
	
	<!-- insert는 resultType 이 없음 -->
	<insert id="insertMem" parameterType="hashmap">
		INSERT INTO MEM(MEM_NO, MEM_ID, MEM_PW, MEM_NM, MEM_BIRTH)
		VALUES(MEM_SEQ.NEXTVAL, #{memId}, #{memPw}, #{memNm}, #{memBirth})
	</insert>
	
	
	<update id="deleteMem" parameterType="hashmap">
		UPDATE MEM SET DEL = 0
		WHERE MEM_NO = #{no}
	</update>
	
	<update id="updateMem" parameterType="hashmap">
		UPDATE MEM SET MEM_ID = #{memId},
                MEM_NM = #{memNm},
                <if test="memPw != null and memPw != ''">
                	 MEM_PW = #{memPw},
                </if>
                MEM_BIRTH = #{memBirth}
       	WHERE MEM_NO = #{no}
	</update>
	
	<select id="getMemCnt" parameterType="hashmap" resultType="Integer">
		SELECT COUNT(*) AS CNT 
		FROM MEM
		WHERE DEL = 1
		<if test="searchTxt != null and searchTxt != ''"> <!-- 검색어가 있다면 -->
			<choose>
				<when test="searchGbn == 0"> <!-- 품목 -->
					AND MEM_ID LIKE '%' || #{searchTxt} || '%'
				</when>
				<when test="searchGbn == 1"> <!-- 수량 -->
					AND MEM_NM = #{searchTxt}
				</when>
			</choose>
		</if>
	</select>
	
	
</mapper>

 

 

로그인 

Login : 입력 정보와 일치하는 사용자 정보를 보관중인 상태

Logout : 보관중인 사용자 정보가 제거된 상태

Session : 서버에 사용자의 브라우저, 아이피 등에 따라 제공되는 임시 개별공간, 지정 시간 마다 미 사용시 초기화

(브라우저! 그래서 크롬에서 로그인 되어있어도, 엣지로 들어가면 로그인 안되어있음)

Session에 넣을 것들(권장): 기본 사용자 정보, 사용빈도가 높은 데이터 키값들

 

 

Request 를 통한 세션 취득 

방법1

 

방법2

2번 방법은 한줄만 쓰면 되니 2번 방법을 많이 씀

 

 

로그아웃

세션에 정보 제거

 

LoginController.java

package com.spring.sample.web.test.controller;

import java.util.HashMap;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.spring.sample.web.test.service.ILoginService;

@Controller
public class LoginController {
	@Autowired
	public ILoginService iLoginService;

	@RequestMapping(value = "/testLogin")
	public ModelAndView testLogin(HttpSession session, // 로그인 된 상태에서 로그인 화면 못가게 하기 위해
			ModelAndView mav) {
		// session의 getAttribute(키) : 세션값 취득
		// 세션에 값이 존재한다면 main으로 이동
		if (session.getAttribute("sMemNm") != null && session.getAttribute("sMemNm") != "") {
			mav.setViewName("redirect:testMain");
		} else {
			mav.setViewName("test/login/login");
		}

		return mav;
	}

	// DB에 붙을예정
	@RequestMapping(value = "/testLoginAction")
	public ModelAndView testLoginAction(
			// HttpServletRequest req, // 1. 요청 객체 취득
			HttpSession session, // 2. Spring에 Session 객체 요청
			@RequestParam HashMap<String, String> params, ModelAndView mav) throws Throwable {
		// 1. Request를 통한 세션 취득
		// HttpSession session = req.getSession();

		// 아이디와 비밀번호가 일치하는 사용자 정보 취득
		HashMap<String, String> data = iLoginService.checkMem(params);

		if (data != null) { // 조회 데이터가 있다면
			// 세션에 값 추가
			session.setAttribute("sMemNo", data.get("MEM_NO"));
			session.setAttribute("sMemNm", data.get("MEM_NM"));

			mav.setViewName("redirect:testMain");
		} else {
			mav.setViewName("test/login/action");
		}
		return mav;
	}

	@RequestMapping(value = "/testMain")
	public ModelAndView testMain(ModelAndView mav) {
		mav.setViewName("test/login/main");

		return mav;
	}

	@RequestMapping(value = "/testLogout")
	public ModelAndView testLogout(HttpSession session, ModelAndView mav) {
		// 요청 사용자 세션 초기화
		session.invalidate();

		mav.setViewName("redirect:testMain");

		return mav;
	}
}

 

ILoginService.java

package com.spring.sample.web.test.service;

import java.util.HashMap;

public interface ILoginService {

	public HashMap<String, String> checkMem(HashMap<String, String> params) throws Throwable;

}

LoginService.java

package com.spring.sample.web.test.service;

import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.spring.sample.web.test.dao.ILoginDao;

@Service
public class LoginService implements ILoginService {
	@Autowired
	public ILoginDao iLoginDao;

	@Override
	public HashMap<String, String> checkMem(HashMap<String, String> params) throws Throwable {
		return iLoginDao.checkMem(params);
	}
}

ILoginDao.java

package com.spring.sample.web.test.dao;

import java.util.HashMap;

public interface ILoginDao {

	public HashMap<String, String> checkMem(HashMap<String, String> params) throws Throwable;

}

LoginDao.java

package com.spring.sample.web.test.dao;

import java.util.HashMap;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class LoginDao implements ILoginDao {
	@Autowired
	public SqlSession sqlSession;

	@Override
	public HashMap<String, String> checkMem(HashMap<String, String> params) throws Throwable {
		return sqlSession.selectOne("Login.checkMem", params);
	}
}

Login_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="Login">
	<select id="checkMem" resultType="hashmap" parameterType="hashmap">
		SELECT MEM_NO, MEM_NM
		FROM MEM
		WHERE DEL = 1
		AND MEM_ID = #{id} <!-- login/login jsp에서 name맞춰줘야함 -->
		AND MEM_PW = #{pw}
	</select>
</mapper>

 

 

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	$("#actionForm").on("keypress","input", function(event) {
		// 1.엔터쳤을때
		if(event.keyCode == 13){
			// 1.직접 함수 호출
			// login();
			
			// 2.버튼 이벤트 발생
			$("#loginBtn").click();
			return false;
		
		}
	})
	
	// 2.버튼 눌렀을때
	$("#loginBtn").on("click", login);
});

// 왜 function으로 하는지
// 로그인 동작하는 상황 2종류, 1.엔터쳤을때  2.버튼 눌렀을때
function login() {
	if($.trim($("#id").val()) == ""){
		alert("아이디를 입력하세요.");
		$("#id").focus();
	} else if($.trim($("#pw").val()) == ""){
		alert("비밀번호를 입력하세요.");
		$("#pw").focus();
	} else {
		$("#actionForm").submit();
	}
}

</script>
</head>
<body>
<form action="testLoginAction" id="actionForm" method="post">
	아이디 <input type="text" name="id" id="id" /><br/>
	비밀번호 <input type="password" name="pw" id="pw" /><br/>
</form>
<input type="button" value="로그인" id="loginBtn" />
</body>
</html>

action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
alert("아이디나 비밀번호가 일치하지 않습니다.");
history.back();
</script>
<body>

</body>
</html>

main.jsp

<%@ 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>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	$("#logoutBtn").on("click", function () {
		location.href = "testLogout";
	})
	
	$("#loginBtn").on("click", function () {
		location.href = "testLogin";
	})
})
</script>
</head>
<body>
<c:choose>
	<c:when test="${empty sMemNm}"> <!-- el태그의 empty : 해당 값이 비어있는지 확인 -->
		<input type="button" value="로그인" id="loginBtn" />
	</c:when>
	<c:otherwise>
		${sMemNm}님 어서어세요. <input type="button" value="로그아웃" id="logoutBtn" />
	</c:otherwise>
</c:choose>
</body>
</html>

 

 

 

TBOARD만들기

MEM테이블이랑 TBOARD랑 외래키 설정

 

테이블만 만들고, 조인은 화요일부터!

 

그리고 정렬하는거를 해봤는데

나혼자 한거라, 

anboardList

<%@ 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>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
table{
	border-collapse: collapse;
}

th, td {
	border: 1px solid #000;
	padding: 5px;
}

</style>
<script type="text/javascript" src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	
	if("${param.searchGbn}" != "") { // 검색구분이 넘어오면
		$("#searchGbn").val("${param.searchGbn}");	
	}
	
	if("${param.sortGbn}" == ""){
		$("#sortGbn").val("0");	
	}
	if("${param.sortGbn}" != "") { 
		$("#sortGbn").val("${param.sortGbn}");	
	}
	
	$('select').on('change', function() {
		$("#actionForm").attr("action","anboardList");
		$("#actionForm").submit();
	});
	
	
	$("tbody").on("click", "tr", function () {
		console.log($(this).attr("no"));
		$("#no").val($(this).attr("no"));
		
		// 검색 상태 유지
		$("#searchGbn").val($("#oldGbn").val());
		$("#searchTxt").val($("#oldTxt").val());
		$("#sortGbn").val($("#oldSort").val());
		
	
		$("#actionForm").attr("action","anboardDetail");
		$("#actionForm").submit();
	})
	
	$("#insertBtn").on("click", function () {
		location.href = "anboardInsert";
	});
	
	$("#pagingWrap").on("click", "span", function () {
		$("#page").val($(this).attr("page"));
		
		// 검색 상태 유지
		$("#searchGbn").val($("#oldGbn").val());
		$("#searchTxt").val($("#oldTxt").val());
		$("#sortGbn").val($("#oldSort").val());
		
		$("#actionForm").attr("action","anboardList");
		$("#actionForm").submit();
	});
	
	$("#searchBtn").on("click", function () {
		// 검색하면 페이지는 무조건 1페이지로 감
		$("#page").val("1"); // 페이지 초기화
		
		$("#actionForm").attr("action","anboardList");
		$("#actionForm").submit();
	})
})
</script>
</head>
<body>
<!-- 기존 검색 내용 유지용 -->
<input type="hidden" id="oldGbn" value="${param.searchGbn}"/>
<input type="hidden" id="oldTxt" value="${param.searchTxt}"/>
<input type="hidden" id="oldSort" value="${param.sortGbn}"/>
<form action="anboardDetail" id="actionForm" method="post">
	<input type="hidden" id="no" name="no" />
	<input type="hidden" id="page" name="page" value="${page}" />  <!-- 상세보기 갈때 page 가져갈거임 -->
	<select name="sortGbn" id="sortGbn">
		<option value="0">번호순</option>
		<option value="1">제목순</option>
	</select>
	<br/>
	<!-- 검색 -->
	<select name="searchGbn" id="searchGbn">
		<option value="0">제목</option>
		<option value="1">작성자</option>
	</select>
	<input type="text" name="searchTxt" id="searchTxt" value="${param.searchTxt}"/> <!-- 검색어 유지되게, 그래야 페이징할떄도 유지됨 -->
	<input type="button" value="검색" id="searchBtn" />
	<input type="button" value="추가" id="insertBtn" />
</form>

<table>
	<thead>
		<tr>
			<th>번호</th>
			<th>제목</th>
			<th>작성자</th>
			<th>조회수</th>
			<th>작성일</th>
		</tr>
	</thead>
	<tbody>
		<c:forEach var="data" items="${list}">
			<tr no="${data.NO}">
				<td>${data.NO}</td>
				<td>${data.TITLE}</td>
				<td>${data.WRITER}</td>
				<td>${data.HIT}</td>
				<td>${data.DT}</td>
			</tr>
		</c:forEach>
	</tbody>
</table>
<div id="pagingWrap">
<span page="1">처음</span>
<!-- 이전은 현재페이지에서 하나 전, 
지금 1페이지인지 아닌지 먼저 체크 따라서, 현재페이지 필요-->
<!-- 이전페이지 : 현제페이지가 1이면 1로 이동 아니면 현제페이지 -1 -->
<c:choose>
	<c:when test="${page eq 1}">
		<span page="1">이전</span>
	</c:when>
	<c:otherwise>
		<span page="${page - 1}">이전</span>
	</c:otherwise>
</c:choose>
<!-- 페이지들 -->
<c:forEach var="i" begin="${pd.startP}" end="${pd.endP}" step="1">
	<%-- 현재 페이지의 경우 별도 처리 --%>
	<c:choose>
		<c:when test="${i eq page}"> <%-- 현재페이지 --%>
			<span page="${i}"><b>${i}</b></span>
		</c:when>
		<c:otherwise> <%-- 다른페이지 --%>
			<span page="${i}">${i}</span>
		</c:otherwise>
	</c:choose>
</c:forEach>

<!-- 다음페이지 : 마지막에 도달했을때는 증가하지 않고, 다른 경우는 +1 -->
<c:choose>
	<c:when test="${page eq pd.maxP}">
		<span page="${pd.maxP}">다음</span>
	</c:when>
	<c:otherwise>
		<span page="${page + 1}">다음</span>
	</c:otherwise>
</c:choose>

<span page="${pd.maxP}">마지막</span>
</div>
</body>
</html>

 

 

detail, update, res 부분에 넣고

 

Test_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">
<!-- namespace : 클래스와 동일, 이 파일의 대표명 -->
<mapper namespace="test">

	<!-- anboard테이블 -->
	
	<select id="getAnboardList" resultType="hashmap" parameterType="hashmap">		
		SELECT S.NO, S.TITLE, S.WRITER, S.HIT, S.DT
		FROM (SELECT NO, TITLE, WRITER, HIT, CASE WHEN TO_CHAR(DT,'YY.MM.DD') = TO_CHAR(SYSDATE, 'YY.MM.DD')
        THEN TO_CHAR(DT, 'HH24:MI')
        ELSE TO_CHAR(DT, 'YY.MM.DD')
        END AS DT,
        ROW_NUMBER() OVER(ORDER BY DT DESC, NO DESC) AS RNK
		FROM ANBOARD
		WHERE DEL = 1
		<if test="searchTxt != null and searchTxt != ''"> 
			<choose>
				<when test="searchGbn == 0">
					AND TITLE LIKE '%' || #{searchTxt} || '%'
				</when>
				<when test="searchGbn == 1">
					AND WRITER LIKE '%' || #{searchTxt} || '%'
				</when>
			</choose>
		</if>
		<if test="1 == 1">
			<choose>
				<when test="sortGbn == 0">
					ORDER BY NO ASC
				</when>
				<when test="sortGbn == 1">
					ORDER BY TITLE ASC
				</when>
			</choose>
		</if>
		) S
		WHERE S.RNK BETWEEN #{start} AND #{end} 
	</select>

	<select id="getAnboard" resultType="hashmap" parameterType="hashmap">
		SELECT NO, TITLE, WRITER, CON, HIT, DT 
		FROM ANBOARD
		WHERE NO = #{no}
	</select>
	
	<insert id="insertAnboard" parameterType="hashmap">
		INSERT INTO ANBOARD(NO, TITLE, WRITER, CON)
		VALUES(ANBOARD_SEQ.NEXTVAL, #{title}, #{writer}, #{con})
	</insert>
	
	<update id="deleteAnboard" parameterType="hashmap">
		UPDATE ANBOARD SET DEL = 0
		WHERE NO = #{no}
	</update>
	
	<update id="updateAnboard" parameterType="hashmap">
		UPDATE ANBOARD SET TITLE = #{title},
                WRITER = #{writer},
                CON = #{con}
                WHERE NO = #{no}
	</update>
	
	<select id="getAnboardCnt" parameterType="hashmap" resultType="Integer">
		SELECT COUNT(*) AS CNT 
		FROM ANBOARD
		WHERE DEL = 1
		<if test="searchTxt != null and searchTxt != ''"> 
			<choose>
				<when test="searchGbn == 0"> <!-- searchGbn eq 0 -->
					AND TITLE LIKE '%' || #{searchTxt} || '%'
				</when>
				<when test="searchGbn == 1">
					AND WRITER LIKE '%' || #{searchTxt} || '%'
				</when>
			</choose>
		</if>
	</select>


	<update id="updateHit" parameterType="hashmap" >
		UPDATE ANBOARD SET HIT = HIT + 1
		WHERE NO = #{no}
	</update>
	
</mapper>
728x90