카테고리 없음
MyBatis_1. 프레임워크 및 환경설정하기
하이팝
2023. 12. 19. 15:41
* 프레임워크 ?
- 개발자가 보다 편리한 환경에서 개발할 수 있도록 제공하는 뼈대, 틀
- 소프트웨어 개발의 입장으로써는 공통으로 사용하는 라이브러리 / 개발도구 / 인터페이스 등등을 의미한다.
* 사용하는 이유 ?
- 거대하고 복잡도가 높은 프로젝트를 완성시키기 위해서는 많은 사람이 필요한데
그 많은 개발자들이 "통일성"있고 빠르고 안정적으로 개발하기 위해서는 프레임워크가 필요하기 때문이다.
* 프레임워크 특징
- 자유롭게 설계하고 코딩하는 것이 아니라 프레임워크가 제공하는 가이드대로 설계해야 한다.
- 개발범위가 정해져 있다.
- 개발자를 위한 다양한 플로그인들이 지원된다.
* 프레임워크 장단점
> 장점 : 개발시간을 단축할 수 있다.
오류로부터 자유로워질 수 있다.
> 단점 : 의존하다보면 개발능력이 떨어져서 프레임워크 없이 개발하는 것이 어렵다.
습득까지 시간이 오래걸릴 수 있다.
!! 프로젝트 lib폴더에 mybatis.jar 파일을 추가해야 사용가능하다.. !!
<!-- mybatis-comfig.xml 파일에서 환경설정하기 -->
<!-- URL : https://mybatis.org/mybatis-3/ko/getting-started.html -->
<!-- 마이바티스 -> XML에서 SqlSessionFactory 빌드하기 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 이 문서의 형식이 configuration(환경설정)임을 알려줌 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<!--
configuration태그가 전체를 감쌈
DTD : 유효성을 체크해줌(내가 작성한 태그들이 configuration태그 안에 존재해도 되는지를 체크해줌)
-->
<configuration>
<!-- * settings : MyBatis구동시 사용할 설정들을 작성하는 영역 -->
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
<!-- 만약 null로 데이터가 전달된다면 빈칸이 아닌 NULL로 인식하겠다는 설정 -->
</settings>
<!-- * typeAlias : VO/DTO클래스들의 풀클래스명을 단순한 클래스명으로 사용하기 위한 별칭을 등록할 수 있는 영역 -->
<typeAliases>
<typeAlias type="com.kh.member.model.vo.Member" alias="member"/>
</typeAliases>
<!--
* environments : MyBatis에 연동할 DB정보들을 등록하는 영역(여러개 DB정보 등록가능)
=> default속성으로 여러개의 id중 어떤 DB를 기본 DB로 사용할지 설정해야 한다.
-->
<environments default="development">
<environment id="development">
<!--
* transactionManager : JDBC OR MANAGED 둘 중 하나를 선택할 수 있음.
- JDBC : 트랜잭션 관리를 개발자가 하겠다(수동 commit)
- MANAGED : 트랜잭션 관리를 트랜잭션매니저에게 위임하겠다(자동 commit)
-->
<transactionManager type="JDBC"/>
<!--
* dataSource : POOLED와 UNPOOLED 둘중 하나를 선택할 수 있음
(ConnectionPool 사용여부)
- ConnectionPool : Connection객체를 담아둘 수 있는 영역
한 번 생성된 Connection객체를 담아두면서 재사용함
=> POOLED : ConnectionPool을 사용하겠다.
=> UNPOOLED : ConnectionPool을 사용하지 않겠다.
-->
<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="MYBATIS"/>
<property name="password" value="MYBATIS"/>
</dataSource>
</environment>
</environments>
<!--
* mappers : 실행할 sql문들을 기록해둔 mapper파일들을 등록하는 영역
-->
<mappers>
<mapper resource="/mappers/member-mapper.xml"/>
</mappers>
</configuration>
<!-- member-mapper.xml 설정하기 -->
<!-- URL : https://mybatis.org/mybatis-3/ko/getting-started.html -->
<!-- 마이바티스 -> 매핑된 SQL 구문 살펴보기 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="memberMapper">
<!-- namespace : 현재 mapper의 고유한(UNIQUE) 별칭 -->
<!--
* resultMap : 마이바티스 핵심 기능중 하나
ResultSet으로부터 조회된 칼럼값을 하나씩 뽑아서 vo객체의 각 필드에 담는 JDBC코드를 대신 수행해준다.
<resultMap id="식별자" type="조회된결과를 담아서 반환하고자 하는 vo객체의 타입">
<id column="조회결과를 뽑고자하는 DB의 PK칼럼명" property="결과값을 담아줄 필드명" />
<result column="조회결과를 뽑고자하는 DB테이블의 칼럼명" property="결과값을 담아줄 필드명"/>
</resultMap>
-->
<resultMap type="member" id="memberResultSet">
<!-- type="member" (==) Member m = new Member(); -->
<id column="USER_NO" property="userNo" />
<!-- == m.serUserNo(rset.getInt("USER_NO")) -->
<result column="USER_ID" property="userId" />
<!-- == m.serUserId(rset.getInt("USER_ID")) -->
<result column="USER_PWD" property="userPwd" />
<result column="USER_NAME" property="userName" />
<result column="EMAIL" property="email" />
<result column="BIRTHDAY" property="birthday" />
<result column="GENDER" property="gender" />
<result column="PHONE" property="phone" />
<result column="ADDRESS" property="address" />
<result column="ENROLL_DATE" property="enrollDate" />
<result column="MODIFY_DATE" property="modifyDate" />
<result column="STATUS" property="status" />
</resultMap>
<!--
* SELECT문일 경우
<select id="각 sql문들의 식별자" parameterType="전달받은 데이터의 타입 혹은 별칭(생략가능)"
resultType="조회결과를 반환하고자 하는 자바타입"
resultMap="조회결과를 뽑아서 맵핑할 resultMap의 id값">
=> parameterType 속성은 생략가능하다.
=> select문은 반드시 resultType이나 resultMap으로 결과값에 대한 타입을 지정해야 한다.
</select>
* DML문의 경우 처리된 행의 갯수가 반환되기 때문에 생략가능하다.
* ? 대신에 해당 SQL문에 전달된 객체로부터 값을 꺼낼때 자료형의 종류에 따라
#{필드명}, #{변수명}, #{키값}을 사용한다.
-->
<select id="loginMember" parameterType="member" resultMap="memberResultSet">
SELECT *
FROM MEMBER
WHERE USER_ID = #{userId}
AND USER_PWD = #{userPwd}
AND STATUS = 'Y'
</select>
</mapper>