[MyBatis] 동적 쿼리 생성시 삽질 주의

 

 

MyBatis로 동적 쿼리 생성시 주의 해야 할 점. 
MyBatis 문법은 RDBMS 별로 쿼리가 조금 씩 달라지며, 
자신이 사용하는 디비에 맞지 않게 사용하면 하루종일 삽질하고 자신의 있는 모습을 볼 수 있을거다. 
 
다 같은 구문을 사용할 줄 알았는데. 이거 때문에 몇시간을 날려 먹었는지.. 
 
 

 

LIKE 문 

 

# SQL 에서 LIKE 문 은 아래와 같이 사용된다.

 

SELECT * FROM TABLE_NAME

WHERE COLUMN_NAME LIKE PATTERN 

 

 

SELECT FROM SAMPLE

 

WHERE TAG LIKE 'Sa%' 

 

OR WHERE TAG LIKE '%am' 

OR WHERE TAG LIKE '%am%'  

 

 

# Mybatis에서는 DBMS 종류 별로 차이가 있다.

 

# MySql

 

SELECT FROM TABLE_NAME

WHERE COLUMN_NAME LIKE CONCAT(‘%’, #{searchKeyword}, ‘%’)

 

# ORACLE

 

SELECT FROM TABLE_NAME

WHERE COLUMN_NAME LIKE '%'||#searchKeyword#||'%' 

 

 

# Ms-Sql

 

SELECT FROM TABLE_NAME

WHERE COLUMN_NAME LIKE '%' + #searchKeyword# + '%'

 

이 처럼 미묘하게 다르니깐, 꼭 확인후 사용 하자.  

 

 

 

 

추가 

 

# # 대신 $ 를 붙여서 SQL 에서 쓰던식으로 써도 된다고는 하는데 해보지는 않았다. 

 

SELECT FROM TABLE_NAME

WHERE COLUMN_NAME LIKE 

'%${

searchKeyword

}%' 

 

반응형

 

[MyBatis] 동적 쿼리  

 

 

쿼리를 짜다보면 동적 쿼리를 만들어야 할 때 가 있다. 싫다 

 

마이바티스에서는 동적 쿼리를 처리하는 방법이 존재한다.

 

 

1. if 문

 

# keyword 가 null 이 아니면  AND KEYWORD LIKE #{keyword} 

 

<select id="dynamicSql" resultType="EgovMap">

    SELECT * FROM MAP

    WHERE POIX = '100'

    <if test="keyword != null">

        AND KEYWORD LIKE #{keyword}

    </if>

</select>

 

# if문 안에서 문자열 비교 

# 파라미터.equals('keyword')# (파라미터 eq 'A'.toString())

 

# 파라미터 == 'A'

 

 <if test="keyword != null and keyword.equals('서울') ">

        AND KEYWORD LIKE #{keyword}

 </if>

 

 

 

2. choose, when, otherwise

 

# if - else 구문 처럼 쓸 수 있다 

 

<select id="dynamicSql" resultType="EgovMap">

  SELECT * FROM MAP

  WHERE POIX = '100'

  <choose>

    <when test="keyword != null and keyword.equals('서울')">

      AND KEYWORD LIKE #{keyword}

    </when>

    <when test="keyword != null and keyword.equals('부산')">

      AND KEYWORD LIKE #{keyword}

    </when>

    <otherwise>

      AND KEYWORD = '경기'

    </otherwise>

  </choose>

</select>

 

 

3. foreach

 

# 마이바티스는 반복문도 가능하다

foreach 를 사용하여 collection 에 대해 반복처리와 IN 조건에 사용한다 

 

<select id="dynamicSql" resultType="EgovMap">

SELECT * FROM MAP

WHERE KEYWORD IN

<foreach item="item" index="index" collection="list" open="(" separator="," close=")">

        #{item}

</foreach>

</select>

 

반응형

vi 에디터 비정상 종료시




어제 vi 에디터로 열심히 작업이였는데 누군가 서버를 재부팅 해버렸다....   


vi 에서 작업중 비정상 종료시 작업 내용을 swap 파일로 자동을 보관 된다고 하네요


그래서 vi 로 문서를 열때 해당 스왑파일이 있는지 알려줍니다 


이걸 복구해서 사용 하면 됩니다 


■ 복구 명령어


#vi -r file.txt 




그리고 복구하고 나서는 swap 파일을 지워주세요 (ls -a 로 확인할수 있습니다~)



■ swap 파일 삭제 명령어


#vi .file.txt.swap



반응형

리눅스 기본 명령어

명령어 도움말 보기

#리눅스에서 사용되는 도움말 명령어는 두가지가 있다
#1
명령어 --help
※ --help 를 붙인다고 해서 모든 명령어의 도움말이 나오지는 않고 간단한 명령어는 내용이 없을 수 있다
cp --help

#2
man 명령어
위로 이동 : page down 또느 스페이스바
아래로 이동 : page up 또는 b
종료 : q

man cp

디렉토리를 변경

cd webapps       : 하위 폴더인 webapps로 이동
cd .. : 상위 폴더로 이동
cd || cd ~ : root 폴더로 이동
cd /tomcat7/logs : 현재 작업중인 폴더가 아닌 다른 폴더로 이동, /로 시작해서 경로를 입력

#절대 경로
절대경로는 경로에 절대 값을 의미 합니다.
시작위치와 상관 없이 경로에 모든 디렉토리를 적어주면 됩니다.
절대경로에 시작은 / 에서 부터 시작을 합니다.

