Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Coding Bloom

VO, DTO, DAO, SERVICE, CONTROLLER.. 본문

Java Spring

VO, DTO, DAO, SERVICE, CONTROLLER..

제컴퓨터에서는 2022. 10. 21. 15:27

DB 연동하기 (게시판)

spring을 배우기는 했다지만 안한지 1년이 넘어가고..

배웠을때도 개념이 바로 잡힌채로 한게아니라 따라하듯이 작성했기때문에.. 

spring을 할수있다고는 자신있게 못하지만.. 개념이라도 잡아보려고 글작성한다..

 

pom.xml에 mybatis 라이브러리 파일 주입시켜주고,

DBMS설정 => root_context.xml에 datasource, sqlSessionFactory,sqlSessionTemplate 설정 완료하고,

src/main/resources 폴더에 mybatis-config.xml 파일을 작성하여 mybatis 설정을 해준다.

 

 

 

 

1. View 페이지작성

controller에서 가져온 값을 보여주기위한 view 페이지 작성한다..

<c:foreach var="vo" items="${ vo }">
  <c:out value="${ vo.name }">
</c:foreach>

JSTL의 foreach 태그를 이용하여 데이터를 반복하여 출력해준다.

JSTL도 나중에 따로 작성해야겠다 다까먹음(눈물좔좔)

 

2. Mapper파일작성하기 

SQL 쿼리문을 시행하는 Mapper 파일이다! 여기에 쿼리를 작성한다.

<mapper namespace = "mapper.boardMapper">
    <select id="boardlist" resultType="BoardVO"  //parameterType="String">
          SELECT * FROM notice WHERE 1
   </select>
</mapper>

mapper의 namespce는 mapper파일의 경로를 적어준다.

쿼리문의 id를 작성해주고 resultType에는 조회한데이터가 전송될 데이터타입을 적어준다!

(데이터가 반환될그릇! VO객체에 담김) 

반대로 parameterType은 자바에서 String값이 들어올거라는걸 알려주고, 쿼리에서 Controller에서 보낸 파라미터값을 사용

 

VO는 DB에서 조회한 값을 파일을 나눠줘야 관리하기 쉽기때문에 작성한다.

MVC 패턴에서는 DAO-DTO(VO) 구조로 사용한다!

 

++ 추가 20221024

insert, update, delete 같은경우 는 파라미터를 받아서 DB에 반영되기때문에 parameterType가 있다. 또한 쿼리실행에 대한 결과값이 돌아오지않기때문에 resultType은 작성하지않는다. parameterType도 (select처럼..) VO로 데이터가가는것이 아닌 DTO(데이터통신객체)로 작성해주기. 

 

3. VO 생성

DB 데이터 컬럼과 동일하게 변수명을 작성한다 그값이 담기는것이다

String id;
String user_name;
String content;

public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    

getter와 setter 도 작성해주기. 

 

4. DTO 작성하기 

계층간 데이터 교환을 위한 객체(java beans)

DB에서 데이터가 넘어올때 DTO에 데이터가 입혀져서(?) 오는부분이기때문에 getter, setter 뿐이다

 


내가 헷갈렸던부분

VO랑 DTO랑 무슨차이지? 둘다 객체인데.. 

-> VO는 개념은 동일하지만 read only속성

-> VO는 특정 비즈니스 값을 담는객체(select),

DTO는 layer간의 통신용도(insert, update, deleter)로 오고가는객체임

 


 

5. DAO 작성하기

public class BoardDAO() {

	//sql db연동
	@Autowired 
    private SqlSessionTemplate sqlSession;
    
    //Mapper 경로지정(namespace)
    private static String namespace = "mapper.boardMapper";
    
    public List<BoardVO> boardList() {
    	return sqlSession.selectList(namespace + ".boardlist")
    }
    
    
}​

 

Data Access Object  데이터베이스의 데이터에 접근하기위해 생성하는 객체이다.

DB를 이용하여 데이터의 조회 및 조작하는기능 전담 오브젝트이다.

 

DB에서 조회한 데이터가 담겨져 있는 데이터를 BoardVO에 담는다.

 

 

 

6. Controller 작성하기

@Controller
private class BoardController() {
	
    //BoardService 기능을 불러오기위해 autorwired해줌 
    @autowired
    private BoardService boardService;
    
    @RequestMapping(value="notice")
    private String Board(Model model, @RequestParam(defaultValue='0')int page){
    	
        List<BoardVo> vo = boardService.boardList();
        
        Model.addAttribute("vo", vo);
        
        return KITRI_FREFIX + dir + "notice";
    }
}

 

@Controller 어노테이션을 붙여주어서 해당 클래스가 컨트롤러 기능을 함을 알려준다.

@Autowired 어노테이션을 사용하여 loC컨테이너 안에 존재하는 Bean을 자동으로 주입시켜줌. 

-> service 클래스를 사용할것이다.

 

List객체에 boardVO에 담아져있는 값을 담아준다.

 

Model.attribute()를 이용하여 value 객체를 name이름으로 추가한다.

뷰코드에서는 name으로 지정한 이름을 통해서 value를 이용해 사용한다. 

 

7. view 에서 확인하기

 

<c:foreach var="vo" items="vo">
	<c:out value="${vo.user_name}">
</c:foreach>

foreach태그는 for문과 같은 기능의 JSTL태그이다.

JSTL태그는 나중에다루도록하고..

<c:out value="${vo.user_name}"> 값에 BoardVO 값이 들어가게된다!

 

 

 

 

DB연동 완료  

Comments