* 각 영역의 Naming Convention(명명규칙)
프로젝트를 3-tier로 구성하는 일반적인 이유는 '유지보수'에대한 필요성때문
각영역은 독립적으로 설계되어 나중에 특정한 기술이 변하더라도 필요한 부분을 교체하도록 하는 방식
해당 연결 부위는 인터페이스를 이용해서 설꼐하는것이 일반적인 구성방식
- xxxController : 스프링 MVC에서 동작하는 Controller 클래스를 설계할때 사용
- xxxService,xxxServiceImpl : 비즈니스 영역을 담당하는 인터페이스
- xxxDAO,xxxRepository : DAO나Repository라는 이름으로 영역을 따로 구성하는것이 보편적.
다만 별도의 DAO를 구성하는대신 Mybatis의 Mapper 인터페이스를 활용
- VO, DTO : VO와 DTO는 유사한 의미로 사용, 데이터를 담고 있는 객체를 의미한다는 공통점이 있다
다만 VO는 Rean Only 목적이 강하고 , 데이터 자체도 불변하게 설계하는것이 정석
DTO는 주로 데이터수집의 용도가 좀더강하다 >웹화면에서 로그인하는 정보같은경우 DTO사용
*영속/비즈니스 계층의 CRUD구현
거의 모든 웹 어플리케이션의 최종목적은 데이터베이스에 데이터를 기록하거나,
원하는 데이터를 가져오는것이 목적이다
VO 클래스의 작성 (DB테이블 작성)
org.zerock.domain 패키지를 생성하고,BoardVO 클래스를 정의함.
(lombok의 @Data를 이용해 getter/setter/toString() 등을 만들어내는 방식을 사용
1
2
3
4
5
6
7
8
9
10
|
@Data
public class BoardVO {
private Long bno;
private String title;
private String content;
private String writer;
private Date regdate;
private Date updateDate;
}
|
cs |
Mybatis는 SQL을 처리하는데 어노테이션이나, XML을 이용할수 있다.
간단한 SQL이라면 어노테이션을 이용해서 처리하는것이 무난하지만
SQL이 복잡해지고 검색과 같이 상황에 따라 다른 SQL문이 처리되는경우 유용하지못함.
root-context.xml을 설정
1
|
<mybatis-spring:scan base-package="org.zerock.mapper"/>
|
cs |
org.zerock.mapper 패키지 작성하고, BoardMappert 인터페이스 생성(반드시 SQL에 ;이 없도록 작성)
1
2
|
@Select("select * from tbl_board where bno > 0")
public List<BoardVO> getList();
|
cs |
테스트를 위해 src/test/java에 org.zerock.mapper 패키지 작성 BoardMapeerTests 클래스 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardMapperTests {
@Setter(onMethod_ = @Autowired)
private BoardMapper mapper;
@Test
public void testGetList() {
mapper.getList().forEach(board -> log.info(board));
}
}
|
cs |
Mapper XML 파일 테스트를 완료했다면 src/main/resources내에 패키지와 동일한
org/zerock/mapper 단계의 폴더를 생성하고 BoardMapper.XML을 작성. ( 폴더를 한개씩 생성)
1
2
3
4
5
6
7
8
9
10
11
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.zerock.mapper.BoardMapper">
<select id="getList" resultType="org.zerock.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno >0
]]>
</select>
</mapper>
|
cs |
<mapper>의 namespace 속성값을 Mapper 인터페이스와 동일한 이름을 주고,
<select>태그의 id 속성 값은 메서드의 이름과 일치하게 작성 resultType 속성은 객체로 반환하기위해 설정
CDATA 부분은 XML에서 부등호를 사용하기위해 (모든걸 문자로 인식하게해줌)
'Spring Framework' 카테고리의 다른 글
[Spring] WebUtils 사용하기 (0) | 2021.06.23 |
---|---|
[Spring] Bean 등록 어노테이션 @Component, @Configuration, @Bean 차이 (0) | 2021.06.23 |
[Spring] 스프링 설정 - web.xml, root-context.xml, servlet-context.xml 역할 (0) | 2021.06.23 |
[Spring] Dispatcher-Servlet 이란? (0) | 2021.06.23 |
@RequestBody 어노테이션과 @ReponseBody 어노테이션의 사용 (0) | 2020.12.09 |