Spring에서는 데이터베이스 접근객체 역시 IOC에 등록해 두고 사용한다.
스프링에서 지원하는 데이터베이스 접근객체와 마이바티스 연동방법에 대해 알아보자.
◆ 데이터 엑세스 지원 ( DB작업 지원 )
스프링에서도 데이터베이스 접근객체가 따로 있다.
DB 작업 지원 (Connection 관리 / CRUD / transaction / DB Framework 와의 연동)
but 국내 표준은 마이바티스이기 때문에 스프링에서 지원하는 데이터베이스작업으로는 거의 하지 않는다.
( 스프링과 마이바티스를 연동하여 사용 )
◆ Connection지원
스프링에서 자체적으로 지원하는 데이터베이스 접근 객체를 이용하여 데이터베이스 제어를 해보자.
▶ 메이븐 다운로드
- spring jdbc
- commons dbcp
-
- ojdbc.jar
- 빌드패스 - 익스터널 jar - ojdbc8 추가
▶ IOC컨테이너 등록
-
- DriverManagerDataSource
- DB정보를 입력하고 등록하는 객체로 Mybatis와 연동 할 때에도 필요하다.
-
- jdbcTemplate
- 생성자의 인자로 DataSource를 받아 데이터베이스의 CRUD작업을 할 수 있는 객체
기존의 jdbc에서 Connection객체와 PreparedStatements객체로 하던 작업들을 Spring에서는 해당 객체로 통합적으로 작업한다.
-
- 사용할 객체 등록
- 스프링에서는 모든 객체를 주입받는 형식으로 작업하기 때문에, Jdbc Tmplate객체를 필드로하는 클래스를 또 만들 필요가 있다.
=> 필드로 jdbcTemplate객체를 설정해두고 쓴다.
▶ 연결
객체등록 후 컴파일완료가 되었다면, Connection객체가 하는 일을 jdbcTemplate가 해주기 때문에 Connection객체를 생성할 필요는 없지만 생성은 가능하다.
◆ CRUD지원
▶ jdbcTemplate객체 사용
jdbcTemplate은 PreparedStatements객체를 사용하지 않고 해당 객체 하나로 모든 작업을 하기때문에 String형의 SQL문을 사용하여 바로바로 작업한다.
-
- PreparedStatement의 executeUpdate() [ C U D ]
- = jdbcTemplate객체.update()
-
- PreparedStatement의 executeQuery() [ R ]
- = jdbcTemplate객체.query()
▶ 사용 예제
? 에 넣을 데이터들을 PreparedStatements객체로 설정하는 것이 아닌 콤마(,)를 구분자로 두 번째 인자부터 차레 대로 데이터들을 넣어주는 형태가 된다.
jdbcTemplate객체는 spring에서 자동적으로 open()이나, close()등의 작업을 해주기 때문에 수동으로 작업할 필요가 없다. 단 마이바티스에서도 Template객체가 있기 때문에 크게 사용하지 않는 추세이다.
◆ 스프링의 마이바티스 연동
실질적으로 데이터베이스작업은 JdbcTemplate객체가 아닌 마이바티스로 연동하여 하는 작업을 주로 하게 된다.
▶ 메이븐 라이브러리 다운
- MyBatis
- MyBatis Spring
▶ IOC컨테이너 객체등록
-
- DriverManagerDataSource
- DriverManagerDataSource는 마이바티스에서도 필요하다.
-
- SqlSessionFactoryBean
- SqlSessionFactory는 인터페이스이기 때문에 SqlSessionFactoryBuild를 이용하여 객체를 생성해야 하므로 한번에 등록이 어렵다.
때문에 스프링에서는 등록용 객체인 SqlSessionFactoryBean객체를 등록하여 SqlSessionFactory객체로 캐스팅하여 사용한다.
- dataSource필드에 DriverManagerDataSource객체값을 넘겨준다.
- mapperLocations필드에 Sql Mapper작업 xml파일의 경로를 list로 넘겨준다.
스프링에서 xml파일의 경로를 찾을 때는 classpath:로 시작해야 인식할 수 있으며, 절대경로로 인식하기 때문에 /로 시작할 필요는 없다.
단, WebContent아래의 경로들은 src와 인식을 다르게 하기 때문에 xml파일을 찾을 때 classpath:로 시작할 필요는 없다.
◆ SqlSessionTemplate
SqlSessionFactory를 직접 뽑아서 쓰게 되면, 다시 SqlSession객체를 뽑아내야 하고 해당 객체로 close()등의 작업들도 직접 해야한다.
하지만 SqlSessionTemplate객체를 사용하게 되면 자동으로 openSession(), close()등의 작업을 처리 해주기 때문에 이러한 부분들을 신경 쓸 필요가 없어진다.
( 실질적으로도 보통 이 객체를 이용해 데이터베이스작업을 하게 된다. )
▶ 객체등록
SqlSessionTemplate객체는 생성자의 인자로 SqlSessonFactory를 받기 때문에 등록해 둔 SqlSessionFactoryBean객체를 넘겨준다.
해당 SqlSessionTemplate객체로 기존 SqlSession객체로 하던 작업을 할 수 있다.