[WEB]

[Spring] 스프링 프레임워크란 / MyBatis

ddgoori 2020. 1. 14. 14:54

- POJO기반?

 

https://limmmee.tistory.com/8

 

스프링 프레임워크 1 - POJO에 대하여

스프링 프레임워크 (Spring Framework) 1 - POJO에 대하여 프레임워크란? 소프트웨어 프레임워크 : 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조 (by 위키피디아) 개발자에게 프레임워크란 맨땅..

limmmee.tistory.com

 

- IoC컨테이너

제어의 역전? -> 스프링에게 객체 생성을 맡기겠다는 개념

왜? 결합도를 낮추기 위해서 => 중간에 인터페이스를 놓는다.

빈을 생성해주는 역할

 

- 스프링이 제공하는 공장에게 내가 원하는 객체를 생성하기 위해 알려줘야 하는 것

ex.나 이런이런 객체 만들거야~라고 알려주는 것

1. xml에 bean등록

2. 자바 config (자바 파일로 알려줄 수도 있음) - 최신버전 업뎃 이후 / annotation

 

- 스프링 공장은 등록되어 있는 빈들을 다 읽어서 세워질때부터 빈을 다 만듬

- 필요한 시점에 빈을 가져올때 -> DI (Dependency Injection)

- 만들어진 객체를 가져다 써야함...!! Look Up과 Injection 방식 2가지가 있음

- injection은 IoC컨테이너가 알아서 주입시켜주는 것

- DI 방식에는 크게 3가지 

https://poqw.github.io/di_1/

 

DI 첫 번째, Dependency Injection에 관하여

Index DI 첫 번째, Dependency Injection에 관하여 DI 두 번째, Dependency Injection 시작하기

poqw.github.io

- 트랜잭션도 자동 관리 해줌

- 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})

 

얘를 통해 스프링에게 도움을 받아서 객체를 생성해준 것임