티스토리 뷰
스프링은 Ibatis 연동을 위한 API를 지원하지만 Mybatis 연동에 필요한 API를 제공하진 않는다.
하지만 Mybatis에서 스프링 연동을 위한 API를 지원한다.
1. 라이브러리 내려받기
- mabatis는 순수하게 Mybatis 관련 라이브러리고, mybatis-spring는 Mybatis와 스프링 연동을 위한 라이브러리다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- pom.xml --> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.1</version> </dependency> <!-- Mybatis Spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.4</version> </dependency> | cs |
2. mybatis 설정 파일 복사 및 수정
- mybatis프로젝트에서 사용했던 board-mapping.xml과 sql-map-config.xml파일을 src/main/resources폴더에 복사한다.
- dataSources는 스프링 설정으로 이미 사용하고 있고 DB연동뿐만아니라 트랜잭션 처리 처럼 다양한 곳에서 사용할 수 있으므로 스프링 설정에서 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- sql-map-config.xml --> <configuration> <!-- Alias 설정 --> <typeAliases> <typeAlias alias="board" type="com.springbook.biz.board.BoardVO"></typeAlias> </typeAliases> <!-- Sql Mapper 설정 --> <mappers> <mapper resource="mappings/board-mapping.xml" /> </mappers> </configuration> | cs |
3. 스프링 연동 설정
- SqlSessionFactoryBean 아래에 SqlSessionTemplate 클래스를 등록한다.
- SqlSessionTemplate 클래스에는 Setter 메소드가 없어서 Setter 인젝션 할 수 없다. 따라서 생성자 메소드를 이요한 Constructor 주입으로 처리해야한다. 그러고 나서 DAO 클래스를 구현할 때 SqlSessionTemplate 객체를 @Autowired를 이용하여 의존성 주입 처리하면 SqlSessionTemplate 객체로 DB연동 로직을 처리할 수 있다.
- 교재에는 database.properties를 등록하여 jdbc.~를 사용하는 부분이 안나와있다.
> 내가 지나친건가??
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <!-- applicationContext.xml --> <!-- DataSource 설정 --> <context:property-placeholder location="classpath:config/database.properties" /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- Spring JDBC 설정 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- Transaction 설정 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- Spring과 Mybatis 연동 설정 --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:sql-map-config.xml"></property> </bean> <bean class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSession"></constructor-arg> </bean> | cs |
4. DAO 클래스 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | // BoardDAOMybatis.java @Repository public class BoardDAOMybatis { @Autowired private SqlSessionTemplate mybatis; // CRUD 기능의 메소드 구현 // 글 등록 public void insertBoard(BoardVO vo) { System.out.println("===> mybatis로 insertBoard() 기능 처리"); mybatis.insert("BoardDAO.insertBoard", vo); } // 글 수정 public void updateBoard(BoardVO vo) { System.out.println("===> mybatis로 updateBoard() 기능 처리"); mybatis.update("BoardDAO.insertBoard", vo); } // 글 삭제 public void deleteBoard(BoardVO vo) { System.out.println("===> mybatis로 deleteBoard() 기능 처리"); mybatis.delete("BoardDAO.deleteBoard", vo); } // 글 상세 조회 public BoardVO getBoard(BoardVO vo) { System.out.println("===> mybatis로 getBoard() 기능 처리"); return (BoardVO) mybatis.selectOne("BoardDAO.getBoard", vo); } // 글 목록 조회 public List<BoardVO> getBoardList(BoardVO vo) { System.out.println("===> mybatis로 getBoardList() 기능 처리"); return mybatis.selectList("BoardDAO.getBoardList", vo); } } | cs |
5. MyBatis 연동 테스트
- BoardServiceImpl파일을 수정하여 BoardDAOMybatis 객체를 의존성 주입할 수 있도록 한다.
1 2 3 4 5 6 7 | // BoardServiceImpl.java @Service("boardService") public class BoardServiceImpl implements BoardService { @Autowired private BoardDAOMybatis boardDAO; | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- board-mapping.xml --> <select id="getBoardList" resultMap="boardResult"> SELECT * FROM BOARD WHERE 1 = 1 <if test="searchCondition == 'TITLE'"> AND TITLE LIKE '%'||#{searchKeyword}||'%' </if> <if test="searchCondition == 'CONTENT'"> AND CONTENT LIKE '%'||#{searchKeyword}||'%' </if> ORDER BY SEQ DESC </select> | cs |
'spring' 카테고리의 다른 글
day5 class06 스프링과 JPA 연동 (0) | 2019.03.03 |
---|---|
day5 class04 JPA 개념, class05 JPA 환경설정 (0) | 2019.02.25 |
day5 class02 Mapper XML 파일 설정 (0) | 2019.02.22 |
day5 class05 Mybatis 프레임워크 시작하기 (0) | 2019.02.21 |
day4 class07 데이터 변환 (0) | 2019.02.17 |
- Total
- Today
- Yesterday
- setter 인젝션
- exclude-mapping
- 의존성
- blocking
- Class path contains multiple SLF4J bindings
- preHandler
- LoggingEvent
- JoinPoint
- XmlWebApplicationContext
- handlermapping
- 스프링 컨테이너
- 의존성 주입
- java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent
- application context
- ViewResolver
- Controller
- postHandler
- aop
- SqlSessionFactoryBean
- 횡단 관심
- NoClassDefFoundError
- @Autowired
- multiple SLF4J bindings
- 컨트롤러
- 검색
- servlet context
- afterCompletion
- #java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent삭제
- aspect oriented programming
- 어노테이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |