본문 바로가기
소소한 지식모음

return false, NVL, where 1=1, 커스텀태그

by 작심평생 2019. 12. 2.
JSP에서 onclick의 return false
: 기본 속성 무시 + exit의 의미
 
ex) <a href="http://www.naver.com" onclick="gogosing(); return false;">네이버 바로가기</a>
 
위의 상황인 경우 원래 실행순서는 onclick 후 href로 이동되야하지만 뒤에 return false를 붙이면 기존에 있던 기능들이 사라진다. 즉, 원래 가지고 있던 href 로 이동하는 기본 속성을 무시하게 된다.
 
참고
 
1
2
3
4
5
6
function goDel() {
    if ($("#deltYn").val() == "N") {
        alert("권한이 없습니다. 관리자에게 문의해 주세요.");
        return;
    }
}
Colored by Color Scripter
 
여기서 return은 exit 하는 역할로 쓰인다.
 

 


 

 
오라클 NVL / NVL2
 
    ▶ NVL : 해당 컬럼의 값이 null 값인 경우, 특정값으로 출력
            - NVL("값", "특정값")
 
    ▶ NVL2 : null값이 아닌 경우 A값, null인 경우 B값 출력
            - NVL2("값", "A", "B")
 
 
오라클 WHERE 1=1
: 무조건 참인 조건을 뜻한다
: 무조건 참인 조건을 쓰고 그 뒤에 붙여주기 위해서 사용한다. (= 동적으로 이용하기 위해)
: mybatis에서 <where> 태그를 쓰는 것과 같다.
 
1
2
3
4
5
SELECT * FROM B 
WHERE 1=1  
    <if test='tempcondition !=null and  !"".equals(tempcondition)'>
       AND SUBSTR(TEST,1,4) = #{param1}
   </if>
Colored by Color Scripter
 
 
주의할 점은 예외처리(null값이나 '' 등)를 꼭 확인해야한다! WHERE문에 무조건 참인 경우가 초기값으로 잡혀있기 때문에 DELETE, UPDATE에서 의도치 않은 결과가 나올 수 있기 때문이다.
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG
  <where>
    <if test="state != null">
         state = #{state}
    </if>
    <if test="title != null">
        AND title like #{title}
    </if>
  </where>
</select>
Colored by Color Scripter
 
mybatis(마이바티스)에서는 WHERE 1=1 대신 <where>를 쓰는 경우다.
단순히 where을 추가해주는 역할로 "AND”나 “OR”로 시작한다면 그 “AND”나 “OR”를 지워버린다.
 
즉, WHERE 1=1을 굳이 안 써줘도 상황(조건)에 따라 SELECT * FROM A; 가 되기도 하고 
SELECT * FROM A WHERE B =1; 또는 SELECT * FROM A WHERE B=1 AND C=2; 등으로 동적으로 처리가 가능해진다
 
 
참고
 
 

 


 
Custom tag(커스텀 태그 라이브러리)
 
Custom Tag Library Descriptor
 
: 업무 중에 자주 반복되는 작업들을 처리하기 위해 공통으로 구현해놓은 Util Class 등이 있다. 이를 Jsp에서 사용하기
  위해 커스텀 태그라이브러리(Custom Tag Library Descriptor) 이용한다.
 
: 다른 controller에 작성된 조회 service를 뷰단에서 사용하는 것으로 결국은 DB에 접근하는 것이라 남용하면 성능상 안좋
 을 것 같다.
 
 
 
1
2
3
4
5
6
7
8
 
    /* 공통코드 중 원하는 코드 목록 조회 */
    String cmCdGrpId = "SEARCH_DATE_TYPE_CD";
    List<CodeVO> code1 =  systemService.selectCodeList(cmCdGrpId);
    model.addAttribute("code1", code1);
            
    return "/send/result";
}
Colored by Color Scripter
 
mybatis의 mapper 중 공통으로 사용되는 VO를 뽑아 model.addAttribute 해주는 모습으로 원하는 조회 쿼리와 비교를 위해서 사용해야한다. 커스텀 태그를 사용하면 controller단에서 해당 코드를 안 써도된다.
 
 

1. WEB-INF > tlds > abcd.tld 파일을 생성

2. 이용할 메소드의 경우 Static으로 구현이 되어 있어야 한다. (public static ~~~)
   그래야 Jsp 단에서 인스턴스 생성 없이 클래스 메소드로 사용할 수 있기 때문이다.
 

(만약 jsp 단에서 해당 태그를 반복해서 쓸 일이 있다면 차라리 Controller에서 추가해서 넘겨주던가 쿼리문에서 같이 가져오는게 낫지않을까..)

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8" ?>
    version="2.0">
    
  <description>codeUtil function library</description> // 태그 라이브러리 파일 설명
  <display-name>codeUtil function</display-name> // 태그 라이브러리 파일 이름
  <tlib-version>1.1</tlib-version>
  <short-name>codeUtil</short-name> // jsp에서 사용될 이름 (ex. codeUtil:xxxx)
  <uri>tld/codeUtil.tld</uri> // jsp에서 선언될 uri
  
  <function>
      <description>코드 리스트 조회</description> 
      <name>CodeList</name> // 함수 이름
      <function-class>com.system.controller</function-class> // 사용할 함수 클래스
      <function-signature>java.util.List  getCmCodeList(java.lang.String)</function-signature> // 함수 선언(리턴타입, 함수명(파라미터) 순서로 작성
      <example> // 실제 사용방법 설명
            ${codeUtil:getCmCodeList(cmCdGrpId)}
      </example>
  </function>
  
  <function> ... </function> // 더 추가 하고 싶으면 위와 동일한 형식으로 작성
</taglib>
Colored by Color Scripter
 
 
참고 
 
 

댓글