두 날짜 사이의 차이 구하기 (startDate, endDate) DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuilder() .appendPattern("uuuu-MM-dd HH:mm:ss") .toFormatter(); LocalDateTime startDateTime = LocalDateTime.parse(startDate, DATE_FORMAT); LocalDateTime endDateTime = LocalDateTime.parse(endDate, DATE_FORMAT); log.debug("차이 달: " + startDateTime.until(endDateTime,ChronoUnit.MONTHS)); if (startDateTime.until(..
mybatis 쿼리문 실행결과 컬럼(열) 순서를 고정 SELECT col1, col2, col3 FROM test 위 SELECT 해온 쿼리의 결과를 리스트로 받아올때, 리스트의 순서를 col1, col2, col3로 고정시키고 싶은 경우가 있다. 하지만 hashMap을 resultType으로 받는 위 결과를 보면 SELECT 컬럼 순서대로 조회되지 않는다. SELECT col1, col2, col3 FROM test 결과타입 resultType을 "java.util.LinkedHashMap" 으로 변경하면, SELECT 선언 컬럼 순서대로 데이터를 담을 수 있다.
String, StringBuffer, StringBuild 비교 String, StringBuffer, StringBuild 는 모두 문자열 관련 클래스이다. String은 불변함 (immutable) StringBuffer, StringBuilder는 변함 (mutable) String 객체의 불변함이 무슨뜻인지 알아보자. String test = "a"; CASE1. test += "b"; CASE2. test.concat("b"); 위 간단한 코드에서, test String 객체는 Hip 메모리 영역에 생성된다. 따라서 두번째 코드에서 += 또는 concat 메소드를 사용하였을때 생성되었던 처음 메모리가 아닌, 새로운 메모리를 생성한다. + 연산자, concat 메소드를 통해 새로 생성된 Stri..
정적 팩터리 메서드 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자 이다. 하지만 한가지 기법이 더 있다. 클래스는 생성자와 별도로 정적 팩터리 메서드 (static factory method)를 제공할 수 있다. 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 말이다. public static Boolean test(boolean b) { return b ? Bollean.TRUE : Boolean.FALSE; } 클래스는 클라이언트에 public 생성자 대신 정적 팩터리 메서드를 제공할 수 있다. 정적 팩터리 메서드의 장점 1) 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 정적 팩터리는 이름을 잘 지으..
Mybatis 실행결과 Return spring 프로젝트를 할때 serviceImpl에서 mappe파일을 호출하여 쿼리가 실행될때 이 쿼리로 인해 변경되거나 삽입되거나 삭제된 행의 개수를 가져올 수 있다. 1. count : insert된 개수가 리턴된다. int count = ExamMapper.insertUsers(); if (count < 1) { Log.info("변경사항 없음"); } 2. count : update된 개수가 리턴된다. int count = ExamMapper.updateUsers(userVO if (count < 1) { Log.info("변경사항 없음"); } 3. count : delete된 개수가 리턴된다. int count = ExamMapper.deleteUsers(i..
@RequestParam 필수값 제거 @RequestParam으로 파라미터를 받을때 값이 들어오지 않으면 에러가 발생한다. 필수값이 아닌경우 null 가능으로 지정해줄 수 있다. (required = false를 추가하자. default는 required = true이기 때문에 명시하지 않으면 필수값이 아닐 경우 에러가 발생한다. Before @RequestParam MultipartFile file After @RequestParam(required = false) MultipartFile file
상황 PathVariable으로 파라미터를 이메일형식 (ID@test.com) 으로 받을 경우 에러가 발생한다. controller에서 RequestMapping 또는 putMapping 등 url을 지정해줄때, 위 처럼 { }안의 파라미터를 사용할 수 있다. 이때 '.' 이 들어갈때 . 뒷부분이 짤려나가는 경우가 있다. 해결방안 @PutMapping("/register/{exam:.+}") public void exam(@PathVariable String exam) { } 예를들어 email이 exam@exam.com 이라고 하면, 위 url은 .../register/exam@exam 이 된다. 하지만 :.+ 을 써주면 모든 이메일이 파라미터로 들어오게 된다.
VO에서 데이터타입이 BigDecimal일때 default값을 지정 Before private BigDecimal deliveryFee; After private BigDecimal deliveryFee = new BigDecimal(0); 이런식으로 new 연산자를 사용하여 default 값을 0으로 지정해줄 수 있다.
휴대폰번호가 아닌 자유형식의 번호 정규표현식 @Pattern(regexp = "^[0-9-]{2,20}$")
특정 문자를 지정하여 해당 문자만 가능하도록 하는 정규표현식 ex) Y, N만 가능 @Pattern(regexp = "^[YN]$")
날짜 정규표현식 (YYYY-MM-DD) 의 정규식 표현 @Pattern(regexp = "^([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01]))$")
휴대폰번호 정규식 표현 ex) 000-1234-1234 또는 01012341234 @Pattern(regexp = "^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})$")