프로젝트 마이바티스 설정 스탭
1. 프로젝트 생성 , driver build path지정
2. 패키지 생성,
3. Jdbc.properties파일의 4가지 정보 설정 후 파일
붙이기
4. 모델클래스 파일만이라도 생성, mapper.xml 빈
껍데기 파일 만 생성 후
패키지에 붙여넣기
5. Configuration . Xml에서 properties, alias,
mapper지정
6. MySqlSessionFactory 파일 붙여넣기
7. 서비스에서 MySqlSessionFactory사용하기
db 접속에 필요한 기본 정보들을 key = value 형태로 저장
DB에서 실행할 SQL문들을 태그 형태로 구현.
보통 ID를 붙여서 호출시 사용.
namespace로 2개 이상의 mapper를 구분할 수 있음
parameterType=""으로 인자로 전달받을 기본데이터타입이나 모델클래스타입을 정할 수 있음.
resultType=""으로 반환할 데이터의 타입을 정할 수 있음.
모델클래스타입은 패키지 경로까지 지정해줘야함
Mapper와 jdbc.properties, alias 등의 설정값들을 받아둔다.
Configuration.xml을 읽어내서 정보를 저장하고 메소드를 이용하여 접속을 반환해준다.
Service와 상호작용하며 다양한 작업을 수행
MySqlSessionFactory에서 접속을 반환받아 DAO에 함수를 호출하고 결과를 받는다.
Mapper.xml에 구현된 sql 태그들을 id를 이용해서 접근하여 DB의 데이터들을 사용하고 결과값이 있다면 Service에 반환
DB접속에 기본이 되는 정보들을 .properties 파일로 빼놓고 Configuration.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>
<properties resource="jdbc.properties"/>
<typeAliases>
<typeAlias type="com.dto.Dept" alias="Dept"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- db 연결 4가지 정보 -->
<dataSource type="POOLED">
<property name="driver" value="${oracle.jdbc}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.userid}"/>
<property name="password" value="${oracle.passwd}"/>
</dataSource>
</environment>
</environments>
<!-- Mapper.xml의 경로 등록 (Mapper.xml파일이 존재해야함 )-->
<mappers>
<mapper resource="DeptMapper.xml"/>
<mapper resource="DeptMapper2.xml"/>
</mappers>
</configuration>
위 코드에서 mapper도 2개를 잡아주고 있다.
만약 mapper가 2개 있다면 각 mapper에서 설정할 수 있는 namespace를 이용해 구분하여 사용할 수 있다. dao에서 id호출시 namespace.id를 이용해 원하는 매퍼의 아이디를 호출하여 사용할 수 있다.
configuration.xml의 프로퍼티 아래 위치에 typeAliases 태그로 사용등록 후 사용가능 (위치 중요)
<properties resource="jdbc.properties"/>
<typeAliases>
<typeAlias type="com.dto.Dept" alias="Dept"/>
</typeAliases>
key : 대문자컬럼명 / value : 컬럼에 해당하는 값
정수값은 bigdecimal 객체로 저장됨 -> inr값으로 변형해서 사용해야함
DEPTNO/BigDecimal.intValue() / .doubleValue()
mapper에 다양한 데이터타입이 들어간 해쉬맵 타입 데이터를 받을 시 제너릭 선언을 안하고 Object타입으로 반환받는다.
mapper로부터 정수값을 맵에 저장하여 결과값은 BigDecimal이다. 따라서 값을 사용하려면 Object -> BigDecimal -> int로 처리하여 사용해야한다.
문자열의 경우에는 Object -> String 으로 타입캐스팅하면 된다.
int deptno = ((BigDecimal)map.get("DEPTNO")).intValue();
이렇게 타입들이 애매한 부분이 있어서 HashMap에 담아서 반환하는 방식은 권장하지 않는다.
따라서 객체로 반환받는 방식이 권장된다.
동적sql : https://mybatis.org/mybatis-3/dynamic-sql.html#dynamic-sql
configuration.xml에 관련한 에러메시지 보는 법 익혀두기
JDBC_MyBatis_Ver_1 ~ JDBC_MyBatis_Ver_7
application 종료
=> eclipse + tomcat => javascript(웹개발)