#상대 경로
상대 경로는 현재 작업중인 폴더를 기준으로 주는 경로 값입니다.

#설정되어 있는 경로
. : 현재 작업중인 폴더를 의미 합니다.
.. : 현재 작업중인 폴더의 바로위의 상위 폴더를 의미 합니다.
~ : 홈 디렉토리의 경로를 의미 합니다.
- : 이전 폴더를 의미 합니다.

현재 디렉토리 확인

pwd : 현재 작업중인 폴더의 위치 확인

디렉토리 목록/정보 출력

ls : 디렉토리 목록 출력
ll : 디렉토리 목록 / 정보 출력

옵션
-a : 숨겨진파일을 포함해서 모든 내용을 출력 합니다.
-l : 자세한 내용을 표시 합니다.
-r : 내림차순 정렬 (기본은 오름차순 정렬)
-m : 가로로 출력
-f : 디스크에 저장된 순서대로 출력
-c : 최근 변경된 파일 부터 정렬해서 출력
-R : 하위 디렉토리 출력

#기본 사용
ls -al : 모든 파일을 자세히 보기

#grep 과 같이 쓰면 필요한 파일만 볼수 있음
ls -al | grep tomcat

폴더 생성 / 삭제

# 생성
mkdir 옵션 디렉토리명

옵션
-p : 생성하려는 디렉토리에 상위 디렉토리가 필요할경우 같이 만듭니다.
-m : 생성하는 디렉토리의 권한을 설정합니다. 설정시 umask 를 사용해서 설정 됩니다.

mkdir upload

#삭제
rmdir 옵션 디렉토리명

옵션
-f : 삭제 확인없이 바로 삭제
-r : 포함된 하위 디렉토리도 모두삭제

rmdir upload


반응형

jQuery 로 핸드폰 번호 입력시 하이푼(-) 자동으로 넣고 빼기 : 


jQuery event 와 

정규식과 substr 이용 


<script>

$(document).ready(function(){ 

    $("input#phone").blur(function(){

    var num = $("#phone").val();

    blur(num)

    });

    $("input#phone").click(function(){

    var num = $("#phone").val();

    focus(num);

    });

});


function focus(num) {

num = num.replace(/[^0-9]/g, '');

$("#phone").val(num);

}


function blur(num) {

num = num.replace(/[^0-9]/g, '');

var tmp = '';

tmp += num.substr(0, 3);

tmp += '-';

tmp += num.substr(3, 4);

tmp += '-';

tmp += num.substr(7);

$("#phone").val(tmp);

}


</script>



<body>

<input type="text" name="phone" id="phone" placeholder="phone number" maxlength="13"  />

</body>




참고 : http://www.w3schools.com/jquery/jquery_ref_events.asp

반응형


twitter-korean-text


트위터에서 만든 한국어 처리기


스칼라로 쓰여진 한국어 처리기입니다. 현재 텍스트 정규화와 형태소 분석, 스테밍을 지원하고 있습니다. 짧은 트윗은 물론이고 긴 글도 처리할 수 있습니다. 개발에 참여하시고 싶은 분은 Google Forum에 가입해 주세요. 사용법을 알고자 하시는 초보부터 코드에 참여하고 싶으신 분들까지 모두 환영합니다.


... 중략 



트위터에서 제공하는 한국어 형태소 분석기 입니다. 


정규화, 토큰화, 어근화, 어구 추출 까지 4단계로 이루어 집니다.  깃허브(GitHub)  twitter 페이지로 가면 다운받을 수 있어요.


https://github.com/twitter/twitter-korean-text

그리고 메이븐(Maven)을 이용하고 있다면 pom.xml 에 


       <dependency>

     <groupId>com.twitter.penguin</groupId>

     <artifactId>korean-text</artifactId>

     <version>4.4</version>

    </dependency>


를 추가 해주면 됩니다. 


다른 형태소 분석기 보다 속도가 아래 그림과 같습니다.

빨간색 - Twitter


<출처 : github.com/twitter/twitter-korean-text>





반응형


웹에서 작업을 하다보면 한글이 깨질 때가 종종 있다.


자바, jsp 페이지에 request.setCharacterEncoding("utf-8"); 를 열심히 추가 해봤자 소용이 없는 경우가 있었는데 


Sever - Tomcat - sever.xml 을 수정해주면 해결 된다. 


아래 그림처럼 URIEncoding="UTF-8" 를 추카 해주자 







그리고 전자정부프레임워크를 사용하고 있다면 web.xml 파일에


        <filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


를 등록 해주면 된다. 근데 이미 되어있을 거에요. 






반응형

import java.security.MessageDigest;


public class Sha256_Util {

public String encrypt(String planText){

try{

MessageDigest digest = MessageDigest.getInstance("SHA-256");

digest.update(planText.getBytes("UTF-8"));

byte[] byteData = digest.digest();

StringBuffer hexString = new StringBuffer();

for(int i = 0; i<byteData.length; i++){

String hex = Integer.toHexString(0xff & byteData[i]);

if(hex.length() == 1)

hexString.append("0");

hexString.append(hex);

}

return hexString.toString();

}catch(Exception ex){

ex.printStackTrace();

throw new RuntimeException();

}

}

}


사용 예 :



결과 :



반응형

+ Recent posts