예시)
$(document).ready(function() {
let result = '<c:out value = "${result}"/>'
checkAlert(result);
console.log(result);
function checkAlert(result) {
if (result === '') {
return;
}
if (result === "enrol success") {
alert("등록이 완료되었습니다.");
}
});
@RequestMapping("/boardUpdate")
public String boardUpdate(BoardVO vo, RedirectAttributes rttr) throws Exception {
System.out.println(vo.toString());
service.update(vo);
rttr.addFlashAttribute("result", "modify success");
return "redirect:/listPage";
}
.preventDefault()함수 : a, button, submit 등 페이지를 이동시키거나 form 의 내용을 전송하거나 고유의 동작이 있는데 그 동작을 중단시킴 -> 원하는 처리를 할 수 있게함
출력 태그 c:out
<c:out value="${value}"/>
: 보안상 좋다
html 문자 탈락시키는 기능, 엄격한 태그 규칙, 개행 문자 파싱의 차이 등.
또는 바로 el태그를 써도 됨
<c:out value="${value}" escapeXml="true"나 "false" default="출력값/>
value 속성-필수입력해줘야됨(화면에 출력할값)
어떤 값이든 간에 출력 값을 문자열로 바꾸어 출력합니다. escaperXml 속성은 기본적으로 true 값으로 설정되나 false로 설정했을때 default 속성은 value 값을 찾지 못했을 때 출력하는 값임
동적SQL : MyBatis의 동적 태그를 통해 조건에 맞게 파라미터를 조정할 수 있음
참고) https://mybatis.org/mybatis-3/ko/dynamic-sql.html
<if test="type == 'T'.toString()">
(title like '%'||#{keyword}||'%')
</if>
(oracle)
검색 조건이 추가되어 변경될 sql문(전체 개수 조회메서드, 게시글 필터링 된 메서드)에 중복된 코드를 줄이기 위해서 <sql>, <inlcude>
태그를 사용하고 게시글전체 개수 조회 메서드, 검색조건에 따른 게시글 조회 메서드에 추가한다.
sql 태그 : 쿼리의 상단에 선언, 다른구문에서 재사용할 sql구문을 지정함 파라미터처럼 사용할 수 있음
include 태그 :같은 파일 내에 정의해둔 <sql>
태그 내의 쿼리들을 불러올 수 있게해줌 <include>
태그를 선언하고 해당 태그에 refid속성을 추가 해준 뒤 속성 값으로 불러오고자 하는 <sql>
태그의 id속성 값을 삽입
<trim>
은 앞뒤 필요구문 추가하거나 생략 역할
이를 이용해 검색 조건을 결합하기
prefix : 실행될 쿼리의 <trim>
문 안에 쿼리 가장 앞에 붙여준다.
prefixOverrides : 실행될 쿼리의 <trim>
문 안에 쿼리 가장 앞에 해당하는 문자들이 있으면 자동으로 지워준다.
suffix : 실행 될 쿼리의 <trim>
문 안에 쿼리 가장 뒤에 붙여준다.
suffixOverrides : 실행될 쿼리의 <trim>
문 안에 쿼리 가장 뒤에 해당하는 문자들이 있으면 자동으로 지워준다.
상황에 따라 where, set, and, or 등등 키워드를 추가하거나 빼야할 때가 있음
https://java119.tistory.com/103 참고함!
choose-when 구문을 이용해 검색 조건을 줌
아래는 참고 예시들
prefix, prefixOverrides 사용
맨 앞에 있는 연산자를(AND 또는 OR) 제거하는 경우
<select id="selectInfo" resultType="user">
SELECT * FROM USER
<trim prefix="WHERE" prefixOverrides="AND |OR">
<if test="username != null">AND username=#{username}</if>
<if test="password != null">OR password=#{password}</if>
<if test="email != null">AND email=#{email}</if>
</trim>
</select>
prefix, prefixOverrides, suffixOverrides 사용
맨 앞에 'SET' 붙이고 맨 앞, 맨 끝에 있는 콤마(,)를 제거하기
<update id="updateTable">
UPDATE TABLE
<trim prefix="SET" prefixOverrides="," suffixOverrides="," >
<if test="aFlag != null">
, A_FLAG = #{aFlag}
</if>
<if test="bFlag != null">
, B_FLAG = #{bFlag}
</if>
<if test="cFlag != null">
, C_FLAG = #{cFlag} ,
</if>
</trim>
WHERE KEY = #{key}
</update>
prefix, prefixOverrides, suffix 사용
맨 앞에 'AND (' 붙이고 맨 앞 'OR' 제거하고 맨 끝에 ')' 붙이기
<select id="searchUser">
<trim prefix="AND (" prefixOverrides="OR" suffix=")">
<if test="searchCategory0 != null">
OR TT LIKE '%' || #{searchContent} || '%'
</if>
<if test="searchCategory1 != null">
OR DS LIKE '%' || #{searchContent} || '%'
</if>
<if test="searchCategory2 != null">
OR WRT_MPR_NM LIKE '%' || #{searchContent} || '%'
</if>
</trim>
</select>
MyBatis에서 like 구문 사용법
MySQL
name like concat('%',#{userName},'%')
바로 쿼리문실행시에는 컬럼명 like '%ddddd%%'
라고 해도 실행이 되지만 MyBatis를 썼을때는 문자열을 붙여주는 함수 concat을 사용해야함
MsSQL
name like '%'+#{userName}+'%'
Oracle
name like '%'||#{userName}||'%'
<if>
태그 - 검색조건없이 화면을 이동할 때 null인 typeArr 변수가 생성되고 BoardMapper 로 전달이 되는데 에러를 방지하기 위함이다.
foreach문 지원 태그
collection : 전달받은 인자. List or Array 형태만 가능
item : 전달받은 인자 값을 alias 명으로 대체
open : 구문이 시작될때 삽입할 문자열
close : 구문이 종료될때 삽입할 문자열
separator : 반복 되는 사이에 출력할 문자열
index : 반복되는 구문 번호이다. 0부터 순차적으로 증가
collection을 넘겨주는 배열 변수 값과 동일