JaeniWorld

[MyBatis] MyBatis Structure / Bean설정문서 / Annotation 본문

카테고리 없음

[MyBatis] MyBatis Structure / Bean설정문서 / Annotation

jaeni 2020. 8. 5. 18:29
반응형

1. MyBatis

MyBatis는 위와 같이 RDBMS에서 값을 받아 CoreContainer(= DI Container / Persistence Layer)에 Dependency Injection해준다. (붉은 부분에 MyBatis가 위치)

 

2. MyBatis 구조

MyBatis에서 가장 중요한 것은 사진을 보다시피 SQLmapconfig.xml이 제일 중요하다. 그 이유는 DB연결에 대한 문서(dbconn.properties), SQL Query를 담은 문서(mysawon_mapping.xml)그리고 VO정보를 담은 Class를 모두 Wiring(연결하는 것)하기 때문이다. 이렇게 Wiring된 문서는 Sql Session Builder에 DI되어 Sql Session을 통해 DAO에 DB안의 데이터들을 DI하게 된다.

 

이때, 설정문서는 Dependency순서대로 작성되어야 하며 Field가 많을 수록 Setter/Getter가 많아지고 이에 따른 Property가 많아지기 때문에 후에 처리가 까다로워진다.

 

3. Annotation

실제 Bean 문서를 작성하게 되면 Bean의 갯수가 많아진다. 그렇기 때문에 굉장히 복잡해 지는데, 이를 간편하게 사용하기 위해 쓰는것이 Annotation이다. Annotation 1개는 1개의 Bean을 대체한다.

	<!-- 4.DAOimpl12 사용자 정의 Bean-->
	<bean class="ibatis.services.user.impl.MyBatisUserDAOImpl12" id="myBatisUserDAOImpl12">
		<property name="sqlsession" ref="SqlSession"/>
	</bean>
	
	<!-- 5.ServiceImpl12 사용자 정의 Bean-->
	<bean class="ibatis.services.user.impl.MyBatisUserServiceImpl12" id="myBatisUserServiceImpl12">
		<property name="userDAO" ref="myBatisUserDAOImpl12"/>
	</bean>

원래는 위의 코드와 같이 정의 해주어야 하는데 이를 Annotation으로 변경하면,

@Repository
public class MyBatisUserDAOImpl13 implements userDAO {
	
	@Autowired
	private SqlSession sqlsession;
	
	@Override
	public int addUser(User user) throws Exception {
		return null;
	}

위와 같이 Class 위에 @Repository 같은 식으로 작성해준다. 이 다음 설정문서는 기존부분을 지우고

<context:component-scan base-package="FQCN"></context:component-scan>

<Context:componet-scan> 태그를 추가해주어야 한다 base-package는 class가 속한 패키지의 FQCN을 작성해주면 된다.

 

코드를 보면 @Repository @Autowired가 추가 되었는데, 이는 각각 어떤 레이어에 있는 컴포넌트인지 확인하는 Annotation과 setter를 없애기 위한 용이다.

@Repository는 @Component로 퉁쳐서 사용할 수 있지만, 각 레이어의 특성을 살리기 위하여 persistence layer에서는 @Repository를, Service Layer에서는 @Service, Presentation Layer에 있는 Component는 @controller를 붙여 사용한다.

 

@Autowired는 field위에 붙여 setter를 없애 비교적 처리를 쉽게 만드는 역할을 한다.

이를 그림으로 정리하자면 아래 그림과 같다.

반응형
Comments