과제를 통해 알아본 JDBC → MVC → Ibatis

서현서현·2022년 4월 22일
0

서블릿 & JSP

목록 보기
5/26
post-thumbnail

# JDBC

💡 과제 게시판 만들기를 해보며 JDBC의 사용을 요약해보자면,
1. 우선 ojdbcbuildpath를 설정하고,
2. properties파일 형태로 내가 사용할 DB와 계정정보를 설정해준다.
3. 그리고 그 계정정보를 바탕으로 JDBCUtil에서 properties를 읽어 드라이버를 로딩하고,계정정보를 통해 커넥션 객체를 이용하게 된다. close()메소드도 static으로 선언해두고 DB연결 완료!
4. 이제 DB를 이용해 프로그램을 만들기위해 VO객체를 만들어 게시판의 필수요소들을 선언해둔다. 필드와 getset메소드들을 만들어두는것이다.
5. 마지막으로 데이터를 다뤄서 출력해주는 프로그램단을 만든다.(noteTest에 해당)
콘솔에 보이는 출력문과 데이터처리문을 모두 같은파일에 작성하며, 각 메소드에 알맞게 코딩한다.

💡
5-1. Connection, Statement, PreparedStatement, ResultSet을 선언해두고,
5-2. 메소드마다 필요한 로직을 짠다. 이때 JDBCUtil.getConnection()을 통해 커넥션객체를 불러와서 (즉, properties에 설정된 계정정보로 접속한 객체) sql문을 String으로 받은 뒤 pstmt를 통해 sql문의 ?와 사용자입력값을 직접 매핑시켜준다. (따라서 순서에 유의한다)
5-3. 업데이트 되었는지 executeUpdate등의 메소드를 통해 확인해준다.

# MVC

💡 JDBC에선 한 소스파일 안에 모든 메소드와 로직을 작성했다면, MVC 패턴에선 그 기능을 나누려고 한다.

  • member패키지에 dao, service, vo 패키지를 만든다
    • dao : 모든 CRUD에 대해서, JDBCUtil.getConnection()을통해 작성해놓은 sql문과 파라미터로 들어오는 vo객체의 내부 값들을 맵핑해 executeUpdate()를 해주는 부분이다.
    • service : CRUD 메소드가 있으며, 인서트시 인서트에 해당하는 dao클래스의 인서트 메소드를 실행하도록 컨트롤해주는 역할을 한다.
    • vo : 제목, 작성자, 내용 등 여러가지 변수들을 파라미터로 편하게 넣기 위해 VO를 만들어둔것!
  • Main : 사용자에게 보여지는 View이며, 사용자의 입력값을 받아서 service단 메소드의 파라미터로 넘겨주는 역할을 한다.
  • service에서 dao메소드를 불러올때, Main에서 service메소드를 불러올때 편하게 하기위해 매번 new 하지 않고 해당 클래스의 생성자에 미리 new를 해놓는다!

# Ibatis

커넥션객체 매번 만들고 그런거 없어!

  • MVC패턴과 member패키지 자체의 구조는 비슷하다. 그러나 Ibatis를 사용하므로 DB와 작업이 달라지게 된다.
  • 주의해서 봐야하는 폴더는 res폴더(그냥폴더 아니고 소스폴더임에 유의하자)이다. SqlMapConfig파일에 <properties resource>properties파일을 주고, <sqlMap resource>sqlmap폴더 밑에있는 xml파일을 설정해준다. 또한 이후 xml파일에서 자주 불러오는(특히 VO객체같은) 경로의 경우 <typeAlias alias>를 통해 간단한 이름을 지정 해 줄 수도 있다
  • 이렇게 연결된 xml파일에 sql을 작성해주는것이다! xml작성법은 조금 더 공부해봐야 될 것 같지만, 기본적으로 <select> <update>와 같이 메타데이터태그(?)를 적어주고 그 안에 id값이나 parameterClass, resultClass값들을 적어준다. (resultType과 같은건 왜 사용이 안되나 했는데 그건 Mybatis에서 지원하는거였다..) 그리고 태그 안에 sql문을 작성해주는데, ibatis가 자바소스코드에 선언해 둔 변수명들을 인식 할 수가 있다. 따라서 parameterClassVO를 넣어 둔 뒤 쿼리문엔 #title#과 같이 자바 변수명을 적어주면 알아서 매핑해서 결과를 가져온다. 만약 전체 검색과 같이 가져오는 값이 int가 아닐때는(ex.결과가 resultMap형태) 미리 resultMapsql컬럼property를(즉, VO의 변수명을) 선언해주면 ibatis가 또 알아서 매핑해준다!
  • Main에선 사용자 입력값을 받아 Service에 있는 메소드에 파라미터로 넘겨주고, 해당 메소드에선 DAO의 메소드로 넘겨준다. 이때 넘겨주는 파라미터는 (smc,사용자입력값) 형태이며 smcSqlMapClient의 참조변수!
  • DAO의 메소드의 작동은 간단하다. smc.update(”memo.updateMemo”,mv)와 같이 쓰면 된다.smc.(메타태그)((”sqlMap의namespace명.해당태그에서 사용할 쿼리문의 id”),(VO참조변수)) 이렇게 불러온다!

0개의 댓글