상황 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})$")
이메일 형식 (exam@exam.com) 의 정규식 표현 @Pattern(regexp = "^[A-Za-z0-9_\\.\\-]+@[A-Za-z0-9\\-]+\\.[A-Za-z0-9\\-]+$")
NULL 변환 함수 1. NVL 함수 NULL 값을 다른 값으로 변환할때 사용하며, 모든 데이터 타입에 사용할 수 있다. SELECT NVL(col1, 0) FROM exam exam 테이블의 컬럼 col1이 null이라면, 0을 출력한다. 2. NULLIF 함수 NULLIF(col1, col2) 컬럼 col1의 값과 컬럼 col2의 값이 동일하면 NULL을 출력하고, 동일하지않으면 col1의 값을 출력한다. 3. COALESCE COALESCE(col1, col2, col3, ...) col1, col2, col3... 중에서 순서대로 비교하여 null이 아닌 첫번째 값을 가져오고, 모두 null이면 0을 출력한다.
스프링의 빈 오브젝트 스프링의 애플리케이션 컨텍스트는 IoC 컨테이너로써, 싱글톤을 저장하고 관리하는 싱글톤 레지스트리이다. 스프링은 여러 번에 걸쳐 빈을 요청하더라도 매번 동일한 오브젝트를 돌려준다. getBean() 메소드를 실행할 때마다 같은 오브젝트를 돌려준다. 스프링은 기본적으로 별다른 설정을 하지않으면, 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다. 왜 스프링은 싱글톤으로 빈을 만들까? 스프링이 주로 적용되는 대상은 자바 엔터프라이즈 서버환경이다. 자바 엔터프라이즈 서버환경이란, 서버 하나당 최대로 초당 수십에서 수백번씩 브라우저나 다른 시스템으로부터의 요청을 받아 처리할 수 있는 높은 성능이 요구되는 환경이다. 만약 매번 클라이언트에서 요청이 올때마다 각 로직을 담당하는 오브젝트를..
trim 사용하는 방법 UPDATE examTable exam1 = #{exam1}, exam2 = #{exam2}, WHERE idx = #{idx} mybatis에서 update 쿼리문을 사용하다보면 위처럼 조건문만 사용하게 되는 경우가 생긴다. 그때 콤마(,) 를 어떻게 사용해야 sql문 error가 발생하지 않을지 고민하게 된다. 그럴때는 위 예제처럼 trim 이라는것을 사용하자. +댓글내용 참고 (gyeongtae kim님) - prifix = tirm 안에있는 모든 문자열의 앞에 붙여줄 문자열을 입력하는 곳 - suffixOverrides = trim 안에있는 모든 문자열의 조건문을 판별해서 입력된 문자열의 맨 끝에서부터 찾아서 지워줄 문자열을 입력하는 곳 Oracle 에서 NVL 함수 사용하..
JAVA의 인스턴스화 JAVA의 인스턴스화 제한을 알아보기 전에, JAVA 인스턴스화에 대해 간단히 살펴보자. 자바에서 인스턴스란, 객체를 생성한다. 그리고, JVM이라는 자바 가상 머신이 관리하는 메모리에 적재된 상태를 뜻한다. Test 기본 클래스 public class Test() { private String a; private String b; public String getA() { return a; } public String setA(String a) { this.A = a; } } 우리가 자주 봐왔던 자바 예제에서의 아래 한 줄이 인스턴스를 생성함을 의미한다. 위 Test 클래스의 인스턴스를 생성해보자. 인스턴스 생성 Test test = new Test(); 위 한줄에는 많은 의미가 담..
관심사의 분리 (Separation Of Concerns) 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 하고, 관심이 다른 것은 가능한 한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것이다. 어떠한 기준 없이 모으는 편이 처음엔 간단하고 쉽겠지만 언젠가는 여러 종류의 관심사(기준)를 적절하게 구분하고 따로 분리하는 작업을 해줘야한다. 관심사가 같은 것끼리 모으고 다른 것은 분리해줌으로써 같은 관심에 효과적으로 집중할 수 있게 만들어주는 것이다. 중복 코드의 메소드 추출 여러 메소드에 중복 코드가 구현되어있다고 가정해보자. 만약 메소드가 1~2개라면 어떠한 변경이 일어났을때 어려움이 없다. 하지만 만약 중복 코드를 가진 메소드가 몇 백개, 몇 천개라고 생각해보자. 중복 코드의 코..