donaricano-btn

 네임스페이스와 SQL 기술(namespace & SQL)


1. 네임스페이스

- 매핑파일의 루트 요소 mapper 태그의 속성으로 지정

- SQL을 그룹으로 묶는 상자

- 네임스페이스가 다르면 SQL의 아이디가 같아도 다른 SQL로 다루어 진다


1) SQL 호출시

- namespace+.+SQL ID


2. SQL

- select태그, insert태그, update태그, delete태그

1
2
3
<select id = "selectPet" parameterType="int" resultMap="petResultMap">
  SELECT * FROM PET WHERE PET_ID = #{petId}
</select>

1) id

- 네임스페이스와 세트가 됨, 식별자

2) #{petId}

- SQL파라미터를 나타내는 바인드 변수

블로그 이미지

리딩리드

,
donaricano-btn

configuration(설정파일)

- Mybatis 설정 파일은 SQL 발행OR 매핑의 전제가 되는 정보를 설정


1. Mybatis.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
<configuration>
    <!-- 1 -->
    <settings>
        <setting name="jdbcTypeForNull" value="NULL"/>
    </settings>
    <!-- 2 -->
    <typeAliases>
        <typeAlias alias="Pet" type="sample.domain.Pet"/>
        <typeAlias alias="Owner" type="sample.domain.Owner"/>
    </typeAliases>
    <environments default="development">
        <!-- 3 -->
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost/test" />
                <property name="username" value="root" />
                <property name="password" value="1111" />
            </dataSource>
        </environment>
         
    </environments>
    <!-- 4 -->
    <mappers>
        <mapper resource="sample/dao/PetMapper.xml" />
    </mappers>
     
</configuration>


1) settings

- 캐시 ON/OFF와 SQL의 타임아웃 등 프로그램 실행 시의 다양한 설정

- 데이터베이스의 NULL값에 대응하는 JDBC 타입을 지정

2) typeAliases

- 매핑 파일과 애노테이션으로 클래스와 인터페이스를 지정할 때 별명 설정

- 완전 수식 클래스 sample.domain.Pet을 Pet

- 내장으로 설정된 별명이 있다 (java.util.HashMap -> hashmap)

3) enviroments

- 트랜잭션 처리의 종류와 데이터 소스를 설정

4) enviroment

- 자식 요소로 여러개 기술이 가능하므로 복수의 환경을 설정(개발용, 테스트용 등...)

- SqlSessionFactoryBuilder를 사용해서 SqlSessionFactory를 생성 할 때 enviroment 태그의 id 속성값을 지정 함으로써 환경을 전환 가능

블로그 이미지

리딩리드

,
donaricano-btn

SimpleProject(Mybatis3+mysql)


1. mybatis.xml(설정파일)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
<configuration>
    <environments default="development">
        <!-- 1 -->
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost/test" />
                <property name="username" value="root" />
                <property name="password" value="1111" />
            </dataSource>
        </environment>
         
    </environments>
    <!-- 2 -->
    <mappers>
        <mapper resource="sample/dao/PetMapper.xml" />
    </mappers>
     
</configuration>

1). 데이터 베이스의 접속 정보를 설정

2). 매핑 파일의 경로를 지정

 

2. petMapper.xml(매핑파일)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<!-- 1 -->
<mapper namespace="sample.dao.petMapper">
    <!-- 2 -->
    <select id="selectPet" parameterType="int" resultMap="petResultMap">
        SELECT * FROM PET WHERE PET_ID = #{petId}
    </select>
    <!-- 3 -->
    <resultMap id="petResultMap" type="sample.domain.Pet">
        <id property = "petId" column = "PET_ID"/>
        <result property = "petName" column="PET_NAME"/>
    </resultMap>
</mapper>
 

2) SQL 기술

3) 가져온 결과 OR 매핑


3. Main.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package sample;
 
import java.io.IOException;
import java.io.Reader;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
import sample.domain.Pet;
 
public class PetMain {
    public static void main(String[] args) throws IOException{
        //1
        String resource = "META-INF/mybatis.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sqlMapper.openSession();
        //2
        Pet pet = session.selectOne("sample.dao.petMapper.selectPet",1);
        session.close();
        System.out.println(pet.getPetId());
        System.out.println(pet.getPetName());
         
    }
 
}
 

1) Mybatis 설정 파일을 SqlSessionFactoryBuilder로 읽어온다

- SqlSessionFactory를 생성

- SqlSession 가져옴

2) Sql 실행

- 네임스페이스 + SQL ID

- 1은 SQL의 파라미터값 지정



fullSource - https://github.com/KyleJeong/Mybatis3


블로그 이미지

리딩리드

,
donaricano-btn

마이바티스 흐름(Flow)


1. 애플리케이션이 SqlSessionFactoryBuilder를 사용해서 SqlSessionFactory 생성 준비

2. 애플리케이션이 요청하면 SqlSessionFactoryBuilder는 데이터베이스 접속 정보 등이 기재된 Mybatis 설정 파일을 읽어옴

3. SqlSessionFactory 생성

4. 애플리케이션은 생성된 SqlSessionFactorySqlSession의 제공 의뢰

5. SqlSessionFactory는 SqlSession을 생성해서 어플리케이션에 제공

6. 애플리케이션은 SqlSession의 SQL 발행을 지시

- 7. Mapper 인터페이스를 이용할 때는 SqlSession에 Mapper의 생성을 의뢰하고 Mapper 인터페이스 메소드 호출

8. 내부에서 SqlSession에 SQL 발생이 지시

9. SqlSession은 지시된 SQL을 매핑 파일에서 찾아서 SQL 발행

블로그 이미지

리딩리드

,