커리큘럼(12-30/변경)
01. Java
02. git
03. Database
04. Jsp [Server] (v)
05. 미니프로젝트 (3W)
06. HTML,CSS
07. JS
08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)
JSP
Mybaits
- 개발자가 지정한 SQL , 고급 매핑을 지원하는 프레임워크
- JDBC코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거
- 복잡한 JDBC코드를 걷어내며 깔끔한 소스코드 유지
- DAO계층을 대신함
- 기존 DAO Interface의 구현클래스를 xml파일이 대신함

Mybatis 적용하기
1. mybatis api다운
공식홈페이지
maven repository 3.5.16 jar
버전 다운 후 lib 파일안에 넣기
2. mybatis 설정파일 생성
src/main/resources
폴더 생성
src/main/resources/mybatis.config
패키지 생성
mybatis.config
패키지 아래에 mybatis-config.xml
파일 생성
xml
파일에서 빨간줄이 생기는 경우 window > preference > maven > Download Artifact Javadoc , Download repository index updates on startup
체크
# mybatis-config.xml 파일
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
카멜 표기법 자동 변환: 설정을 통해 언더스코어 표기법의 컬럼명을 카멜 표기법의 속성명으로 자동 변환.
기본 필드명 매핑: 컬럼명과 VO 속성명이 동일하거나 변환 규칙에 맞으면 자동 매핑.
이 설정은 FIRST_NAME컬럼을 자바의 firstName변수명으로 자동 변경하여 맵핑시킵니다.
-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="HR"/>
<property name="password" value="HR"/>
</dataSource>
</environment>
</environments>
<!-- 매퍼는 mybatis/mapper폴더 아래에 모으고, 매퍼의 위치를 지정한다. -->
<mappers>
<mapper resource="mybatis/mapper/FreeBoard.xml"/>
</mappers>
</configuration>
3. sessionFactory 객체 생성
- SqlSessionFactory는 sqlSession을 만들기 위한 객체이며 1개만 있으면 됨
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
//첫번째 실행시 1번만 동작된다.
static {
//src/main/resources 폴더 생성
//src/main/resources/mybatis.config 패키지 생성
//밑에 mybatis-config.xml파일이 있어야합니다.
try {
String resource = "mybatis/config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println("잘실행됨:" + sqlSessionFactory);
} catch (Exception e) {
e.printStackTrace();
System.out.println("세션팩토리 오류");
}
}
//GETTER
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
4. mapper인터페이스 생성
- mybatis는 xml을 호출하는데 반드시 interface를 호출하도록 의도됨
- 인터페이스의 실제 객체는 mybatis가 만들어주는 객체가 됨
- mybatis가 DAO의 실제객체를 만들 떄, 개발자가 작성한 mybatis Mapper파일(.xml)을 참고해 만듬
public interface FreeBoard {
public String now();
//...생략
}
5. mapper 구현체 생성
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="FreeBoard의 풀네임(패키지포함명)">
<select id="메소드명" resultType="return타입 풀 네임" parameterType="파라미터타입 풀네임">
원하는 쿼리문 (;제외하기)
</select>
<!--
파라미터 값이 있으면, 이 파라미터에 대한 타입을 지정(필수x)
PreparedStatement에서 사용하던 ?는 mybatis에서는 #{}로 바뀜
파라미터의 이름은 DTO의 getter명을 따라감
-->
<insert id="regist" parameterType="com.myweb.board.model.BoardDTO">
INSERT INTO BOARD(BNO,EMAIL,TITLE,CONTENT,REGDATE)
VALUES(BOARD_SEQ.NEXTVAL,#{email},#{title},#{content},#{regdate})
</insert>
</mapper>
6. 서비스 영역에서 호출
try {
SqlSession sql = sqlSessionFactory.openSession(true); //auto commit여부
FreeBoard board = sql.getMapper(FreeBoard.class); //인터페이스 타입을 넣는다.
String now = board.now();
} catch(Exception e) {
e.printStacktrace();
}