Java; Generic Methods

제네릭 메소드 개요 용법 : <T, R> R method(T t)제네릭 메소드는 매개 타입과 리턴 타입으로 타립 파라미터를 갖는 메소드를 말한다. 제네릭 메소드를 선언하는 방법은 리턴 타입 앞에 <> 기호를 푸가하고 타립 파라미터를 기술한 다음, 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 된다. 제네릭 메소드는 두 가지 방식으로 호출 할 수 있다. 예제코드

Spring Argument resolver

RequestMappingHandlerAdapter 어노테이션 기반의 컨트롤러, @RequestMapping을 처리하는 HandlerAdapter. RequestMappingHandlerAdapter 동작 방식 ArgumentResolver 어노테이션 기반의 컨트롤러는 다양한 파라미터를 사용할 수 있다. (HttpServletRequest, Model, @RequestParam, @ModelAttribute, @RequestBody) 이것을 처리할 수 있는 것은 ArgumentResolver기반에서 작동하기 때문이다. 원하는 ArgumentResolver를 만들수도 있다. ReturnValueHandler 컨트롤러의 반환 값을 변환 (ModelAndView, ResponseBody, HttpEntity..) HTTP MessageConverter 각 ArgumentResolver들이 HTTP MessageConverter를 사용해 필요한 객체를 생성한다. 각... » read more

JdbcTemplate의 SimpleJdbcInsert Bean 등록에 관하여

SimpleJdbcInsert 빈 등록에 대하여 Reference 일단 오류와 상관없이.. SimpleJdbcInsert를 빈으로 만드는건 뭔가 이상한듯 저게 저 Repository에서만 쓸텐데.. 저걸 빈으로 만들어서 얻는 이점이 없음 JDBC 드라이버에서 제공해주는 DB 메타데이터를 사용해서 insert 쿼리 정보로 사용한다던데 왠지 빈으로 등록 시점에 JDBC 연결이 완료되지 않았을수도 있겠다 여튼, Entity 객체에서 리플렉션으로 '타입'정보를 꺼내쓴다면 애초에 dataSource같은게 필요없겠지 (순수 Java 리플렉션만으로 될테니)... » read more

세션을 사용하기 위한 Filter와 Interceptor

HttpSession 세션 생성을 자동으로 해주는 객체 기본 사용법 Tracking session 쿠키를 지원하는지 안하는지 서버는 모른다. 그래서 주소에 JSESSIONID를 세션 생성할때 내려 보내는데 이것을 모든 컨트롤러에서 다 파싱을 해야하니 불편하다. 대게는 쿠키지원을 하니까 tracking-modes를 cookie로 변경하면 주소에 JSESSIONID가 사라진다. Session timeout Filter, Interceptor Filter : 서블릿 Interceptor : 스프링 Filter 만약 로그인 여부 체크를 컨트롤러마다 해야... » read more

JDBC의 Prepared Statement

NamedParameterJdbcTemplate NamedParameterJdbcTemplate query() 가장 정확한 사용법 Prepared Statement 일반 JdbcTemplate은 SQL을 실행할때 Prepared Statement 라는게 있는데,쌩 SQL을 사용하는게 아니라 SELECT * FROM user WHERE id = ? 이런식으로 일정 형식문자열로 SQL을 준비하는 것이다.저걸 Prepared Statement 라고 부른다.그러면, 저 쿼리를 DB가 받으면 무슨일을 하냐면. SQL을 파싱하여 대기 상태로 놓는다.→ 만약 기존에 동일한 SQL쿼리가 있었다면 그 쿼리캐시를... » read more

Java; Optional

기본적인 사용법 Optional 객체 만들기 Optional 개체 를 만드는 방법에는 여러 가지가 있습니다. 빈 Optional 객체 를 생성하려면 empty() 정적 메서드 를 사용하기만 하면 됩니다 . 값의 비교 isPresent(), isEmpty() isPresent() 메서드를 사용 하여 Optional 객체 내부에 값이 있는지 확인했습니다 . 값은 null 이 아닌 값으로 Optional 을 만든 경우에만 존재 합니다. 다음 섹션에서 isPresent()... » read more

MyBatis와 Spring Boot (Annotation)

MariaDB Docker 설치 DBeaver 설치 DB 생성 boot 프로젝트 생성 mariadb driver setup application.properties insert하는 컨트롤러 작성 POST 테스트 Select기능 만들기 Mapper Controller GET 테스트 Insert 개선 보통 insert작업을 하면 0이나 1로 리턴값을 받기 보다는 전체의 값을 반환 받는다. 그러나 id의 경우 DB에서 auto increment기 때문에 별도의 작업이 필요하다. 객체를 그대로 반환하면 입력값 그대로 반환되지만... » read more

Java; Class

Object class java.lang 패키지 java.lang.*은 컴파일 할때 자동으로 추가된다. 모든 클래스의 최상위 클래스 Object Object클래스는 모든 자바 클래스의 최상위 클래스다. 모든 클래스는 Object 클래스로부터 상속을 받는다. 클래스를 만들때 extends Object를 하지 않지만, 컴파일 과정에서 자동으로 들어간다. 모든 클래스가 Object 클래스를 상속 받았으므로 Object의 메소드를 사용할 수 있고 재정의 할 수도 있다 주로 사용되는 Object클래스의 메소드... » read more

Java; Other I/O stream

직렬화 직렬화와 역직렬화 클래스의 상태를 저장해 전송하거나 저장할 일이 있다. 그럴때 인스턴스의 어느 순간을 저장하는것을 직렬화라고 한다. (Serialization) 인스턴스의 저장된 상태를 다시 복원하는 것을 역직렬화라고 한다. (Deserialization) 직렬화란 간단하게 인스턴스의 내용을 연속 스트림으로 만드는 것이다. 스트림으로 만들어야 파일에 쓸 수도 있고 네트워크로 전송할 수도 있다. 직렬화를 위한 보조 스트림 ObjectInputStream(InputStream in) ObjectOutputStream(OutputStream out) 직렬화/역직렬화 테스트... » read more