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 클래스를 자동 생성하게 한다.
6. Dao 자동생성
- 기존 @Bean으로 Factory를 생성하는 것을 @MapperScan(“bitcamp.myapp.dao”)으로 자동 생성
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.