-> 자바에서 쿼리문을 사용할때 java.sql 패키지에 있는 Statement를 사용한다. Statement는 SQL문을 실행할 때 사용하는 인터페이스이다.
링크텍스트
-> INSERT/DELETE/UPDATE 관련구문에서는 반영된 레코드의 건수를 반환합니다.
-> CREATE/DROP 관련 구문에서는 -1을 반환합니다.
-Facade(퍼사드 패턴 : 간략화된 인터페이스를 제공해주는 디자인 패턴)
-> java에서 심플한 로깅 인터페이스를 제공하는 API
connection pooling을 제공하는 JDBC DataSource의 구현체이다. 이 프레임워크가 다른 connection pooling 보다 가장 빠른 이유는 몇몇 바이드코드 레벨의 구현이 있으며, 마이크로 최적화, ArrayList Staement 사용 대신 FastList 직접 구현으로 처음부터 끝까지 모든 것을 스캔하는 과정 생략 등이 있습니다.
-> DAO 사용이유 : 효율적인 커넥션 관리와 보안성 때문이다. DAO는 저수준의 Logic과 고급 비즈니스 logic을 분리하고 domain logic 으로부터 DB관련 mechanism을 숨기기 위해 사용한다.
-> MyBatis 사용하기 위해서 Mapper인터페이스와 Mapper XML 구조가 필요하다
-> SQLSessionFactory를 이용해서 코드를 직접 작성하더라도 직접 Connection 객체를 얻어서 JDBC 코딩이 가능합니다. 하지만 좀 더 편하게 작업하기 위해선 SQL을 어떻게 처리할 것인지를 별도의 설정을 분리해주고, 자동으로 처리되는 방식을 사용하는것이 좋습니다. 이를 실현시키기 위해서는 Mybatis의 Mapper의 존재가 필요합니다.
스프링에서 Mybatis를 사용하는경우에는 Mapper를 인터페이스(Mapper인터페이스 + 어노테이션) 형태와 XML(Mapper XML) 형태로 작성할 수 있습니다.
링크텍스트
-트랙잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 예를 들어 A사람이 B사람에게 5만원을 송금하는 과정에서 이 과정을 위해
A사람의 통장 : 5만원 출금
B사람의 통장 : 5만원 입금
이 발생한다. 중간에 오류가 발생하면?
A사람은 분명히 5만원이 출금되었는데, B사람의 통장에는 입금된게 없는 상황이 발생될 수 있다. 이처럼, 예상하지 못한 상황에서 오류가 발생하여 데이터의 부정합이 발생하는 경우, 다시 원상복귀 해야하는 상황에 대비하기 위해 Transactional 을 사용한다. 비정상 처리되어 데이터의 부정합이 발생한다면 원래 상태로 원상 복귀하고, 정상적으로 프로그램이 진행되었다면 데이터에 최종적으로 적용하게 되어 데이터의 부정합을 방지하게 되는 것이다.
앞서서 Transaction을 간단히 설명할때 Transaction을 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야할 일련의 연산들을 의미한다고 말했다. 예시에서 A사람의 통장에서 5만원이 출금되고, B사람의 통장에서는 5만원이 입금되는 과정을 하나의 논리적 기능이라고 할 수 있다. 즉, 프로그램상에서 본다면, Transaction은 2개이상의 쿼리를 하나의 커넥션으로 묶어 DB에 전송하고, 이 과정에서 에러가 발생할 경우 자동으로 모든 과정을 되돌려 놓는 역할을 해준다.
-> @Serivce, @Controller, @Repository등은 @Component를 상속받고 있다 @Service와 @Component와 기능상의 차이는 없다. 비즈니스 레이어를 구분하기 위해 사용된다.
예전방식
@RequestMapping("/save")
public ModelAndView save(HttpServletRequest request, HttpServletResponse response){
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
@RequestParam 사용
@PostMapping("/save")
public String save(@RequestParam("username") String username, @RequestParam("age") int age, Model model){
-> 물론 @Controller도 @ResponseBody를 사용해야 만들 수 있지만 이런 방식은 RESTful 웹 서비스의 기본 동작이기 때문에 Spring은 @Controller와 @ResponseBody의 동작을 조합한 @RestController를 도입했습니다.