Skip to content

Commit

Permalink
Merge pull request #1023 from dongseoplee/dongsseop2
Browse files Browse the repository at this point in the history
chore: fix typos
  • Loading branch information
harawata authored Nov 8, 2024
2 parents b104f06 + bcb8cf3 commit 482a595
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 101 deletions.
2 changes: 1 addition & 1 deletion src/site/ko/markdown/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 목차

이 페이지는 GitHub에서 인덱스를 렌더링하기위한 것입니다.
이 페이지는 GitHub에서 인덱스를 렌더링하기 위한 것입니다.

> **NOTE:**
>
Expand Down
56 changes: 28 additions & 28 deletions src/site/ko/markdown/batch.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
<a name="Spring_Batch"></a>
# Spring Batch

마이바티스 스프링 연동모듈의 1.1.0버전에서는 스프링 배치 애플리케이션을 만들기 위해 세개의 빈을 제공한다.
세개의 빈은 `MyBatisPagingItemReader``MyBatisCursorItemReader` 와 <code>MyBatisBatchItemWriter</code>이다.
마이바티스 스프링 연동 모듈의 1.1.0버전에서는 스프링 배치 애플리케이션을 만들기 위해 세 개의 빈을 제공한다.
세 개의 빈은 `MyBatisPagingItemReader``MyBatisCursorItemReader` 와 <code>MyBatisBatchItemWriter</code>이다.

또한 2.0.0 버전에서는 Java Configuration 을 지원하는 다음의 세 가지 Builder class 를 제공한다.
`MyBatisPagingItemReaderBuilder`, `MyBatisCursorItemReaderBuilder` 그리고 `MyBatisBatchItemWriterBuilder` 이다.

