본문 바로가기

스프링

Spring_DataAccess기술_프로시저

1.     Com.springsource.javax.activation : Spring java-mail

2.     Com.springsource.javax.mail : Spring java-mail

3.     Com.springsource.org.aopalliance : Spring ProxyFactoryBean

4.     Com.springsource.org.aspectj.tools : AspectJExpressionPointcut 포인트컷 표현식 지원

5.     Com.springsource.org.castor : OXM castor Framework

6.     Com.springsource.org.hsqldb : spring 내장형 DataBase

7.     Com.springsource.junit : junit

8.     Commons-logging : Spring-context가 사용

9.     Mail : java-mail

10.   Mockito : 목 프레임워크 중 Mockito

11.   Mysql-connector : Mysql JDBC

12.   Org.springframework.context.support : Spring java-mail

13.   Org.springframework.oxm : Spring OXM(Object XML Mapping) Jaxb .

14.   Spring-aop : 스프링 기능 자체의 aop, Spring ProxyFactoryBean

15.   Spring-bean : 스프링 코어와 함께 의존성 주입 제공 (Core Container)

16.   Spring-context : 스프링 코어, BeanFactory를 확장한 어플리케이션 컨텍스트 구현, 리소스 로드 및 국제화 지원(Core Container)

17.   Spring-core : 다른 스프링 모듈이 사용하는 유틸리티(Core Container)

18.   Spring-expression : EL 확장 Bean속성(배열, 컬렉션 포함).(Core Container)

19.   Spring-jdbc : 스프링이 지원하는 jdbc.

20.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

21.   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

 

Auto_increment를 지정하면 자동생성되는 키 값을 만들 수 있다.

* 저장프로시저 : id를 입력 파라미터로 받아서 member 테이블을 검색한 후에 name 필드의 값을 돌려줌

 

 

19. WASJNDI를 가져올 때 사용

12. SimpleDriverDataSource : getConnection 호출할 때마다 매번 DB 커넥션을 새로 만들고 따로 풀을 관리하지 않는다. 따라서 실전에서는 절대 사용금지

> SingleConnectionDataSource : 하나의 물리적인 DB 커넥션만 만들어두고 이를 계속 사용하는 DataSource 두 개 이상의 스레드가 동작하는 경우 위험함.

* 따라서 아파치의 DBCP, c3p0, 상용커넥션풀, WAS 커넥션풀을 사용한다.

 

 

 

114. JdbcTest의 내부클래스 ?가 아닌 이름으로 매핑하기 위한 NamedParameterTemplate

117. batchUpdate : 아래 스샷 참조

120. MapSqlParameterSource : 파라미터를 키 밸류 형태로 생성하여 쿼리에 전달 파라미터.

121. queryForMap : 쿼리를 맵타입으로 리턴(DTO 미사용시 유용)

125. query : RowMapper(List)ResultSetExtractor(하나의 로우) 등의 타입으로 리턴. 결과가 0이면 0 List오브젝트가 돌아온다.

129. queryForObject : 하나의 로우 오브젝트 리턴. 맨 뒤인자로 제네릭 메소드이므로 리턴 값 캐스팅 필요없음.

* queryForList : 각 로우의 내용을 Map에 넣고 이를 다시 리스트로 만들어 돌려줌.

 

queryForObject의 경우 결과값이 null이면 예외를 발생하므로 위처럼 null을 리턴

batchUpdate : 뒤 인자의 리스트 크기만큼 배치를 돌린다.

 

165. BeanPropertySqlParameterSource : 도메인 DTO를 이름 치환자에 직접 바인딩할 때 사용

172. testdataSource 재생성

 

 

38. @BeforeClass, @AfterClass가 메소드 위에 선언되면 해당 테스트 클래스에서 딱 한 번씩만 수행되도록 지정하는 어노테이션.

40. SimpleNamingContextBuilder : WAS풀을 사용하는 경우. WAS를 사용하지 않는 테스트환경에서는 계속 에러가 난다. 때문에 위와같이 테스트 클래스에서 JNDI를 사용하지 않으면서 에러방지용일 때 위처럼 사용한다.

54. HashMap : Map에 전달 가능

59. MapSqlParameterSource : 직접 바인딩시켜서 던져도 가능.

 

 

 

insert문을 일일이 다 쓰다보면 오타가 일어나기 쉬운데 SimpleJdbcInsert는 테이블의 메타정보를 참조해서 INSERT문을 만들어주고, 파라미터 이름만 정확히 지정해주면 된다.

 

자동생성 칼럼의 경우 콘솔에서 처럼 insert문을 직접 만들어줘야한다.

118. usingGeneratedKeyColumns() 메소드를 이용해 키컬럼을 지정해주면 Auto_increment로 자동생성됨.

 

 

프로시저 펑션을 호출하는 코드

129. 맨뒤 1은 프로시저에 id1을 주는 인자값

* executeObject : 저장 프로시저를 호출할 때 사용. 단 파라미터 하나

* execute : 하나 이상의 출력 파라미터를 가진 저장 프로시저를 호출할 때 사용.

 

>springJdbcTemplateSimpleJdbcTemplate은 하나의 오브젝트를 모든 DAO가 공유해도 되지만, 위처럼 SimpleJdbcInsertSimpleJdbcCall은 멀티스레드 환경에서 공유 가능하지만, 테이블이나 저장 프로시저 단위로 오브젝트를 만들어야 하므로 빈으로 등록하기에는 적합하지 않다. 따라서 위처럼 DataSource만 빈으로 DI받고 그때 그때 생성해서 사용해야한다.