Spring, Spring boot mybatis 예제
1. 소개
MyBatis는 Java 응용 프로그램에서 SQL 데이터베이스 액세스를 구현하기 위해 가장 일반적으로 사용되는 오픈 소스 프레임 워크 중 하나입니다.
이 빠른 자습서에서는 MyBatis를 Spring 및 Spring Boot와 통합하는 방법을 설명합니다.
2. 모델 정의
기사 전체에서 사용할 간단한 POJO를 정의하여 시작해 보겠습니다.
public class Article {
private Long id;
private String title;
private String author;
// constructor, standard getters and setters
}
그리고 동등한 SQL schema.sql 파일 :
CREATE TABLE IF NOT EXISTS `ARTICLES`(
`id` INTEGER PRIMARY KEY,
`title` VARCHAR(100) NOT NULL,
`author` VARCHAR(100) NOT NULL
);
다음으로, 우리의 기사 테이블에 하나의 레코드를 삽입 하는 data.sql 파일을 만들어 보자 .
INSERT INTO ARTICLES
VALUES (1, 'Working with MyBatis in Spring', 'Baeldung');
두 SQL 파일 모두 클래스 경로에 포함되어야합니다 .
3. 스프링 구성
MyBatis를 사용하려면 MyBatis 와 MyBatis-Spring의 두 가지 주요 의존성을 포함시켜야합니다 .
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
그 외에도 기본 스프링 종속성 이 필요합니다 .
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
이 예에서는 H2 임베디드 데이터베이스 를 사용하여 구성을 위해 spring-jdbc 모듈 의 설정 및 EmbeddedDatabaseBuilder 클래스 를 단순화 합니다.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
3.1. 주석 기반 구성
Spring은 MyBatis의 구성을 단순화합니다. 필요한 유일한 요소는 javax.sql.Datasource , org.apache.ibatis.session.SqlSessionFactory 및 하나 이상의 매퍼입니다.
먼저 구성 클래스를 만들어 보겠습니다.
@Configuration
@MapperScan("com.baeldung.mybatis")
public class PersistenceConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("schema.sql")
.addScript("data.sql")
.build();
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource());
return factoryBean.getObject();
}
}
또한 MyBatis-Spring 의 @MapperScan 주석을 정의하여 정의 된 패키지를 스캔하고 @Select 또는 @Delete 와 같은 매퍼 주석을 사용하여 인터페이스를 자동으로 선택합니다 .
@MapperScan 을 사용 하면 제공된 모든 매퍼가 Bean 으로 자동 등록되고 나중에 @Autowired 주석 과 함께 사용할 수 있습니다 .
이제 간단한 ArticleMapper 인터페이스를 만들 수 있습니다 .
public interface ArticleMapper {
@Select("SELECT * FROM ARTICLES WHERE id = #{id}")
Article getArticle(@Param("id") Long id);
}
마지막으로 설정을 테스트하십시오.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = PersistenceConfig.class)
public class ArticleMapperIntegrationTest {
@Autowired
ArticleMapper articleMapper;
@Test
public void whenRecordsInDatabase_shouldReturnArticleWithGivenId() {
Article article = articleMapper.getArticle(1L);
assertThat(article).isNotNull();
assertThat(article.getId()).isEqualTo(1L);
assertThat(article.getAuthor()).isEqualTo("Baeldung");
assertThat(article.getTitle()).isEqualTo("Working with MyBatis in Spring");
}
}
위의 예에서 MyBatis를 사용하여 data.sql 파일에 이전에 삽입 한 유일한 레코드를 검색했습니다 .
3.2. XML 기반 구성
앞에서 설명한 것처럼 Spring과 함께 MyBatis를 사용하려면 Datasource , SqlSessionFactory 및 하나 이상의 매퍼가 필요합니다.
beans.xml 구성 파일 에서 필수 Bean 정의를 작성 하십시오.
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="schema.sql"/>
<jdbc:script location="data.sql"/>
</jdbc:embedded-database>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="articleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.baeldung.mybatis.ArticleMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
이 예에서는 spring-jdbc 에서 제공하는 사용자 정의 XML 스키마를 사용하여 H2 데이터 소스를 구성했습니다.
이 구성을 테스트하기 위해 이전에 구현 한 테스트 클래스를 재사용 할 수 있습니다. 그러나 주석을 적용하여 컨텍스트 구성을 조정해야합니다.
@ContextConfiguration(locations = "classpath:/beans.xml")
4. 스프링 부트
Spring Boot는 MyBatis의 구성을 Spring과 훨씬 더 단순화하는 메커니즘을 제공합니다.
먼저, 추가 할 수 [MyBatis로 스프링 부팅 스타트 의존성을](https://search.maven.org/search?q=g:org.mybatis.spring.boot%20a:mybatis-spring-boot-starter) 우리에 pom.xml 파일 :
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
기본적으로 자동 구성 기능을 사용하는 경우 Spring Boot는 클래스 경로에서 H2 종속성을 감지하고 Datasource 와 SqlSessionFactory 를 모두 구성합니다 . 또한 시작시 schema.sql 및 data.sql 을 모두 실행합니다 .
임베디드 데이터베이스를 사용하지 않는 경우 application.yml 또는 application.properties 파일을 통한 구성을 사용 하거나 데이터베이스를 가리키는 데이터 소스 Bean을 정의 할 수 있습니다.
우리가 남은 것은 매퍼 인터페이스를 이전과 같은 방식으로 정의하고 MyBatis 의 @Mapper 주석으로 주석을 달아주는 것입니다 . 결과적으로 Spring Boot는 프로젝트를 스캔하여 해당 주석을 찾고 맵퍼를 Bean으로 등록합니다.
그런 다음 spring-boot-starter-test 에서 주석을 적용하여 이전에 정의 된 테스트 클래스를 사용하여 구성을 테스트 할 수 있습니다 .
@RunWith(SpringRunner.class)
@SpringBootTest
5. 결론
이 기사에서는 Spring으로 MyBatis를 구성하는 여러 가지 방법을 살펴 보았다.
주석 기반 및 XML 구성 사용 예제를 살펴보고 스프링 부트와 함께 MyBatis의 자동 구성 기능을 보여주었습니다.
항상 그렇듯이이 기사에서 사용 된 완전한 코드는 GitHub에서 사용할 수 있습니다 .
참고
'Spring' 카테고리의 다른 글
Spring Boot 란 (0) | 2020.06.22 |
---|---|
Spring boot web filter 예제 (0) | 2020.06.21 |
Spring boot interceptor 예제 (0) | 2020.06.17 |
스프링 Boot에서 PDF 출력하기 (0) | 2020.06.17 |
스프링 부트의 JdbcTemplate 예제 (0) | 2020.06.17 |