<span class="label important">중요</span>
이 문서는 [스프링 배치](http://static.springsource.org/spring-batch/) 에 대한 것으로 마이바티스 배치 `SqlSession` 을 다루지는 않는다.
배치 세션에 대해서는 [SqlSession 사용](sqlsession.html) 에서 좀더 다루었다.
배치 세션에 대해서는 [SqlSession 사용](sqlsession.html) 에서 좀 더 다루었다.

# MyBatisPagingItemReader

이 빈은 마이바티스로 페이지를 처리하는 형태로 데이터베이스 데이터를 읽어오는 `ItemReader`이다.

요청된 데이터를 가져오기 위해 `setQueryId` 프로퍼티에 명시된 쿼리를 실행한다.
쿼리는 `setPageSize` 프로퍼티에 명시된 크기만큼 데이터를 가져오도록 실행된다.
`read()` 메서드를 사용하면 필요할 때 현재 위치에서 정해진 수 만큼 더 추가 데이터를 가져온다.
reader는 몇가지의 표준적인 쿼리 파라미터를 제공하고 명명된 쿼리의 SQL은 요청된 크기만큼의 데이터를 만들기 위해 파라미터의 일부 혹은 모두 사용한다.
여기서 사용가능한 파라미터이다.
`read()` 메서드를 사용하면 필요할 때 현재 위치에서 정해진 수만큼 더 추가 데이터를 가져온다.
reader는 몇 가지의 표준적인 쿼리 파라미터를 제공하고 명명된 쿼리의 SQL은 요청된 크기만큼의 데이터를 만들기 위해 파라미터의 일부 혹은 모두 사용한다.
여기서 사용 가능한 파라미터이다.

* `_page`: 읽을 페이지 수(0부터 시작)
* `_pagesize`: 페이지의 크기, 이를테면 리턴하는 로우 수
* `_skiprows`: `_page``_pagesize`를 곱한 결과

각각의 파라미터는 selet구문에서 다음처럼 매핑될 수 있다.
각각의 파라미터는 selet구문에서 다음처럼 매핑 될 수 있다.

```xml
<select id="getEmployee" resultMap="employeeBatchResult">
Expand Down Expand Up @@ -55,7 +55,7 @@ public class BatchAppConfig {
}
```

**좀더 복잡한 예제를 보자.**
**좀 더 복잡한 예제를 보자.**

```xml
<bean id="dateBasedCriteriaReader"
Expand Down Expand Up @@ -107,14 +107,14 @@ public class BatchAppConfig {
}
```

앞의 예제와는 몇가지 차이점이 있다.
앞의 예제와는 몇 가지 차이점이 있다.

* `sqlSessionFactory`: reader에 별도로 구현한 sessionFactory를 지정할 수 있다. 이 옵션은 다양한 데이터베이스에서 데이터를 읽을때 유용하다.
* `queryId`: 여러개의 테이블에서 데이터를 읽어야 하고 서로 다른 쿼리를 사용한다면 서로다른 네임스페이스를 가진 매퍼 파일을 사용하는게 좋을수 있다. 쿼리를 알아볼때, 매퍼 파일의 네임스페이스를 잊지 말아야 한다.
* `sqlSessionFactory`: reader에 별도로 구현한 sessionFactory를 지정할 수 있다. 이 옵션은 다양한 데이터베이스에서 데이터를 읽을 때 유용하다.
* `queryId`: 여러 개의 테이블에서 데이터를 읽어야 하고 서로 다른 쿼리를 사용한다면 서로 다른 네임스페이스를 가진 매퍼 파일을 사용하는 게 좋을 수 있다. 쿼리를 알아볼때, 매퍼 파일의 네임스페이스를 잊지 말아야 한다.
* `parameterValues`: 이 맵을 사용해서 추가로 파라미터를 전달할 수 있다. 위 예제는 `jobExecutionContext`에서 값들을 가져오는 SpEL표현식을 사용하는 맵을 사용하고 있다.
맵의 키는 매퍼파일에서 마이바티스가 사용할 것이다. (예: *yesterday*`#{yesterday,jdbcType=TIMESTAMP}`사용될수 있다.).
맵과 reader 모두 `jobExecutionContext`에서 SpEL표현식을 사용하기 위해 `step` 스코프를 사용한다. 마이바티스의 타입핸들러가 제대로 설정이 되었다면 JodaTime날짜를 맵을 사용해서 파라미터로 넘길수 있다.
* `pageSize`: 배치가 청크크기가 지정된 형태로 처리가 되면 reader에 이 값을 전달하는게 적절하다.
맵의 키는 매퍼파일에서 마이바티스가 사용할 것이다. (예: *yesterday*`#{yesterday,jdbcType=TIMESTAMP}`사용될 수 있다.).
맵과 reader 모두 `jobExecutionContext`에서 SpEL표현식을 사용하기 위해 `step` 스코프를 사용한다. 마이바티스의 타입핸들러가 제대로 설정이 되었다면 JodaTime날짜를 맵을 사용해서 파라미터로 넘길 수 있다.
* `pageSize`: 배치가 청크 크기가 지정된 형태로 처리가 되면 reader에 이 값을 전달하는게 적절하다.

## MyBatisCursorItemReader

Expand Down Expand Up @@ -159,11 +159,11 @@ public class BatchAppConfig {

# MyBatisBatchItemWriter

모든 아이템을 배치로 구문을 일괄실행하기 위해 `SqlSessionTemplate`에서 배치로 작업을 처리하는 `ItemWriter`이다. `SqlSessionFactory``BATCH` 실행자로 설정할 필요가 있다.
모든 아이템을 배치로 구문을 일괄 실행하기 위해 `SqlSessionTemplate`에서 배치로 작업을 처리하는 `ItemWriter`이다. `SqlSessionFactory``BATCH` 실행자로 설정할 필요가 있다.

사용자는 `write()` 메서드가 호출될때 실행될 매핑구문 아이디를 제공해야 한다. `write()` 메서드는 트랜잭션내에서 호출되는 것으로 예상된다.
사용자는 `write()` 메서드가 호출될 때 실행될 매핑구문 아이디를 제공해야 한다. `write()` 메서드는 트랜잭션 내에서 호출되는 것으로 예상된다.

다음의 코드는 샘플설정이다.
다음의 코드는 샘플 설정이다.

```xml
<bean id="writer" class="org.mybatis.spring.batch.MyBatisBatchItemWriter">
Expand Down Expand Up @@ -246,16 +246,16 @@ public class BatchAppConfig {
</bean>
```

**여러개의 테이블에 데이터를 쓰려면 한꺼번에 처리할 수 있도록 만든 writer(몇가지 규칙을 가지고)를 사용하자.**
**여러 개의 테이블에 데이터를 쓰려면 한꺼번에 처리할 수 있도록 만든 writer(몇 가지 규칙을 가지고)를 사용하자.**

이 기능은 마이바티스 3.2이상에서만 사용할 수 있다. 이전의 버전에서는 예상과 다르게 동작하는데 그 내용은 [이슈](http://code.google.com/p/mybatis/issues/detail?id=741)를 참고하면 된다.

배치가 관계를 가지는 데이터나 여러개의 데이터베이스를 다루는 것처럼 복잡한 데이터를 작성할때 필요하다면 insert구문이 한개에 테이블에만 데이터를 넣을수 있다는 사실만 피하면 가능하기도 하다.
배치가 관계를 가지는 데이터나 여러 개의 데이터베이스를 다루는 것처럼 복잡한 데이터를 작성할 때 필요하다면 insert구문이 한 개에 테이블에만 데이터를 넣을 수 있다는 사실만 피하면 가능하기도 하다.
이런 복잡한 데이터를 처리하기 위해 writer가 작성하는 <em>아이템(Item)</em>을 준비해야 한다. 다음의 기술을 사용하면 단순한 관계를 가진 데이터나 관계가 없는 테이블을 처리하는 아이템에서 사용할 수 있다.

이러한 방법으로 스프링 배치 아이템은 모든 레코드를 *다룰것이다*.
여기에는 1:1 *관계*를 가지는 *InteractionMetadata*, 관계가 없는 두개의 로우는 *VisitorInteraction**CustomerInteraction*이 있다.
이 각각의 객체는 다음과 같이 볼수 있다.
이러한 방법으로 스프링 배치 아이템은 모든 레코드를 *다룰 것이다*.
여기에는 1:1 *관계*를 가지는 *InteractionMetadata*, 관계가 없는 두 개의 로우는 *VisitorInteraction**CustomerInteraction*이 있다.
이 각각의 객체는 다음과 같이 볼 수 있다.

```java
public class InteractionRecordToWriteInMultipleTables {
Expand All @@ -271,7 +271,7 @@ public class Interaction {
}
```

그리고 스프링 설정에는 각각의 레코드를 처리하기위해 특별히 설정된 전용(delegates) writer를 사용하는 `CompositeItemWriter`가 있다.
그리고 스프링 설정에는 각각의 레코드를 처리하기 위해 특별히 설정된 전용(delegates) writer를 사용하는 `CompositeItemWriter`가 있다.

```xml
<bean id="interactionsItemWriter" class="org.springframework.batch.item.support.CompositeItemWriter">
Expand Down Expand Up @@ -304,7 +304,7 @@ public class BatchAppConfig {
}
```

각각의 전용(delegate) writer는 필요할 만큼 설정할 수 있다. 예를들면 *Interaction**InteractionMetadata*를 위한 writer가 있다.
각각의 전용(delegate) writer는 필요할 만큼 설정할 수 있다. 예를 들면 *Interaction**InteractionMetadata*를 위한 writer가 있다.

```xml
<bean id="interactionMetadataWriter"
Expand All @@ -319,7 +319,7 @@ public class BatchAppConfig {
p:statementId="com.my.name.space.batch.InteractionRecordToWriteInMultipleTablesMapper.insertInteraction"/>
```

reader와 동일하게 `statementId`는 네임스페이스를 가진 구문을 가리킬수 있다.
reader와 동일하게 `statementId`는 네임스페이스를 가진 구문을 가리킬 수 있다.

매퍼 파일에서 구문은 다음과 같은 방법으로 각각의 레코드를 위해 만들어져있다.

Expand All @@ -345,9 +345,9 @@ reader와 동일하게 `statementId`는 네임스페이스를 가진 구문을
</insert>
```

먼저 `insertInteractionMetadata`호출될것이고 update구문은 jdbc드라이버에 의해(`keyProperty``keyColumn`) 생성된 아이디들을 리턴하기 위해 설정되었다.
`InteractionMetadata` 객체가 이 쿼리에 의해 업데이트되면 다음의 쿼리는 `insertInteraction`를 통해 상위객체인 `Interaction`를 작성하기 위해 사용될수 있다.
먼저 `insertInteractionMetadata`호출될 것이고 update구문은 jdbc드라이버에 의해(`keyProperty``keyColumn`) 생성된 아이디들을 리턴하기 위해 설정되었다.
`InteractionMetadata` 객체가 이 쿼리에 의해 업데이트되면 다음의 쿼리는 `insertInteraction`를 통해 상위객체인 `Interaction`를 작성하기 위해 사용될 수 있다.

***방금 언급한 내용에 관련하여 JDBC드라이버가 똑같이 동작하지 않을수 있다.
***방금 언급한 내용에 관련하여 JDBC드라이버가 똑같이 동작하지 않을 수 있다.
이 글을 쓰는 시점에 H2 드라이버 1.3.168버전(`org.h2.jdbc.JdbcStatement#getGeneratedKeys`를 보라)만 배치모드에서 마지막 인덱스를 리턴한다.
반면에 MySQL 드라이버는 기대한 것과 동일하게 동작하고 모든 아이디를 리턴한다.***
20 changes: 10 additions & 10 deletions src/site/ko/markdown/factorybean.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
# SqlSessionFactoryBean

마이바티스만 사용하면, `SqlSessionFactory``SqlSessionFactoryBuilder`를 사용해서 생성한다.
마이바티스 스프링 연동모듈에서는, `SqlSessionFactoryBean`가 대신 사용된다.
마이바티스 스프링 연동 모듈에서는, `SqlSessionFactoryBean`가 대신 사용된다.

## 설정

팩토리 빈을 생성하기 위해, 스프링 XML설정파일에 다음설정을 추가하자.
팩토리 빈을 생성하기 위해, 스프링 XML 설정 파일에 다음 설정을 추가하자.

```xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
Expand All @@ -31,23 +31,23 @@ public class MyBatisConfig {
```

일반적인 마이바티스 스프링 사용법에서는, `SqlSessionFactoryBean`이나 관련된 `SqlSessionFactory`를 직접 사용할 필요가 없다.
대신 세션 팩토리가 `MapperFactoryBean``SqlSessionDaoSupport`를 확장하는 다른 DAO에 주입될것이다.
대신 세션 팩토리가 `MapperFactoryBean``SqlSessionDaoSupport`를 확장하는 다른 DAO에 주입될 것이다.

## 속성

`SqlSessionFactory`는 JDBC `DataSource`의 필수 프로퍼티가 필요하다. 어떤 `DataSource`라도 상관없고 다른 스프링 데이터베이스 연결처럼 설정되어야만 한다.

하나의 공통적인 프로퍼티는 마이바티스 XML설정파일의 위치를 지정하기 위해 사용되는 `configLocation`이다. 이 프로퍼티를 설정하는 것은 디폴트 설정을 가진 마이바티스 설정을 변경해야 할 경우 뿐이다.
하나의 공통적인 프로퍼티는 마이바티스 XML 설정 파일의 위치를 지정하기 위해 사용되는 `configLocation`이다. 이 프로퍼티를 설정하는 것은 디폴트 설정을 가진 마이바티스 설정을 변경해야 할 경우 뿐이다.
대개는 `<settings>``<typeAliases>` 섹션을 변경하는 경우이다.

설정파일이 마이바티스 설정을 완전히 다룰 필요는 없다. 어떤 환경, 어떤 데이터소스 그리고 마이바티스 트랜잭션 관리자가 **무시**될수도 있다.
설정 파일이 마이바티스 설정을 완전히 다룰 필요는 없다. 어떤 환경, 어떤 데이터소스 그리고 마이바티스 트랜잭션 관리자가 **무시**될 수도 있다.
`SqlSessionFactoryBean` 는 필요에 따라 이 값들을 설정하여 자체적인 MyBatis `Environment` 를 만든다.

설정파일이 필요한 다른 이유는 마이바티스 XML파일이 매퍼 클래스와 동일한 클래스패스에 있지 않은 경우이다. 이 설정을 사용하면 두가지 옵션이 있다.
첫번째는 마이바티스 설정파일에 `<mappers>` 섹션을 사용해서 XML파일의 클래스패스를 지정하는 것이다. 두번째는 팩토리 빈의 `mapperLocations` 프로퍼티를 사용하는 것이다.
설정 파일이 필요한 다른 이유는 마이바티스 XML파일이 매퍼 클래스와 동일한 클래스패스에 있지 않은 경우이다. 이 설정을 사용하면 두 가지 옵션이 있다.
첫 번째는 마이바티스 설정파일에 `<mappers>` 섹션을 사용해서 XML파일의 클래스패스를 지정하는 것이다. 두 번째는 팩토리 빈의 `mapperLocations` 프로퍼티를 사용하는 것이다.

`mapperLocations` 프로퍼티는 매퍼에 관련된 자원의 위치를 나열한다. 이 프로퍼티는 마이바티스의 XML매퍼 파일들의 위치를 지정하기 위해 사용될 수 있다.
디렉터리 아래 모든 파일을 로드하기 위해 앤트(Ant) 스타일의 패턴을 사용할수도 있고 가장 상위 위치를 지정하는 것으로 재귀적으로 하위 경로를 찾도록 할수도 있다. 예를 들어보면 다음과 같다.
디렉터리 아래 모든 파일을 로드하기 위해 앤트(Ant) 스타일의 패턴을 사용할 수도 있고 가장 상위 위치를 지정하는 것으로 재귀적으로 하위 경로를 찾도록 할 수도 있다. 예를 들어보면 다음과 같다.

```xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
Expand All @@ -58,7 +58,7 @@ public class MyBatisConfig {

이 설정은 `sample.config.mappers` 패키지 아래와 그 하위 패키지를 모두 검색해서 마이바티스 매퍼 XML파일을 모두 로드할 것이다.

컨테이너 관리 트랜잭션을 사용하는 환경에서 필요한 하나의 프로퍼티는 `transactionFactoryClass` 이다. 이에 관련해서는 트랜잭션을 다루는 장에서 볼수 있다.
컨테이너 관리 트랜잭션을 사용하는 환경에서 필요한 하나의 프로퍼티는 `transactionFactoryClass` 이다. 이에 관련해서는 트랜잭션을 다루는 장에서 볼 수 있다.

만약 multi-db 기능을 사용한다면 다음과 같이 `databaseIdProvider` 속성을 설정해야 한다.

Expand All @@ -83,7 +83,7 @@ public class MyBatisConfig {
````

<span class="label important">NOTE</span>
1.3.0 버전 부터 `configuration` 속성이 추가되었다. 다음과 같이 MyBatis XML 설정 파일없이 `Configuration` 인스턴스를 직접 지정할 수 있습니다.
1.3.0 버전부터 `configuration` 속성이 추가되었다. 다음과 같이 MyBatis XML 설정 파일 없이 `Configuration` 인스턴스를 직접 지정할 수 있습니다.

```xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
Expand Down
Loading

0 comments on commit 482a595

Please sign in to comment.