길고긴 휴가가 끝났다.
다시 재자리 일상으로 ^^
CURDATE() returns the current date.
The following SELECT statement:
will result in something like this:
NOW() | CURDATE() | CURTIME() |
---|---|---|
2008-11-11 12:45:34 | 2008-11-11 | 12:45:34 |
The following SQL creates an “Orders” table with a datetime column (OrderDate):
Notice that the OrderDate column specifies CURDATE() as the default value. As a result, when you insert a row into the table, the current date are automatically inserted into the column.
Now we want to insert a record into the “Orders” table:
The “Orders” table will now look something like this:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Jarlsberg Cheese | 2008-11-11 |
자바스크립트 쿠키 클래스서버측 언어에서 쿠키 핸들링하는 함수들을 제공하지만 개발하다보면 클라이언트에서 자바스크립트로 쿠키를 조작해야하는 경우들이 있다.
자바스크립트로 쿠키를 핸들링하는 함수들은 많이 있지만 쿠키생성할때의 옵션들도 다시 확인해보면서 클래스로 묶고 사용하기 편하게 다시 정리해보았다.
■ 자바스크립트 쿠키 클래스
var Cookie = { cookie_arr : null, set : function (name,value,options) { options = options || {}; this.cookie_arr = [escape(name) + '=' + escape(value)]; //-- expires if (options.expires) { if( typeof options.expires === 'object' && options.expires instanceof Date ) { var date = options.expires; var expires = "expires=" + date.toUTCString(); this.cookie_arr.push (expires); } } else if (options.expires_day) { this.set_expires_date (options.expires_day , 24*60*60); } else if (options.expires_hour) { this.set_expires_date (options.expires_hour , 60*60); } //-- domain if (options.domain) { var domain = "domain=" + options.domain; this.cookie_arr.push (domain); } //-- path if (options.path) { var path = 'path=' + options.path; this.cookie_arr.push (path); } //-- secure if( options.secure === true ) { var secure = 'secure'; this.cookie_arr.push (secure); } document.cookie = this.cookie_arr.join('; '); //console.log (this.cookie_arr.join('; ')); }, get : function (name) { var nameEQ = escape(name) + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length,c.length)); } return null; }, del : function (name , options) { options = options || {}; options.expires_day = -1; this.set ( name , '' , options ); }, set_expires_date : function (expires , time) { var date = new Date(); date.setTime(date.getTime()+(expires*time*1000)); var expires = "expires=" + date.toUTCString(); this.cookie_arr.push (expires); } };
■ 옵션들에 대한 설명
옵션 내용 형식 지정 안했을경우 기본값 설명
————– ————– —————————————————————— ———————– ————————————————————————————————
expires 쿠키 만료일 new Date(year, month, day, hours, minutes, seconds, milliseconds) 브라우져 종료시점까지 쿠키 만료일을 정확하게 지정. new Date(2013,8,10,0,0,0) 와 같이 초까지만 지정하면 된다.
expires_day 쿠키 생존 일 숫자 브라우져 종료시점까지 쿠키 만료일을 현재시간으로부터 몇일후로 지정
expires_hour 쿠키 생존 시간 숫자 브라우져 종료시점까지 쿠키 만료일을 현재시간으로부터 몇시간후로 지정
domain 도메인 www.example.com 또는 sub.example.com 또는 example.com 현재의 도메인 쿠키가 적용될 도메인으로 example.com 으로 지정시 앞에 모든 서브도메인에서 모두 사용 가능
path 경로 / 또는 /dir / 쿠키가 적용될 디렉토리로 /dir 로 입력시 /dir로 시작하는(/direc , /dirpath 등) 모든 디렉토리에 적용
secure ssl true 또는 false false true로 설정하면 보안을 위해 ssl 즉 https 프로토콜일때만 쿠키 생성
– 모든 옵션은 말 그대로 필요한것이 있을경우 지정하면 되고, 지정 안하면 기본값으로 세팅된다.
– expires , expires_day , expires_hour 는 경우에 맞게 적당한것으로 한가지를 골라 사용하면 된다. 3개중 2개 이상을 중복해서 사용하면 위 적힌 순서대로 먼저 적은것이 적용되게 된다. 즉 expires 와 expires_day 를 동시에 옵션을 주면 expires 가 적용되고 expires_day는 무시된다.
■ 사용 예제
◎ 쿠키 만들기
1. 기본옵션으로 쿠키 만들기
– 브라우저가 종료되면 없어지고, 현재 도메인에서, 모든 디렉토리 (/) 에서 사용가능한 쿠키가 만들어진다.
Cookie.set ('cookie_name1' , 'cookie_value1');
2. 모든 옵션
Cookie.set ('cookie_name2' , 'cookie_value2' , { expires : new Date(2013,8,10,0,0,0), domain: 'example.com', path : '/dir', secure : true });
3. 만료일 : 일(day)단위
– 현재시간으로부터 1일동안 사용가능한 쿠키 만들기
– 위 2번에서 expires 옵션 대신 사용하면 된다.
Cookie.set ('cookie_name3' , 'cookie_value3' , { expires_day : 1 });
4. 만료일 : 시간(hour)단위
– 현재시간으로부터 12시간동안 사용가능한 쿠키 만들기
– 위 2번에서 expires 옵션 대신 사용하면 된다.
Cookie.set ('cookie_name4' , 'cookie_value4' , { expires_hour : 12 });
5. 특수문자(; 와 =) 처리
– 쿠키는 document.cookie 에 = 과 ; 을 이용하여 값들을 문자열로 연결하여 저장하고, 값을 가져올때에도 = 과 ; 을 기준으로 잘라서 가져오기때문에 2개 문자를 포함한 특수문자들을 처리해준다.
Cookie.set ('cookie_name=;=' , ';=cookie_value3=a=;b');
◎ 쿠키값 가져오기
6. 쿠키값 가져오기
Cookie.get ('cookie_name1');
7. 5번에서 특수문자가 포함된 이름과 값으로 생성된 쿠키값 확인
Cookie.get ('cookie_name=;=');
◎ 쿠키 삭제
8. 1번에서 기본옵션값으로 생성한 쿠키값 삭제
Cookie.del ('cookie_name1');
9. 2번에서 옵션값을 정해서 생성한 쿠키값 삭제
– 만료일을 제외한 모든 옵션을 생성할때와 똑같이 지정해서 삭제해야 함
Cookie.del ('cookie_name2' , { domain: 'example.com', path : '/dir', secure : true });
실무에서 SQL문을 작성하다 보면 동적인 쿼리문 작성을 작성해야 할 때가 많이 있다.
이때 지겹게 if~else if 문을 통해 아주 지저분한 소스 코드를 생성할 때가 왕왕 있게 마련이다.
이때 ibatis에서는 아주 깔금하게 구현할 수 있는 방법을 제공해 준다.
<statement id="dynamicGetAccountList" resultMap="account-result"> select * from account <dynamic prepend="WHERE"> <isNotNull prepend="AND" property="firstName"> (acc_first_name = #firstName# <isNotNull prepend="OR" property="lastName"> acc_last_name = #lastName# </isNotNull> ) </isNotNull> <isNotNull prepend="AND" property="emailAddress"> acc_email like #emailAddress# </isNotNull> <isGreaterThan prepend="AND" property="id" campareValue="0"> acc_id = #id# </isGreaterThan> </dynamic> order by acc_last_name </statement>
상황에 의존적인 위 동적 statement로 부터 각각 다른 16가지의 SQL문이 생성될 수 있다. if-else구조와 문자열 연결을 코딩하는 경우 수백라인이 필요할 수도 있다.
동적 statement를 사용하는 것은 몇몇 조건적인 태그를 추가하는 것처럼 간단하게 작성할 수 있다.
이러한 조건들에 대해 간단히 정리하면 아래와 같다.
바이너리 조건 요소-바이너리 조건 요소는 정적값 또는 다른 프로퍼티값을 위한 프로퍼티값과 비교한다. 만약 결과가 true라면 몸체부분의 SQL쿼리가 포함된다.
바이너리 조건 속성
prepend
Statement에 붙을 오버라이딩 가능한 SQL부분(옵션)
property
비교되는 property(필수)
compareProperty
비교되는 다른 property (필수 또는 compareValue)
compareValue
비교되는 값(필수 또는 compareProperty)
<isEqual>
프로퍼티가 값 또는 다른 프로퍼티가 같은지 체크
<isNotEqual>
프로퍼티가 값 또는 다른 프로퍼티가 같지 않은지 체크
<isGreaterThan>
프로퍼티가 값 또는 다른 프로퍼티 보다 큰지 체크
<isGreaterEqual>
프로퍼티가 값 또는 다른 프로퍼티 보다 크거나 같은지 체크
<isLessThan>
프로퍼티가 값 또는 다른 프로퍼티 보다 작은지 체크
<isLessEqual>
프로퍼티가 값 또는 다른 프로퍼티 보다 작거나 같은지 체크
사용법 예제)
</pre> <isLessEqual prepend="AND" property="age" compareValue="18"> ADOLESCENT = 'TRUE' </isLessEqual>
단일 조건 요소-단일 조건 요소는 특수한 조건을 위해 프로퍼티의 상태를 체크한다.
prepend
statement에 붙을 오버라이딩 가능한 SQL부분(옵션)
property
체크하기 위한 프로퍼티(필수)
<isPropertyAvailable>
프로퍼티가 유효한지 체크
(이를 테면 파라미터의 프로퍼티이다.)
<isNotPropertyAvailable>
프로퍼티가 유효하지 않은지 체크
(이를 테면 파라미터의 프로퍼티가 아니다.)
<isNull>
프로퍼티가 null인지 체크
<isNotNull>
프로퍼티가 null이 아닌지 체크
<isEmpty>
Collection, 문자열 또는 String.valueOf() 프로퍼티가 null이거나 empty(“” or size() < 1)인지 체크
<isNotEmpty>
Collection, 문자열 또는 String.valueOf() 프로퍼티가 null 이아니거나 empty(“” or size() < 1)가 아닌지 체크
사용법 예제)
</pre> <isNotEmpty prepend="AND" property="firstName"> FIRST_NAME = #firstName# </isNotEmpty>
다른 요소들
Parameter Present : 파라미터 객체가 존재하는지 체크
Parameter Present Attributes : prepend – the statement에 붙을 오버라이딩 가능한 SQL부분
<isParameterPresent>
파라미터 객체가 존재(not null)하는지 체크
<isNotParameterPresent>
파라미터 객체가 존재하지(null) 않는지 체크
사용법 예제)
</pre> <isNotParameterPresent prepend="AND"> EMPLOYEE_TYPE = 'DEFAULT' </isNotParameterPresent>
Iterate : 이 태그는 Collection을 반복하거나 리스트내 각각을 위해 몸체 부분을 반복한다.
Iterate Attributes :
prepend – the statement에 붙을 오버라이딩 가능한 SQL부분 (옵션)
property – 반복되기 위한 java.util.List타입의 프로퍼티 (필수)
open – 반복의 전체를 열기 위한 문자열, 괄호를 위해 유용하다. (옵션)
close – 반복의 전체를 닫기 위한 문자열, 괄호를 위해 유용하다. (옵션)
conjunction – 각각의 반복 사이에 적용되기 위한 문자열, AND 그리고 OR을 위해 유용하다. (옵션)
<iterate>
java.util.List 타입의 프로퍼티 반복
사용법 예제)
</pre> <iterate prepend="AND" property="userNameList" open="(" close=")" conjunction="OR"> username = #userNameList[]# </iterate>
주의:iterator요소를 사용할 때 리스트 프로퍼티의 끝에 중괄호[]를 포함하는 것은 중요하다. 중괄호는 문자열처럼 리스트를 간단하게 출력함으로부터 파서를 유지하기 위해 리스트처럼 객체를 구별한다.
*추가*
아이바티스 & 마이바티스 동적 쿼리 .. 반드시 숙지 ! ㅎ
톰캣의 디폴트 (Default) favicon.ico을 변경하기 위해 다음 파일을 replace할 수 있다.
$CATALINA_HOME/webapps/ROOT/favicon.ico
이를 replace하면 모든 JSP가 영향을 받는다.
혹은 각 JSP 파일마다 다음과 같이 추가할 수도 있다.
<link href=”some_favicon.png” rel=”icon” type=”image/x-icon” />
이 경우에는 파일 이름과 확장자에 제약을 받지 않는다.
References:
http://stackoverflow.com/questions/10561112/how-do-you-remove-tomcats-default-favicon
http://stackoverflow.com/questions/399286/favicon-ico-in-java-war-file
local환경에서만 접속을하면 상관없지만 우리의 소중 DB는 외부 접속에서 항상 더 많이 쓰이는것 같다.. (여러 시스템이 연결되어있을때) 그래서 간략하게나마 외부접속 방법을 메모 한다.1. mysql 접속 후 mysql database 선택 mysql> use mysql; 2. user 테이블 살펴보기 mysql> select host, user, password from user; root 의 host 값들은 localhost, 127.0.0.1 등으로 기본 등록되어 있지만, 외부접속을 나타내는 값이 없다. 특정 아이피로 지정할 수도 있지만 여기선 % 기호로 어디서든 접속 가능하게 만든다. 3. 권한 설정 mysql> grant all privileges on *.* to 'root'@'%' identified by 'root의 패스워드'; Query OK, 0 rows affected (0.03 sec) 4. 등록확인하기 mysql> select host, user, password from user; root 계정의 host 필드에 % 가 등록되었는지 확인한다. 5. refrash mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 위 단계는 my.cnf 파일 수정후 서버를 재시작할 것이기 때문에 굳이 안해도 된다. 6. my.cnf 에서 외부접속 관련사항 변경하기 user@home:~$ sudo vim /etc/mysql/my.cnf 파일 내용중 bind-address = 127.0.0.1 부분 주석처리후 저장하기 7. mysql 재시작 user@home:~$ sudo /etc/init.d/mysql restart 8. 완료. 이제 외부 클라이언트 프로그램에서 접속이 가능하다 ^^
ajax form 전송시
결과값을 다음과 같이 뽑아 낼수 있다. 편리함..
&test=test&test1=test1&test2=test2&test3=test3
위와 같이 url표기로 value를 뽑아오고 post로 서버에 요청시
&기호는 구분자로 인식하여 변환을 해줘야한다.
자바스크립트단에서 일괄로 & 기호를 변경해준후
자바단에서 받으면 다시 &기호로 변환해준다..
(다른방법도 있을듯.. 추후 찾아보기)
$("form[name=name]").serialize(); form안에 name값을 일괄로 전송 <form> <input name=“test” value=“test”> <input name=“test1” value=“test1”> <input name=“test2” value=“test2”> <input name=“test3” value=“test3”> </form>
// yyyymmdd 형태로 포매팅된 날짜 반환
Date.prototype.yyyymmdd = function() { var yyyy = this.getFullYear().toString(); var mm = (this.getMonth() + 1).toString(); var dd = this.getDate().toString(); return yyyy + (mm[1] ? mm : '0'+mm[0]) + (dd[1] ? dd : '0'+dd[0]); } console.log((new Date()).yyyymmdd());
ORM프레임워크 아이바티스/마이바티스 에 쓰이는 동적쿼리입니다.
아직 카테고리가 없어서 Databases에 메모 ^^ ; 나중에 따로 기록해야겠네요
1) <isNotEqual> - 변수에 값이 지정 된 값과 같지 않을 경우 명령문을 실행하는 명령어 입니다. if( num != 0 ) 과 같은 의미의 명령어 입니다.
2) 사용방법 <isNotEqual prepend="AND" property="비교 할 변수 명" compareValue="비교 할 값"> NAME LIKE '%' || #searchKeyword# || '%' </isNotEqual> <isNotEqual prepend="AND" property="searchCondition" compareValue="1"> NAME LIKE '%' || #searchKeyword# || '%' </isNotEqual>
예입니다. 그리고 프레임보더 하고 뒷부분전부다 0으로 해주시구여 스코롤링이 되게 하려면 yes 아니면 no로 해주시면 된답니다.<iframe src='http://주소' width="가로사이즈" height="세로사이즈" frameborder=0 framespacing=0 marginheight=0 marginwidth=0 scrolling=no vspace=0>/iframe>