Mybatis와 ibatis의 반복문에 대해서 알아보도록 하겠습니다.보통 SQL 쿼리에서 IN절에 사용되는 방법입니다.기본적으로 한 종류의 타입의 리스트 객체를 이용합니다.Mybatis와 ibatis 태그를 나누어서 사용방법을 포스팅하겠습니다.기본 ibatis 연동법에서 POM.XML의 IBATIS 관련 DEPENDENCY 설정부분을 빼고포스팅을 하였습니다..
Mybatis 이전버전인 ibatis + Spring3 에 대한 기본적인연동법을 소개해보고자 합니다.Spring 기본 연동법은 하단 포스팅을 참조해 주세요2014/11/06 - [개발에필요한연동법/스프링연동] - STS 이클립스를 이용하여 UTF-8 인코딩 설정 및 Spring3 MVC 연동해보기2014/11/06 - [개발에필요한연동법/스프링연동] - S..
이번에 다루고자 하는Spring+ Mybatis포스팅은 다중DB 설정에 대하여 작성해보도록 하겠습니다.SqlSession 객체에 "@Resource" 어노테이션을 이용하여Datasource 구분을 지어 여러개의 DB 호출이가능합니다.이전 Mybatis 연동설정법은 다음 포스팅을 참고해주세요2014/11/14 - [개발에필요한연동법/스프링연동] - Sprin..
Mybatis와 ibatis의 반복문에 대해서 알아보도록 하겠습니다.
보통 SQL 쿼리에서 IN절에 사용되는 방법입니다.
기본적으로 한 종류의 타입의 리스트 객체를 이용합니다.
Mybatis와 ibatis 태그를 나누어서 사용방법을 포스팅하겠습니다.
기본 ibatis 연동법에서 POM.XML의 IBATIS 관련 DEPENDENCY 설정부분을 빼고
포스팅을 하였습니다.
2014/11/17 - [개발에필요한연동법/스프링연동] - Spring3 + ibatis(아이바티스) 연동해보고 쿼리결과값 콘솔에 출력해보기
pom.xml에 추가해주실 DEPENDENCY 부분은 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | < dependency > < groupId >org.apache.ibatis</ groupId > < artifactId >ibatis-sqlmap</ artifactId > < version >2.3.4.726</ version > </ dependency > < dependency > < groupId >commons-dbcp</ groupId > < artifactId >commons-dbcp</ artifactId > < version >1.4</ version > </ dependency > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-jdbc</ artifactId > < version >${spring-framework.version}</ version > </ dependency > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-orm</ artifactId > < version >${spring-framework.version}</ version > </ dependency > |
샘플테이블은 MySQL의 information_schema DB의 'TABLES' 테이블 기준으로 설명드리도록 하겠습니다.
※ 해당 샘플을 따라해보시려면 application-config.xml파일내에 존재하는
datasource태그의 url 값의 db명을 "information_schema"로 변경하시면 되겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | @RequestMapping ( "/list" ) public void list(){ try { Map<String, Object> hmap = new HashMap<String, Object>(); ArrayList<String> dbList = new ArrayList<String>(); dbList.add( "mysql" ); dbList.add( "test" ); hmap.put( "dbList" , dbList); studyDao.list(hmap); } catch (Exception e) { e.printStackTrace(); } } |
1 | public void list(Map<String, Object> hmap) throws SQLException; |
1 2 3 4 | @Override public void list(Map<String, Object> hmap) throws SQLException { query.selectList( "query.list" ,hmap); } |
1 2 3 4 | @Override public void list(Map<String, Object> hmap) throws SQLException { query.queryForList( "query.list" ,hmap); } |
위코드를 보시면 DaoImpl에서 별도로 return 을 해주지 않았습니다.
그 이유는 단순하게 IN절내에 정상적인 Parameter값들이 들어가는지
쿼리로그로 확인을 하기위하여 별도의 return 타입을 작성하지 않았습니다.
마지막으로 Mybatis(foreach 태그)와 IBATIS(iterate 태그) 별 쿼리 XML 태그는 다음과 같습니다.
1 2 3 4 5 6 7 8 | < select id = "list" parameterType = "java.util.Map" resultType = "java.util.Map" > SELECT * FROM TABLES WHERE TABLE_SCHEMA IN < foreach item = "item" index = "index" collection = "dbList" open = "(" close = ")" separator = "," > #{item} </ foreach > </ select > |
1 2 3 4 5 6 7 | < select id = "list" parameterClass = "java.util.Map" resultClass = "com.spring.study.vo.ListVo" > SELECT table_name FROM TABLES WHERE TABLE_SCHEMA IN < iterate property = "dbList" open = "(" close = ")" conjunction = "," > #dbList[]# </ iterate > </ select > |
mybatis의 경우는 collection에 넘겨준 단일타입의 List객체명을 작성해주시면 되겠으며
ibatis의 경우는 property에 넘겨준 단일타입 List 객체명을 작성해주시면됩니다.
실행을 해보도록 하겠습니다.
List객체로 넘긴 Parameter가 정상적으로 구분자를 통하여 IN PARAMETER에 넘어왔으면
총 28개의 결과값을 출력한 것을 확인 할 수 있었습니다.
※ ibatis의 경우는 별도의 로그가 출력되지 않을것입니다.
에러가 안나면 정상적으로 쿼리조회가 완료 된것이므로 신경쓰지 않으셔도 되겠습니다.
mybatis처럼 resultClass를 Map타입으로 받아오지 못하는 관계로
임의로 VO 객체를 RESULTCLASS로 받게끔 처리해두었습니다.
by 개발로짜
Spring3 + Mybatis 연동 후 DBMS 종류별(MySQL,MSSQL,Oracle) 데이터 insert 후 시퀀스 가져오기 (0) | 2014.11.19 |
---|---|
mybatis와 ibatis별 동적태그 비교문 알아보도록 하자 (5) | 2014.11.17 |
Mybatis 이전버전인 ibatis + Spring3 에 대한 기본적인 연동법을 소개해보고자 합니다.
Spring 기본 연동법은 하단 포스팅을 참조해 주세요
2014/11/06 - [개발에필요한연동법/스프링연동] - STS 이클립스를 이용하여 UTF-8 인코딩 설정 및 Spring3 MVC 연동해보기
2014/11/06 - [개발에필요한연동법/스프링연동] - Spring3 한글깨짐 방지를 위한 UTF-8 인코딩 설정하기
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 Maven을 이용하여 pom.xml에 oracle,mysql,mssql jdbc 라이브러리 등록하기
위 링크 기준으로 이어서 DB 설정에 대하여 포스팅 하도록 하겠습니다.
저는 Mybatis 연동법에 소개드렸듯이 MySQL 기준으로 아이바티스 연동을 하도록 하겠습니다.
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 + MyBatis 기본설정 + 연동테스트 후 쿼리로그 확인해보기
/resources/spring/application-config.xml 설정부분을 보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | < context:component-scan base-package = "com.spring" /> < bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource" destroy-method = "close" > < property name = "driverClassName" value = "com.mysql.jdbc.Driver" /> < property name = "username" value = "계정" /> < property name = "password" value = "비밀번호" /> </ bean > < bean id = "sqlMapClient" class = "org.springframework.orm.ibatis.SqlMapClientFactoryBean" > < property name = "configLocation" value = "classpath:sqlmap-config.xml" /> < property name = "dataSource" ref = "dataSource" /> </ bean > </ beans > |
위와같이 설정을 하셨다면
"/resources/sqlmap-config.xml 파일을 하나 생성하고 다음 코드를 덮어씌워주세요
1 2 3 4 5 6 | <? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> < sqlMapConfig > < settings cacheModelsEnabled = "true" enhancementEnabled = "true" lazyLoadingEnabled = "true" useStatementNamespaces = "true" /> < sqlMap resource = "query/query.xml" /> </ sqlMapConfig > |
"/resources/query/" 디렉토리 생성 후 query.xml파일을 생성 한 다음
하단 코드를 덮어씌워보도록 하겠습니다.
1 2 3 4 5 6 7 | <? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> < sqlMap namespace = "query" > < select id = "ibatisSelect" resultClass = "String" > SELECT 'TEST' </ select > </ sqlMap > |
이번 포스팅은 간단하게 DB SELECT 테스트를 하기 위함으로써 Service 영역을 제외하고
Controller -> Dao 로 바로 호출하는 샘플 코드를 작성해보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 | @Autowired private StudyDao studyDao; @RequestMapping ( "/ibatisSelect" ) public void ibatisSelect(){ try { studyDao.ibatisSelect(); } catch (Exception e) { e.printStackTrace(); } } |
1 | public void ibatisSelect() throws SQLException; |
1 2 3 4 5 6 7 8 9 10 11 | @Repository public class StudyDaoImpl implements StudyDao { @Autowired private SqlMapClient query; public void ibatisSelect() throws SQLException { String result= (String)query.queryForObject( "query.ibatisSelect" ); System.out.println( "결과값:" +result); } } |
샘플코드들에 대한 작성이 완료되었다면 한번 실행결과를 확인해보도록 하겠습니다.
쿼리로그는 Mybatis와 다르게 출력되지않지만 결과값이 나왔다는 것은 Spring과 ibatis 와 연동이 되었다는 결과 입니다.
다음장은 logback.xml 파일로 쿼리출력을 하는것이 아닌
log4j 를 이용하여 쿼리로그 출력하는 포스팅을 하도록 하겠습니다 .
그다음 이어서 스프링 + 아이바티스 기본 연동에 추가로 트랜잭션 관련 포스팅을 다루겠습니다.
by 개발로짜
Spring3 MVC + HttpClient를 이용하여 GET/POST/Multipart API 웹서버 구축해보기 (2) | 2014.12.07 |
---|---|
Spring3 spring-task를 이용하여 스케줄러 연동 및 동작시켜보기 + DB연동(MySQL기준) (0) | 2014.11.24 |
Spring3 + Mybatis 여러개 Datasource 연동법(다중 트랜잭션 포함) (0) | 2014.11.16 |
Spring3 + Mybatis연동에 추가로 트랜잭션 설정 하여 실패시 Rollback 처리하기 (2) | 2014.11.14 |
Spring3 + MyBatis 기본설정 + 연동테스트 후 쿼리로그 확인해보기 (8) | 2014.11.14 |
이번에 다루고자 하는 Spring + Mybatis 포스팅은 다중DB 설정에 대하여 작성해보도록 하겠습니다.
SqlSession 객체에 "@Resource" 어노테이션을 이용하여 Datasource 구분을 지어 여러개의 DB 호출이 가능합니다.
이전 Mybatis 연동설정법은 다음 포스팅을 참고해주세요
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 Maven을 이용하여 pom.xml에 oracle,mysql,mssql jdbc 라이브러리 등록하기
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 + MyBatis 기본설정 + 연동테스트 후 쿼리로그 확인해보기
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 + Mybatis연동에 추가로 트랜잭션 설정 하여 실패시 Rollback 처리하기
@Resource 어노테이션을 위해서는 pom.xml에 하단 dependency를 추가해주도록 합니다.
1 2 3 4 5 | < dependency > < groupId >javax.annotation</ groupId > < artifactId >javax.annotation-api</ artifactId > < version >1.2</ version > </ dependency > |
기존 application-config.xml 내에 Datasource 설정코드가 하나 설정 되어있었습니다.
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 | < bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource" destroy-method = "close" > < property name = "driverClassName" value = "드라이버클래스" /> < property name = "username" value = "계정" /> < property name = "password" value = "패스워드" /> </ bean > < bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" > < property name = "dataSource" ref = "dataSource" /> < property name = "mapperLocations" value = "classpath*:query/**" /> </ bean > < bean id = "sqlSession" class = "org.mybatis.spring.SqlSessionTemplate" > < constructor-arg ref = "sqlSessionFactory" /> </ bean > < bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" > < property name = "dataSource" ref = "dataSource" /> </ bean > < tx:advice id = "txAdvice" transaction-manager = "transactionManager" > < tx:attributes > < tx:method name = "save*" rollback-for = "Exception" /> < tx:method name = "update*" rollback-for = "Exception" /> < tx:method name = "delete*" rollback-for = "Exception" /> </ tx:attributes > </ tx:advice > |
기존 설정되어있는 위 4가지 bean 태그와 tx:advice 태그를 복사하여 붙여넣기를 합니다.
각 태그들의 id / ref를 변경해주도록 합니다.
추가로 tx:advice 의 transaction-manager속성같을 변경합니다.
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 | < bean id = "dataSource2" class = "org.apache.commons.dbcp.BasicDataSource" destroy-method = "close" > < property name = "driverClassName" value = "드라이버클래스" /> < property name = "username" value = "계정" /> < property name = "password" value = "패스워드" /> </ bean > < bean id = "sqlSessionFactory2" class = "org.mybatis.spring.SqlSessionFactoryBean" > < property name = "dataSource" ref = "dataSource2" /> < property name = "mapperLocations" value = "classpath*:query/**" /> </ bean > < bean id = "sqlSession2" class = "org.mybatis.spring.SqlSessionTemplate" > < constructor-arg ref = "sqlSessionFactory2" /> </ bean > < bean id = "transactionManager2" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" > < property name = "dataSource" ref = "dataSource2" /> </ bean > < tx:advice id = "txAdvice2" transaction-manager = "transactionManager2" > < tx:attributes > < tx:method name = "save*" rollback-for = "Exception" /> < tx:method name = "update*" rollback-for = "Exception" /> < tx:method name = "delete*" rollback-for = "Exception" /> </ tx:attributes > </ tx:advice > |
기존 aop:config 태그내에 다음 태그 추가를 해주도록 합니다.
1 | < aop:advisor id = "transactionAdvisor2" pointcut-ref = "serviceOperation" advice-ref = "txAdvice2" /> |
본인이 사용하고자 하는 db의 가상호출 테이블은 다음과 같습니다.
위 테이블의 COUNT 쿼리를 실행하여 콘솔창에 카운트 수를 출력해보고자 합니다.
위처럼 각 테이블마다 카운트가 이클립스 콘솔창에 동일하게 출력된다면 mybatis 다중 db 연동이 성공한 것일 겁니다.
Controller/Service/Dao 부분 샘플코드를 작성해보도록 합니다.
1 2 3 4 5 6 7 8 | @RequestMapping ( "/multipledb" ) public void multipledb(){ try { studyService.multipledb(); } catch (SQLException e) { e.printStackTrace(); } } |
1 | public void multipledb() throws SQLException; |
1 2 3 4 | public void multipledb() throws SQLException { dao.multipledb1(); dao.multipledb2(); } |
1 2 | public void multipledb1() throws SQLException; public void multipledb2() throws SQLException; |
1 2 3 4 5 6 7 8 | public void multipledb1() throws SQLException { int count = query.selectOne( "query.multipledb1" ); System.out.println( "test.mybatis_table COUNT 결과:" +count); } public void multipledb2() throws SQLException { int count = query2.selectOne( "query.multipledb2" ); System.out.println( "sample.grid_sample COUNT 결과:" +count); } |
DaoImpl 기존 Sqlsession 인터페이스부분을 다음처럼 변경을 해줍니다.
1 2 3 4 5 6 7 | @Autowired @Resource (name= "sqlSession" ) private SqlSession query; @Autowired @Resource (name= "sqlSession2" ) private SqlSession query2; |
마지막 query.xml에 다음 코드를 추가로 결과 확인을 해보도록 하겠습니다.
1 2 3 4 5 6 7 8 | < select id = "multipledb1" resultType = "Integer" > SELECT COUNT(*) FROM mybatis_table </ select > < select id = "multipledb2" resultType = "Integer" > SELECT COUNT(*) FROM grid_sample </ select > |
위처럼 @Resource 어노테이션별로 실행한 결과를 콘솔상에서 확인이 되었습니다.
실행결과, 상단 DB툴에서 조회한 COUNT 갯수와 동일한 결과가 나온것을 확인 할 수 있었습니다.
by 개발로짜
Spring3 spring-task를 이용하여 스케줄러 연동 및 동작시켜보기 + DB연동(MySQL기준) (0) | 2014.11.24 |
---|---|
Spring3 + ibatis(아이바티스) 연동해보고 쿼리결과값 콘솔에 출력해보기 (5) | 2014.11.17 |
Spring3 + Mybatis연동에 추가로 트랜잭션 설정 하여 실패시 Rollback 처리하기 (2) | 2014.11.14 |
Spring3 + MyBatis 기본설정 + 연동테스트 후 쿼리로그 확인해보기 (8) | 2014.11.14 |
Spring3 Maven을 이용하여 pom.xml에 oracle,mysql,mssql jdbc 라이브러리 등록하기 (0) | 2014.11.14 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.