Spring

Spring, Spring boot mybatis 예제

기록만이살길 2020. 6. 21. 22:08
반응형

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를 사용하려면 MyBatisMyBatis-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 종속성을 감지하고 DatasourceSqlSessionFactory 를 모두 구성합니다 . 또한 시작시 schema.sqldata.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에서 사용할 수 있습니다 .

참고

https://www.baeldung.com/spring-mybatis

반응형

'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