*** 설명 ***
RAND() 함수를 ORDER BY 절에 사용.
*** 사용예 ***
SELECT * FROM table_name ORDER BY RAND();
MySql - 문자열을 날짜로 변경하기 (STR_TO_DATE)
*** 설명 ***
STR_TO_DATE 함수 사용
문자열 형식의 값을 날짜형식의 값으로 변경
DATE_FORMAT함수의 반대 기능
*** 사용예 ***
SELECT STR_TO_DATE('20161006182238', '%Y%m%d%H%i%s');
-> 2016-10-06 18:22:38
SELECT STR_TO_DATE('2016-10-06 18:22:38', '%Y-%m-%d %H:%i:%s');
-> 2016-10-06 18:22:38
SELECT STR_TO_DATE('2016/10/06 18:22:38', '%Y/%m/%d %T');
-> 2016-10-06 18:22:38
*** 사용되는 표현식 ***
표현식 설명
%M 월(Janeary, December, ...)
%W 요일(Sunday, Monday, ...)
%D 월(1st, 2dn, 3rd, ...)
%Y 연도(1987, 2000, 2013)
%y 연도(87, 00, 13)
%X 연도(1987, 2000) %V와 같이 쓰임.
%x 연도(1987, 2000) %v와 같이 쓰임.
%a 요일(Sun, Tue, ...)
%d 일(00, 01, 02, ...)
%e 일(0, 1, 2, ...)
%c 월(1, 2, ..., 12)
%b 월(Jan, Dec, ...)
%j 몇번째 일(120, 365)
%H 시(00, 01, 02, 13, 24)
%h 시(01, 02, 12)
%i 분(00, 01, 30)
%r "hh:mm:ss AM|PM"
%T "hh:mm:ss"
%S 초
%s 초
%p AM, PM
%w 요일(0, 1, 2) 0:일요일
%U 주(시작:일요일)
%u 주(시작:월요일)
%V 주(시작:일요일)
%v 주(시작:월요일)
STR_TO_DATE 함수 사용
문자열 형식의 값을 날짜형식의 값으로 변경
DATE_FORMAT함수의 반대 기능
*** 사용예 ***
SELECT STR_TO_DATE('20161006182238', '%Y%m%d%H%i%s');
-> 2016-10-06 18:22:38
SELECT STR_TO_DATE('2016-10-06 18:22:38', '%Y-%m-%d %H:%i:%s');
-> 2016-10-06 18:22:38
SELECT STR_TO_DATE('2016/10/06 18:22:38', '%Y/%m/%d %T');
-> 2016-10-06 18:22:38
*** 사용되는 표현식 ***
표현식 설명
%M 월(Janeary, December, ...)
%W 요일(Sunday, Monday, ...)
%D 월(1st, 2dn, 3rd, ...)
%Y 연도(1987, 2000, 2013)
%y 연도(87, 00, 13)
%X 연도(1987, 2000) %V와 같이 쓰임.
%x 연도(1987, 2000) %v와 같이 쓰임.
%a 요일(Sun, Tue, ...)
%d 일(00, 01, 02, ...)
%e 일(0, 1, 2, ...)
%c 월(1, 2, ..., 12)
%b 월(Jan, Dec, ...)
%j 몇번째 일(120, 365)
%H 시(00, 01, 02, 13, 24)
%h 시(01, 02, 12)
%i 분(00, 01, 30)
%r "hh:mm:ss AM|PM"
%T "hh:mm:ss"
%S 초
%s 초
%p AM, PM
%w 요일(0, 1, 2) 0:일요일
%U 주(시작:일요일)
%u 주(시작:월요일)
%V 주(시작:일요일)
%v 주(시작:월요일)
Java - StringBuilder와 StringBuffer의 차이
StringBuilder와 StringBuffer의 차이는 멀티쓰레드 지원 여부.
*** StringBuilder ***
멀티쓰레드에서 동기화 지원 X
StringBuffer 보다 빠름
*** StringBuffer ***
멀티쓰레드에서 동기화 지원 O
StringBuilder 보다 느림
*** StringBuilder ***
멀티쓰레드에서 동기화 지원 X
StringBuffer 보다 빠름
*** StringBuffer ***
멀티쓰레드에서 동기화 지원 O
StringBuilder 보다 느림
Java - 만 나이 계산
*** 생년월일을 기준으로 현재 나이 계산 ***
public int getAge(int birthYear, int birthMonth, int birthDay)
{
Calendar current = Calendar.getInstance();
int currentYear = current.get(Calendar.YEAR);
int currentMonth = current.get(Calendar.MONTH) + 1;
int currentDay = current.get(Calendar.DAY_OF_MONTH);
int age = currentYear - birthYear;
// 생일 안 지난 경우 -1
if (birthMonth * 100 + birthDay > currentMonth * 100 + currentDay)
age--;
return age;
}
public int getAge(int birthYear, int birthMonth, int birthDay)
{
Calendar current = Calendar.getInstance();
int currentYear = current.get(Calendar.YEAR);
int currentMonth = current.get(Calendar.MONTH) + 1;
int currentDay = current.get(Calendar.DAY_OF_MONTH);
int age = currentYear - birthYear;
// 생일 안 지난 경우 -1
if (birthMonth * 100 + birthDay > currentMonth * 100 + currentDay)
age--;
return age;
}
JQuery 화면 로딩 후 버튼 클릭 이벤트 발생시키기
*** 설명 ***
화면 로딩 후 이름이 searchButton인 버튼의 클릭 이벤트를 실행
*** Sample ***
$(window).bind("load", function() {
$("#searchButton").trigger("click");
});
Java - 이미지 크기 변경
String imgSourcePath= "test_image.jpg"; // 원본 이미지 파일명 (경로 포함)
String imgTargetPath= "test_imageNew.jpg"; // 새 이미지 파일명(경로 포함)
String imgFormat = "jpg"; // 새 이미지 포맷. jpg, gif 등
int newWidth = 640; // 새 이미지 넓이
int newHeight = 360; // 새 이미지 높이
imgResize(imgSourcePath, newImgFilePath, imgFormat, newWidth, newHeight);
/**
* Image Resize
*/
public void imgResize(String imgSourcePath, String imgTargetPath, String imgFormat, int newWidth, int newHeight)
{
try
{
// 원본 이미지 가져오기
Image imgSrc = ImageIO.read(new File(imgSourcePath));
// 이미지 리사이즈
// Image.SCALE_DEFAULT : 기본 이미지 스케일링 알고리즘 사용
// Image.SCALE_FAST : 이미지 부드러움보다 속도 우선
// Image.SCALE_SMOOTH : 속도보다 이미지 부드러움을 우선
// Image.SCALE_AREA_AVERAGING : 평균 알고리즘 사용
Image resizeImage = imgSrc.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
// 새 이미지 저장하기
BufferedImage newImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = newImage.getGraphics();
g.drawImage(resizeImage, 0, 0, null);
g.dispose();
ImageIO.write(newImage, imgFormat, new File(imgTargetPath));
}
catch (Exception e)
{
}
}
String imgTargetPath= "test_imageNew.jpg"; // 새 이미지 파일명(경로 포함)
String imgFormat = "jpg"; // 새 이미지 포맷. jpg, gif 등
int newWidth = 640; // 새 이미지 넓이
int newHeight = 360; // 새 이미지 높이
imgResize(imgSourcePath, newImgFilePath, imgFormat, newWidth, newHeight);
/**
* Image Resize
*/
public void imgResize(String imgSourcePath, String imgTargetPath, String imgFormat, int newWidth, int newHeight)
{
try
{
// 원본 이미지 가져오기
Image imgSrc = ImageIO.read(new File(imgSourcePath));
// 이미지 리사이즈
// Image.SCALE_DEFAULT : 기본 이미지 스케일링 알고리즘 사용
// Image.SCALE_FAST : 이미지 부드러움보다 속도 우선
// Image.SCALE_SMOOTH : 속도보다 이미지 부드러움을 우선
// Image.SCALE_AREA_AVERAGING : 평균 알고리즘 사용
Image resizeImage = imgSrc.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
// 새 이미지 저장하기
BufferedImage newImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = newImage.getGraphics();
g.drawImage(resizeImage, 0, 0, null);
g.dispose();
ImageIO.write(newImage, imgFormat, new File(imgTargetPath));
}
catch (Exception e)
{
}
}
Java - URL 이미지 파일로 저장하기
String imgUrl = "http://www.a.com/test_image.jpg"; // 이미지 URL
String imgFilePath = "test_image.jpg"; // 저장할 파일명 (경로 포함)
String imgFormat = "jpg"; // 저장할 이미지 포맷. jpg, gif 등
getImageFromUrl(imgUrl, imgFilePath, imgFormat);
/**
* Image URL to File
*/
public void getImageFromUrl(String imgUrl, String imgFilePath, String imgFormat)
{
try
{
// Image 가져오기
BufferedImage image = ImageIO.read(new URL(imgUrl));
// Image 저장할 파일
File imgFile = new File(imgFilePath);
// Image 저장
ImageIO.write(image, imgFormat, imgFile);
}
catch (Exception e)
{
}
}
MySql - INSERT ~ ON DUPLICATE KEY UPDATE 사용하기
*** 설명 ***
유니크 인덱스 혹은 PRIMARY KEY 값이 중복되어 인서트하지 못하는 경우 업데이트를 수행한다. 오라클의 MERGE INTO와 비슷한 기능.
*** 예제 ***
INSERT INTO TEST_TABLE (A, B, C)
VALUES (1, 2, 3)
ON DUPLICATE KEY UPDATE B = 4, C = 5;
=> A 컬럼이 PRIMARY KEY.
TEST_TABLE에 A 컬럼이 1 인 행이 없으면 INSERT INTO TEST_TABLE (A, B, C) VALUES (1, 2, 3) 이, 있으면 UPDATE B = 4, C = 5 이 실행된다.
유니크 인덱스 혹은 PRIMARY KEY 값이 중복되어 인서트하지 못하는 경우 업데이트를 수행한다. 오라클의 MERGE INTO와 비슷한 기능.
*** 예제 ***
INSERT INTO TEST_TABLE (A, B, C)
VALUES (1, 2, 3)
ON DUPLICATE KEY UPDATE B = 4, C = 5;
=> A 컬럼이 PRIMARY KEY.
TEST_TABLE에 A 컬럼이 1 인 행이 없으면 INSERT INTO TEST_TABLE (A, B, C) VALUES (1, 2, 3) 이, 있으면 UPDATE B = 4, C = 5 이 실행된다.
스프링 프로퍼티 사용하기
*** 설명 ***
Value 어노테이션을 사용하여 프로퍼티 값을 가져올 수 있다.
값에 따라서 String, boolean 등의 형식을 지정할 수 있다.
***예제 ***
@Value("${prop.name1}")
private String propName1;
@Value("${prop.name2}")
private boolean propName2;
Value 어노테이션을 사용하여 프로퍼티 값을 가져올 수 있다.
값에 따라서 String, boolean 등의 형식을 지정할 수 있다.
***예제 ***
@Value("${prop.name1}")
private String propName1;
@Value("${prop.name2}")
private boolean propName2;
Java - SHA1 샘플
* byte 데이터를 입력받아 SHA1로 변환한 결과 문자열을 리턴한다.
public static String convertSHA1(byte[] srcBytes)
{
try
{
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
messageDigest.update(srcBytes);
byte digestBytes[] = messageDigest.digest();
return String.format("%0" + (2 * digestBytes.length) + "x", new BigInteger(1, digestBytes));
}
catch(Exception e)
{
}
return null;
}
public static String convertSHA1(byte[] srcBytes)
{
try
{
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
messageDigest.update(srcBytes);
byte digestBytes[] = messageDigest.digest();
return String.format("%0" + (2 * digestBytes.length) + "x", new BigInteger(1, digestBytes));
}
catch(Exception e)
{
}
return null;
}
MySql - 문자열 길이 (LENGTH)
*** 문자열 길이를 구하는 함수 ***
LENGTH : 바이트 수
CHAR_LENGTH : 글자 수
BIT_LENGTH tprk : 비트(1바이트는 8비트) 수
*** 예제 ***
SELECT LENGTH('대한민국'), CHAR_LENGTH('대한민국'), BIT_LENGTH('대한민국');
=> 12 4 96
SELECT LENGTH('English'), CHAR_LENGTH('English'), BIT_LENGTH('English');
=> 7 7 56
LENGTH : 바이트 수
CHAR_LENGTH : 글자 수
BIT_LENGTH tprk : 비트(1바이트는 8비트) 수
*** 예제 ***
SELECT LENGTH('대한민국'), CHAR_LENGTH('대한민국'), BIT_LENGTH('대한민국');
=> 12 4 96
SELECT LENGTH('English'), CHAR_LENGTH('English'), BIT_LENGTH('English');
=> 7 7 56
MySql - 시간차 계산하기
*** TIMESTAMPDIFF ***
두 DATETIME 간의 시간차이를 초/분/시/일 등의 단위로 반환.
ex) 초 단위
SELECT TIMESTAMPDIFF(SECOND, NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY));
==> 86400
ex) 분 단위
SELECT TIMESTAMPDIFF(MINUTE, NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY));
==> 1440
ex) 시 단위
SELECT TIMESTAMPDIFF(HOUR, NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY));
==> 24
ex) 일 단위
SELECT TIMESTAMPDIFF(DAY, NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY));
==> 1
두 DATETIME 간의 시간차이를 초/분/시/일 등의 단위로 반환.
ex) 초 단위
SELECT TIMESTAMPDIFF(SECOND, NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY));
==> 86400
ex) 분 단위
SELECT TIMESTAMPDIFF(MINUTE, NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY));
==> 1440
ex) 시 단위
SELECT TIMESTAMPDIFF(HOUR, NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY));
==> 24
ex) 일 단위
SELECT TIMESTAMPDIFF(DAY, NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY));
==> 1
MySql - 문자열 자르기 (SUBSTRING)
* SUBSTRING 혹은 SUBSTR 을 사용
* SUBSTRING(문자열, 시작인덱스), SUBSTR(문자열, 시작인덱스)
시작 인덱스(1부터)부터 끝까지 문자열을 잘라서 반환.
ex)
SELECT SUBSTRING('abcdef', 1); => 'abcdef'
SELECT SUBSTR('abcdef', 2); => 'bcdef'
* SUBSTRING(문자열, 시작인덱스, 길이), SUBSTR(문자열, 시작인덱스, 길이)
시작 인덱스(1부터)부터 길이만큼 문자열을 잘라서 반환.
ex)
SELECT SUBSTRING('abcdef', 1, 3); => 'abc'
SELECT SUBSTR('abcdef', 2, 3); => 'bcd'
* SUBSTRING(문자열, 시작인덱스), SUBSTR(문자열, 시작인덱스)
시작 인덱스(1부터)부터 끝까지 문자열을 잘라서 반환.
ex)
SELECT SUBSTRING('abcdef', 1); => 'abcdef'
SELECT SUBSTR('abcdef', 2); => 'bcdef'
* SUBSTRING(문자열, 시작인덱스, 길이), SUBSTR(문자열, 시작인덱스, 길이)
시작 인덱스(1부터)부터 길이만큼 문자열을 잘라서 반환.
ex)
SELECT SUBSTRING('abcdef', 1, 3); => 'abc'
SELECT SUBSTR('abcdef', 2, 3); => 'bcd'
Java - split 사용시 특수문자
* split 사용시 특수문자를 사용하면 에러가 발생
String testStr = "1^2^3^4";
String[] testList = testStr.split("^"); ---> 에러
* 특수문자 앞에 \\ 을 붙이면 에러가 발생하지 않음
String[] testList = testStr.split("\\^"); --->["1", "2", "3", "4"]
String testStr = "1^2^3^4";
String[] testList = testStr.split("^"); ---> 에러
* 특수문자 앞에 \\ 을 붙이면 에러가 발생하지 않음
String[] testList = testStr.split("\\^"); --->["1", "2", "3", "4"]
MySql - IFNULL, ISNULL, IF 사용하기
*** IFNULL ***
IFNULL (VAL1, VAL2)
VAL1의 값이 null이 아니면 VAL1, null 이면 VAL2를 리턴한다.
ex)
SELECT IFNULL('VAL', 'N'); => VAL
SELECT IFNULL(NULL, 'N'); => N
*** ISNULL ***
ISNULL (VAL1)
VAL1의 값이 null이면 1(true), null이 아니면 0(false)를 리턴한다.
ex)
SELECT ISNULL('A'); => 0 (false)
SELECT ISNULL(NULL); => 1 (true)
*** IF ***
IF (VAL1, VAL2, VAL3)
VAL1의 값이 true이면 VAL2, false이면 VAL3를 리턴한다.
ex)
SELECT IF(1, 'Y', 'N'); => Y
SELECT IF(0, 'Y', 'N'); => N
SELECT IF(TRUE, 'Y', 'N'); => Y
SELECT IF(FALSE, 'Y', 'N'); => N
IFNULL (VAL1, VAL2)
VAL1의 값이 null이 아니면 VAL1, null 이면 VAL2를 리턴한다.
ex)
SELECT IFNULL('VAL', 'N'); => VAL
SELECT IFNULL(NULL, 'N'); => N
*** ISNULL ***
ISNULL (VAL1)
VAL1의 값이 null이면 1(true), null이 아니면 0(false)를 리턴한다.
ex)
SELECT ISNULL('A'); => 0 (false)
SELECT ISNULL(NULL); => 1 (true)
*** IF ***
IF (VAL1, VAL2, VAL3)
VAL1의 값이 true이면 VAL2, false이면 VAL3를 리턴한다.
ex)
SELECT IF(1, 'Y', 'N'); => Y
SELECT IF(0, 'Y', 'N'); => N
SELECT IF(TRUE, 'Y', 'N'); => Y
SELECT IF(FALSE, 'Y', 'N'); => N
MySql - 요일 구하기
*** DAYOFWEEK ***
요일을 숫자로 반환한다.
일요일 1 ~ 토요일 7
ex) SELECT DAYOFWEEK(NOW());
=> 6
*** WEEKDAY ***
요일을 숫자로 반환한다.
월요일 0 ~ 일요일 6
ex) SELECT WEEKDAY(NOW());
=> 4
요일을 숫자로 반환한다.
일요일 1 ~ 토요일 7
ex) SELECT DAYOFWEEK(NOW());
=> 6
*** WEEKDAY ***
요일을 숫자로 반환한다.
월요일 0 ~ 일요일 6
ex) SELECT WEEKDAY(NOW());
=> 4
MySql - date_add 사용하기
*** 설명 ***
date형식에 지정된 시간을 추가한다.
*** 사용예 ***
Syntax : DATE_ADD(date, INTERVAL expr type)
SELECT NOW(), DATE_ADD(NOW(),INTERVAL 1 MONTH)
=> 2016-04-12 08:51:03, 2016-05-12 08:51:03
SELECT NOW(), DATE_ADD(NOW(),INTERVAL -1 MONTH)
=> 2016-04-12 08:51:03, 2016-03-12 08:51:03
*** type 값 ***
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
date형식에 지정된 시간을 추가한다.
*** 사용예 ***
Syntax : DATE_ADD(date, INTERVAL expr type)
SELECT NOW(), DATE_ADD(NOW(),INTERVAL 1 MONTH)
=> 2016-04-12 08:51:03, 2016-05-12 08:51:03
SELECT NOW(), DATE_ADD(NOW(),INTERVAL -1 MONTH)
=> 2016-04-12 08:51:03, 2016-03-12 08:51:03
*** type 값 ***
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
MySql - 날짜를 문자열로 변경하기(DATE_FORMAT)
*** 설명 ***
DATE_FORMAT 함수 사용
날짜형식의 값을 문자열 형식의 값으로 변경
STR_TO_DATE 함수의 반대 기능
*** 사용예 ***
SELECT DATE_FORMAT(NOW(),'%Y%m%d%H%i%s');
-> 20160401083246
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');
-> 2016-04-01 08:35:45
SELECT DATE_FORMAT(NOW(),'%Y/%m/%d %T');
->2016/04/01 08:36:08
*** 사용되는 표현식 ***
DATE_FORMAT 함수 사용
날짜형식의 값을 문자열 형식의 값으로 변경
STR_TO_DATE 함수의 반대 기능
*** 사용예 ***
SELECT DATE_FORMAT(NOW(),'%Y%m%d%H%i%s');
-> 20160401083246
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');
-> 2016-04-01 08:35:45
SELECT DATE_FORMAT(NOW(),'%Y/%m/%d %T');
->2016/04/01 08:36:08
*** 사용되는 표현식 ***
표현식 | 설명 |
%M | 월(Janeary, December, ...) |
%W | 요일(Sunday, Monday, ...) |
%D | 월(1st, 2dn, 3rd, ...) |
%Y | 연도(1987, 2000, 2013) |
%y | 연도(87, 00, 13) |
%X | 연도(1987, 2000) %V와 같이 쓰임. |
%x | 연도(1987, 2000) %v와 같이 쓰임. |
%a | 요일(Sun, Tue, ...) |
%d | 일(00, 01, 02, ...) |
%e | 일(0, 1, 2, ...) |
%c | 월(1, 2, ..., 12) |
%b | 월(Jan, Dec, ...) |
%j | 몇번째 일(120, 365) |
%H | 시(00, 01, 02, 13, 24) |
%h | 시(01, 02, 12) |
%i | 분(00, 01, 30) |
%r | "hh:mm:ss AM|PM" |
%T | "hh:mm:ss" |
%S | 초 |
%s | 초 |
%p | AM, PM |
%w | 요일(0, 1, 2) 0:일요일 |
%U | 주(시작:일요일) |
%u | 주(시작:월요일) |
%V | 주(시작:일요일) |
%v | 주(시작:월요일) |
MySql - limit 사용하기
*** 사용법1 ***
LIMIT 정수
쿼리 실행 결과의 갯수를 제한한다.
예제)
select * from TABLE_NAME limit 5;
*** 사용법2 ***
LIMIT 정수, 정수
쿼리 실행 결과를 지정된 인덱스부터 지정된 갯수만큼 조회한다.
첫번째 정수는 시작 인덱스를 지정. 0부터 시작.
두번째 정수는 결과 갯수를 지정.
예제)
select * from TABLE_NAME limit 0, 5;
LIMIT 정수
쿼리 실행 결과의 갯수를 제한한다.
예제)
select * from TABLE_NAME limit 5;
*** 사용법2 ***
LIMIT 정수, 정수
쿼리 실행 결과를 지정된 인덱스부터 지정된 갯수만큼 조회한다.
첫번째 정수는 시작 인덱스를 지정. 0부터 시작.
두번째 정수는 결과 갯수를 지정.
예제)
select * from TABLE_NAME limit 0, 5;
Java - 날짜 포맷 (FastDateFormat)
*** 설명 ***
기존 SimpleDateFormat 보다 빠름.
Thread Safe.
Apache Commons Lang 라이브러리 필요.
*** 사용예 ***
FastDateFormat fdf = FastDateFormat.getInstance("yyyyMMdd");
System.out.println("FastDateFormat =" + fdf.format(Calendar.getInstance()));
*** maven repository ***
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
기존 SimpleDateFormat 보다 빠름.
Thread Safe.
Apache Commons Lang 라이브러리 필요.
*** 사용예 ***
FastDateFormat fdf = FastDateFormat.getInstance("yyyyMMdd");
System.out.println("FastDateFormat =" + fdf.format(Calendar.getInstance()));
*** maven repository ***
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
Oracle - UNION, UNION ALL
*** UNION ***
두 테이블을 결합한 결과를 반환하는데 중복되지 않는 값들만 반환.
결과는 정렬되어서 반환.
*** UNION ALL ***
두 테이블을 결합한 결과를 반환하는데 중복되는 값들도 모두 반환.
ex)
TABLE_1 TABLE_2
--------- ---------
COL_A COL_A
--------- ---------
1 3
2 2
3 1
select COL_A from TABLE_!
union
select COL_A from TABLE_2
=> 결과
1
2
3
select COL_A from TABLE_!
union all
select COL_A from TABLE_2
=> 결과
1
2
3
3
2
1
두 테이블을 결합한 결과를 반환하는데 중복되지 않는 값들만 반환.
결과는 정렬되어서 반환.
*** UNION ALL ***
두 테이블을 결합한 결과를 반환하는데 중복되는 값들도 모두 반환.
ex)
TABLE_1 TABLE_2
--------- ---------
COL_A COL_A
--------- ---------
1 3
2 2
3 1
select COL_A from TABLE_!
union
select COL_A from TABLE_2
=> 결과
1
2
3
select COL_A from TABLE_!
union all
select COL_A from TABLE_2
=> 결과
1
2
3
3
2
1
MyBatis 동적 쿼리 - choose
*** choose 문 ***
스위치 구문과 비슷. 여러 조건을 순서대로 체크하여 해당하는 조건의 구문을 추가.
해당되는 조건이 없을 경우 otherwise에 해당하는 구문을 추가
ex)
<select id="testSql" parameterType="hashmap" resultType="hashmap">
select
ID, NAME
from
T_TEST A
where USE_YN = 'Y'
<choose>
<when test="type == 'A' ">
and TYPE = 'A'
</when>
<when test="type == 'B' ">
and TYPE = 'B'
</when>
<otherwise>
and TYPE = 'C'
</otherwise>
</choose>
</select>
interface 형식
@Select("<script>"
+ "select "
+ " ID, NAME "
+ "from T_TEST A "
+ "where USE_YN = 'Y' "
+ " <choose>"
+ " <when test=\"type == 'A'\"> TYPE = 'A' </when>"
+ " <when test=\"type == 'B'\"> TYPE = 'B' </when>"
+ " <otherwise> TYPE = 'C' </otherwise>"
+ " </choose>"
+ "</script> ")
List<HashMap> select(@Param("type")String type);
스위치 구문과 비슷. 여러 조건을 순서대로 체크하여 해당하는 조건의 구문을 추가.
해당되는 조건이 없을 경우 otherwise에 해당하는 구문을 추가
ex)
<select id="testSql" parameterType="hashmap" resultType="hashmap">
select
ID, NAME
from
T_TEST A
where USE_YN = 'Y'
<choose>
<when test="type == 'A' ">
and TYPE = 'A'
</when>
<when test="type == 'B' ">
and TYPE = 'B'
</when>
<otherwise>
and TYPE = 'C'
</otherwise>
</choose>
</select>
interface 형식
@Select("<script>"
+ "select "
+ " ID, NAME "
+ "from T_TEST A "
+ "where USE_YN = 'Y' "
+ " <choose>"
+ " <when test=\"type == 'A'\"> TYPE = 'A' </when>"
+ " <when test=\"type == 'B'\"> TYPE = 'B' </when>"
+ " <otherwise> TYPE = 'C' </otherwise>"
+ " </choose>"
+ "</script> ")
List<HashMap> select(@Param("type")String type);
MyBatis 동적 쿼리 - if
*** if 문 ***
조건을 만족하는 경우 추가
ex) type 값이 null이 아니고, 빈값이 아닐때 조건에 추가
xml 형식
<select id="testSql" parameterType="hashmap" resultType="hashmap">
select
ID, NAME
from
T_TEST A
where USE_YN = 'Y'
<if test="type != null and type != ''"> and TYPE = #{type} </if>
</select>
interface 형식
@Select("<script>"
+ "select "
+ " ID, NAME "
+ "from T_TEST A "
+ "where USE_YN = 'Y' "
+ "<if test=\"type != null and type != ''\"> and TYPE = #{type} </if>"
+ "</script> ")
List<HashMap> select(@Param("type")String type);
조건을 만족하는 경우 추가
ex) type 값이 null이 아니고, 빈값이 아닐때 조건에 추가
xml 형식
<select id="testSql" parameterType="hashmap" resultType="hashmap">
select
ID, NAME
from
T_TEST A
where USE_YN = 'Y'
<if test="type != null and type != ''"> and TYPE = #{type} </if>
</select>
interface 형식
@Select("<script>"
+ "select "
+ " ID, NAME "
+ "from T_TEST A "
+ "where USE_YN = 'Y' "
+ "<if test=\"type != null and type != ''\"> and TYPE = #{type} </if>"
+ "</script> ")
List<HashMap> select(@Param("type")String type);
피드 구독하기:
글 (Atom)