💡 과제 게시판 만들기를 해보며 JDBC
의 사용을 요약해보자면,
1. 우선 ojdbc
의 buildpath
를 설정하고,
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
등의 메소드를 통해 확인해준다.
dao
, service
, vo
패키지를 만든다dao
: 모든 CRUD에 대해서, JDBCUtil.getConnection()을통해 작성해놓은 sql문과 파라미터로 들어오는 vo객체의 내부 값들을 맵핑해 executeUpdate()를 해주는 부분이다.service
: CRUD 메소드가 있으며, 인서트시 인서트에 해당하는 dao클래스의 인서트 메소드를 실행하도록 컨트롤해주는 역할을 한다.vo
: 제목, 작성자, 내용 등 여러가지 변수들을 파라미터로 편하게 넣기 위해 VO를 만들어둔것!Main
: 사용자에게 보여지는 View이며, 사용자의 입력값을 받아서 service단 메소드의 파라미터로 넘겨주는 역할을 한다.service
에서 dao
메소드를 불러올때, Main
에서 service
메소드를 불러올때 편하게 하기위해 매번 new 하지 않고 해당 클래스의 생성자에 미리 new를 해놓는다!커넥션객체 매번 만들고 그런거 없어!
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가 자바소스코드에 선언해 둔 변수명들을 인식 할 수가 있다. 따라서 parameterClass
로 VO
를 넣어 둔 뒤 쿼리문엔 #title#
과 같이 자바 변수명을 적어주면 알아서 매핑해서 결과를 가져온다. 만약 전체 검색과 같이 가져오는 값이 int가 아닐때는(ex.결과가 resultMap형태) 미리 resultMap
에 sql컬럼
과 property
를(즉, VO의 변수명을) 선언해주면 ibatis가 또 알아서 매핑해준다!Main
에선 사용자 입력값을 받아 Service
에 있는 메소드에 파라미터로 넘겨주고, 해당 메소드에선 DAO
의 메소드로 넘겨준다. 이때 넘겨주는 파라미터는 (smc
,사용자입력값
) 형태이며 smc
는 SqlMapClient
의 참조변수!DAO
의 메소드의 작동은 간단하다. smc.update(”memo.updateMemo”,mv)
와 같이 쓰면 된다.smc.(메타태그)((”sqlMap의namespace명.해당태그에서 사용할 쿼리문의 id”),(VO참조변수))
이렇게 불러온다!