포스트

Day83 실습프로젝트(Spring Web MVC)

MyBatis Spring

1. 라이브러리 가져오기

1
  implementation 'org.mybatis:mybatis-spring:2.1.2'

2. sqlSessionFactory(DaoFactory) 생성하기

1) dataSource 메서드 생성

  • config.xml에서 접속정보를 가져온다.

    1
    2
    3
    4
    
      <property name="driver" value="${jdbc.driver}"/>
      <property name="url" value="${jdbc.url}"/>
      <property name="username" value="${jdbc.username}"/>
      <property name="password" value="${jdbc.password}"/>
    
  • Spring MyBatis에서 DataSource에 적용한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      @Bean
      public DataSource dataSource(
          @Value("${jdbc.driver}") String jdbcDriver,
          @Value("${jdbc.url}") String jdbcUrl,
          @Value("${jdbc.username}") String jdbcUsername,
          @Value("${jdbc.password}") String jdbcPassword) {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName(jdbcDriver);
        ds.setUrl(jdbcUrl);
        ds.setUsername(jdbcUsername);
        ds.setPassword(jdbcPassword);
        return ds;
      }
    

2) transjection 설정

  • PlatformTransactionManager txManager = new DataSourceTransactionManager(ds)를 사용한다.

    1
    2
    3
    4
    
    @Bean
    public PlatformTransactionManager transactionManager(DataSource ds) {
      return new DataSourceTransactionManager(ds);
    }
    

3) sqlSessionFactory 생성

  • Spring에서 sqlSessionFactory를 생성하려면 SqlSessionFactoryBean을 통해 Factory객체를 생성한다.

    1
    2
    3
    4
    5
    6
    7
    8
    
      @Bean
      public SqlSessionFactory sqlSessionFactory(DataSource ds) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(ds);
        factoryBean.setTypeAliasesPackage("bitcamp.myapp.vo");
        factoryBean.setMapperLocations(appCtx.getResources("classpath:mappers/*Mapper.xml"));
        return factoryBean.getObject();
      }
    

3. Dao 생성

  • Template메서드를 이용하여 Dao클래스의 메서드를 실행한다.
  • 이때 Mapper에 UserDao에 대한 정보는 풀 패키지 명으로 작성한다.
  • <mapper namespace="bitcamp.myapp.dao.BoardDao">으로 변경한다.
  • Dao의 @Param 어노테이션을 mybatis로 바꾼다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    return new SqlSessionTemplate(sqlSessionFactory);
    }
      
    @Bean
    public UserDao createUserDao(SqlSessionTemplate sqlSessionTemplate) throws Exception {
      return sqlSessionTemplate.getMapper(UserDao.class);
    }
      
    @Bean
    public BoardDao createBoardDao(SqlSessionTemplate sqlSessionTemplate) throws Exception {
      return sqlSessionTemplate.getMapper(BoardDao.class);
    }
      
    @Bean
    public ProjectDao createPorjectDao(SqlSessionTemplate sqlSessionTemplate) throws Exception {
      return sqlSessionTemplate.getMapper(ProjectDao.class);
    }
    

5. transjection 적용

  • 트랜젝션을 적용하는 메서드에 @Transactional 어노테이션을 붙인다.

    1
    2
    3
    4
    
      @Transactional
      public void add(User user) throws Exception {
        userDao.insert(user);
      }
    
  • AppConfig에 @EnableTransactionManagement를 붙여서 Proxy 클래스를 자동 생성하게 한다.

image

6. Dao 자동생성

  • 기존 @Bean으로 Factory를 생성하는 것을 @MapperScan(“bitcamp.myapp.dao”)으로 자동 생성
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.