Mybatis란
- 자바 객체와 데이터베이스 테이블을 맵핑을 해줌
- VO를 이용한 getter/setter 작업을 덜어 줌.
- DAO를 사용하기 대신에 xml 을 이용할 것임 (BookMapper.xml)
- xml이 매핑 파일에 의해 관리될 것임 (sqlMapConfig.xml)
Spring / Mybatis 설정 or 동작 원리 / 순서
1. web.xml
- 기존과 동일하게 DispactcherServlet / HandlerMapping 을 동일하게 선언
<servlet>
<servlet-name>gaebal</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>gaebal</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2. xxx-servlet.xml
- web.xml에서 설정한 servlet-name을 접두어로 하는 xml 생성
- servlet-name이 xxx라면 xxx-servlet.xml
- viewResolver 선언
- 각종 Bean 선언
3. DB.properties (일반 파일로 만들 것)
- DB 연동을 위한 변수 선언 (Driver, URL, USER, PASSWORD 선언)
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@ip주소:포트주소:해당DB서비스
username=ID입력
password=비밀번호
4. DB연동Config.xml
- DB.properties 파일 선언
<properties resource="com/sist/db/db.props" />
- VO 알리아스 선언 (필수 아님)
<typeAliases>
<typeAlias type="com.sist.vo.BookVO" alias="bookVO"/>
</typeAliases>
- DB.properties를 기반으로 DB Connection 할 xml
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
- mapper의 위치 선언
<mappers>
<mapper resource="com/sist/db/BookMapper.xml"/>
</mappers>
5. Mapper.xml
- SQL 문이 담긴 Mapper
1.1 실행 결과의 값이 담겨 있을 속성은 resultType --> select 시 필요
1.2 실행에 필요한 매개변수가 담길 속성 parameterType --> insert/update/delete 시 필요 - namespace를 선언하는 게 좋음 (DB연동Config.xml 사용 될 것임)
아래 코드는 DBManager.java 에서
book.findAll(), book.inserBook(vo) 식으로 호출 될 것임
<mapper namespace="book">
<select id="findAll" resultType="bookVO">
select * from book order by bookid asc
</select>
<insert id="insertBook" parameterType="bookVO">
insert into book values(#{bookid}, #{bookname}, #{publisher}, #{price})
</insert>
</mapper>
6. controller
- @Controller 클래스 선언
@Controller
- DAO 객체 생성 ( 실제 객체는 xxx-servlet.xml 에서 선언 ) - byName, byType, contstruct
private BookDAO dao;
//예시는 setter에 의한 dao
public void setDao(BookDAO dao) {
this.dao = dao;
}
- dao의 함수 실행 후 result ModelAndView 리턴
@RequestMapping(value="/xxx.do", method=RequestMethod.GET)
public ModelAndView nonono() {
ModelAndView mav = new ModelAndView();
return mav;
}
7. dao
- @Repository 선언 필수
- 실제 DAO의 역할은 8번에서 할 것임
@Repository
- DBManaer에서 함수 실행 결과 return (해당 함수 return만 있고 DBmanaer에서 실제 함수 정의)
public int insertBook(BookVO vo) {
return DBManager.insertBook(vo);
}
8. DBManager ( 일전의 DAO 역할을 하는 녀석 )
- 4번의 DB연동Config.xml 과 연동 필요
- DB연동Config.xml 위치를 InputStream타입으로 저장 (Resources.getResourceAsStream)
- InputStream을 SqlSessionFactory 타입의 객체 생성후 Build(InputStream)
String dbContentPath = "com/sist/db/sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(dbContentPath);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- session open 후 SQL 명령어 실행
- session오픈 (sqlSessionFactory.openSession())
- 해당 session을 이용하여 DB쿼리문 실행 (mapper에 담겨있는 DB 쿼리문을 실행할 것임)
- 만약 insert/delete/update 라면 commit 까지 해줘야함
- 아래 예시의 insert는 실제 insert 함수임 (session의 기본 함수임)
- book.insertBook은 mapper.xml에 정의 한 sql 을 호출 하는 것임
static public int insertBook(BookVO vo) {
int re=1;
SqlSession session = sqlSessionFactory.openSession();
re = session.insert("book.insertBook", vo);
session.commit();
session.close();
return re;
}
반응형
'개발 > 스프링(Spring)' 카테고리의 다른 글
(Spring) 한글 처리 - filter 이용 (0) | 2022.06.11 |
---|---|
(Spring) redirect 함수 (0) | 2022.06.10 |
(Spring) Model 클래스를 이용하여 상태유지 (0) | 2022.06.07 |
(Spring) @ReqeustMapping GET/POST 방식 설정 (0) | 2022.06.05 |
(Spring) MVC (0) | 2022.06.02 |
댓글