개발새발

[2019.12.15] 본문

[Daliy]

[2019.12.15]

재래김유진 2019. 12. 15. 15:14
728x90
반응형

이클립스에서 오라클로 디비 연동하는 중 oracle.jdbc.driver.OracleDriver 를 찾을수 없다는 오류 떴다. 

본인 버전에 맞는 jar 파일을 추가 해주어야한다.

 

ojdbc6 = java 1.6이상

 

BuildPath로 추가 해주면 

이렇게 추가 된다. 그런다음 Testcode 실행 시켜보면 

 

 

 

db연동 성공!

 


CRUD 구현

 

[VO 클래스의 작성] : VO 클래스를 생성하는 작업은 테이블 설계를 기준으로 작성한다

lombok 사용

 

[Mapper 인터페이스와 Mapper XML]

 

root-context.xml에 org.zerock.mapper 패키지를 스캔하도록 설정한다.

1
<mybatis-spring:scan base-package="org.zerock.mapper"/>
 

 

BoardMapper 인터페이스를 작성할 때

이미 작성된 BoardVO 클래스를 적극적으로 활용해서 필요한 SQL을 어노테이션의 속성값으로 처리할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
 
public interface BoardMapper {
    
    @Select("select * from tbl_board where bno > 0")
    public List<BoardVO> getList();
 
}
 
 
 

 

db랑 잘 연결 되었는지 JUnit Test

 

<BoardMapperTests.java>

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
 
 
 
@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));
    }
 
}
 
 
 

 

BoardMapper 실행결과

 

BoardMapperTests를 이용해서 Test 완료 후

src/main/resources 내에 패키지와 동일한 org/zerock/mapper 단계의 폴더를 생성후 xml 파일을 작성한다.

(파일 폴더 구조, 이름은 무방 but, 패키지 클래스 이름과 동일하게 해주면 나중에 혼란스러운 상황 방지)

 

<BoardMapper.xml>

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    
<mapper namespace="org.zerock.mapper.BoardMapper">
 
<select id="getList" resultType="org.zerock.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno > 0
]]>
</select>
</mapper>
 
 

 

*xml을 작성할 때는 반드시 <mapper>의 namespace 속성값을 Mapper 인터페이스와 동일한 이름을 주는 것에 주의하고, <select> 태그의 id 속성값은 메서드의 이름과 일치하게 작성합니다. resultType 속성의 값은 select 쿼리의 결과를 특정 클래스의 결과로 만들기 위해서 설정합니다. xml에 사용한 CDATA 부분은 XML에서 부등호를 사용하기 위해서 사용합니다.

 

XML에 SQL문이 처리되었으니 BoardMapper 인터페이스에 SQL은 제거한다.

 

그래도 결과는 같음

 


 

* MyBatis는 내부적으로 JDBC의 PreparedStatementfmf 활용하고 필요한 파라미터를 처리하는 '?'에 대한 치환은 '#{속성}'을 이용해서 처리한다.

 

 

[insert 와 insertSelectKey]

insert()는 단순히 시퀀스의 다음 값을 구해서 insert 할 때 사용

insertSelectKey()는 @SelectKey라는 MyBatis의 어노테이션 이용. 

@SelectKey는 주로 PK 값을 미리(before) SQL을 통해서 처리해 두고 특정한 이름으로 결과를 보관하는 방식이다.

@Insert 할 때 SQL문을 보면 #{bno}와 같이 이미 처리 된 결과를 이용하는 것을 볼 수 있다.

 

 

728x90
반응형

'[Daliy]' 카테고리의 다른 글

[2019.12.17] ajax  (0) 2019.12.17
[2019.12.16]  (0) 2019.12.16
[2019.12.13]  (0) 2019.12.13
[2019.12.12]  (0) 2019.12.12
[2019.12.11]  (0) 2019.12.11
Comments