Fullstack-Study-241204-250625

커리큘럼(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

"myBatis"

Mybatis 적용하기

1. mybatis api다운

공식홈페이지

  • maven repository 3.5.16 jar버전 다운 후 lib 파일안에 넣기

2. mybatis 설정파일 생성

  1. src/main/resources 폴더 생성
  2. src/main/resources/mybatis.config 패키지 생성
  3. 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();
}