- POJO기반?
- IoC컨테이너
제어의 역전? -> 스프링에게 객체 생성을 맡기겠다는 개념
왜? 결합도를 낮추기 위해서 => 중간에 인터페이스를 놓는다.
빈을 생성해주는 역할
- 스프링이 제공하는 공장에게 내가 원하는 객체를 생성하기 위해 알려줘야 하는 것
ex.나 이런이런 객체 만들거야~라고 알려주는 것
1. xml에 bean등록
2. 자바 config (자바 파일로 알려줄 수도 있음) - 최신버전 업뎃 이후 / annotation
- 스프링 공장은 등록되어 있는 빈들을 다 읽어서 세워질때부터 빈을 다 만듬
- 필요한 시점에 빈을 가져올때 -> DI (Dependency Injection)
- 만들어진 객체를 가져다 써야함...!! Look Up과 Injection 방식 2가지가 있음
- injection은 IoC컨테이너가 알아서 주입시켜주는 것
- DI 방식에는 크게 3가지
- 트랜잭션도 자동 관리 해줌
- MVC 프레임워크를 제공한다.
- 컨테이너는 라이프 사이클을 관리하는 것. 어떤 bean의 생성과 소멸을 관리하는 것
- 컨테이너는 생명주기를 관리 하니깐.. 스프링이 내가 원하는 시점에 알고 있는 인터페이스를 구현해놓으면 스프링이 알아서 불러줌
- IoC컨테이너
- 메이븐 프로젝트 임포트!!!!
MyBatis
정리 요약
1. pom.xml에 라이브러리 추가 먼저 한다. (마이바티스와 같은거)
- h2 라이브러리는 데이터 베이스 쓰려고 추가하는 라이브러리. 실제로 메모리 디비를 사용하진 않음
- 오라클이나 MySQL을 쓴다면 그 데이터 벤더들이 제공하는 라이브러리들을 추가 하면됨
2. MyBatis에 대한 설정은 MvcConfig.java와 ApplicationConfig.java에 있음
- 항상 설정 파일은 @Configuration을 붙여줘야. 아 ~ 얘가 설정이야? 하고 읽어줄 수 있음
- ComponentsScan은 직접 빈으로 등록하는게 아니라, 니가 좀 스캔해와! 해서 하는거. 컴포넌트를 상속받은 어노테이션이 붙어 있어야 읽어올 수 있음
- 트랜잭션 사용할 거기 때문에 EnableTransactionManagement 사용
- 꼭 있어야 하는게 //DataSource 부분임 applicationconfig.java에 있음
3. 마이바티스가 하는 핵심기능 : 대신해주는 일
sessionFactoryBean이 핵심 부분이다
마이바티스를 사용하면 JDBC를 직접 쓸때보다 훨씬 짧아진다. => 코드 양이 엄청나게 줄어듬
내가 할 일:
1) 내가 쓸 메소드 정의
2) 구현하는 객체는 마이바티스가 만들어 줌
3) 커넥션 얻고, 스테이트먼트 객체 얻어오고, 값 담고 알아서 해줌!
4) 어떤 쿼리를 이용해서 사용자가 결과값을 가져올지에 대해서는 우리가 써주면 됨
<select id="getUsers" resultMap="user_result_map">
SELECT user_id, name, password, join_date FROM users
</select>
5) 데이터를 담아줄 때, 데이터베이스 컬럼명과 나의 유저객체의 필드명이 완전히 일치하면 아래의 과정도 필요가 없음.
<resultMap type="examples.springmvc.dto.User" id="user_result_map">
<result column="user_id" property="userId" javaType="java.lang.String"/>
<result column="name" property="name" javaType="java.lang.String"/>
<result column="password" property="password" javaType="java.lang.String"/>
<result column="join_date" property="joinDate" javaType="java.util.Date"/>
</resultMap>
*필요가 없을때는 resultType에 ...springmvc.dto.User이런거 그대로 적어주면 됨
메인에서 테스트할 경우?
usermapper의 객체를 마이바티스가 만들어주기 때문에 우리가 직접 쓸수가 없기에 스프링 공장을 이용해야한다. IoC는 메인에서 하기 복잡쓰!
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ApplicationConfig.class})
얘를 통해 스프링에게 도움을 받아서 객체를 생성해준 것임
'[WEB]' 카테고리의 다른 글
[Spring] Spring / MyBatis 리뷰 (0) | 2020.01.15 |
---|---|
[Spring] JUnit (0) | 2020.01.14 |
[Spring] Apache Maven 설치 / 프로젝트 생성 (0) | 2020.01.13 |
[Spring] 예제로 배우는 스프링 프레임워크 입문 목차 - 백기선 (0) | 2020.01.12 |
[Node.js] 웹 게임 개발 #4 (0) | 2019.12.05 |