DataBase의 쿼리(query)를 실행시키는 모듈이 모여있는 프레임워크
마이바티스(MyBatis)는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 애너테이션(annotation)을 사용하여 저장 프로시저나 SQL 문으로 객체들을 연결시킨다.
SQL 문들과 매핑들은 다음과 같이 XML 파일로 표면화할 수 있다.
(iBATIS(아이바티스)는 SQL에 기반한 데이터베이스와 자바, 닷넷(.NET), 루비(Ruby) 등을 연결시켜 주는 역할을 하는 영속성 프레임워크(Persistence Framework)이다. 이러한 연결은 프로그램의 소스코드에서 SQL 문장을 분리하여 별도의 XML 파일로 저장하고 이 둘을 서로 연결시켜주는 방식으로 작동한다.)
ex)
<?xml version="1.0" encoding="UTF-8" ?>
http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
mapper란 위와 같이 MyBatis에서 SQL 문을 저장하는 xml 문서를 말한다
마이바티스 등록 설정은 root-context.xml에 빈을 등록한다
쿼리태그에서 id는 메소드 이름을 뜻하며 parameterType은 매개변수 resultType은 결과값은 담는 데이터를 뜻한다
좀 더 쉽게 말하자면
데이터베이스와 소통할 수 있게 도와주는 라이브러리. 주로 SQL을 통해 데이터를 다루는 환경에서 개발자들이 더 쉽게 코드를 짤 수 있도록 도와준다.
보통 Java로 데이터베이스 작업을 할 때는 SQL 쿼리문을 일일이 작성하고, 복잡한 코드를 사용해 데이터베이스와 연결하는 과정이 필요했지만 마이바티스를 사용하면 이러한 작업이 훨씬 간단해진다.
회원가입 페이지에 값을 입력했을 때 db에 값이 들어오도록 설정을 할것이다.

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
1. pom.xml에 dependency를 하나 더 추가한다.
Maven 프로젝트에서 사용하는 의존성 설정이다. Spring 프레임워크의 spring-jdbc 라이브러리를 가져오겠다는 의미.
JDBC를 활용해 데이터베이스에 접근하는 작업을 할 때 Spring의 기능을 쉽게 사용할 수 있도록 지원하는 라이브러리!
groupId : 라이브러리의 그룹 ID로, 주로 라이브러리를 제공하는 회사나 조직을 나타낸다. org.springframework는 Spring 프레임워크 관련 라이브러리의 그룹 ID.
artifactId : 특정 라이브러리의 이름을 지정한다. spring-jdbc는 Spring의 JDBC 기능을 위한 라이브러리로, JDBC를 통해 데이터베이스와 연결하고 SQL 쿼리를 실행하는 기능을 제공.
version : 사용할 라이브러리의 버전을 지정한다. ${org.springframework-version}은 변수를 사용한 것으로, 상단에 있는 자바 버전과 동일하게 했다.
<!-- javax 어노테이션을 사용하기 위해서 의존성 설정 -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mybatis 프레임워크를 사용하기 위한 의존성 설정.
데이터베이스 작업을 간편하게 수행하기 위해서 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- 스프링과 마이바티스를 연결하기 위한 의존성 설정 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
2. jdbc 뿐만 아니라 3가지의 디펜더시를 추가했다. mybatis와 연결하기 위해서 의존성 설정.
마지막 dependency : mybatis-spring 의존성은 Spring과 MyBatis를 연결하고, 통합해서 사용하기 위한 설정이다. 이 의존성을 추가함으로써, Spring의 트랜잭션 관리나 의존성 주입 기능을 MyBatis에서도 활용할 수 있게 되는 것. Spring의 @Transactional 애너테이션을 사용해서 MyBatis 쿼리의 트랜잭션을 관리하거나, MyBatis의 Mapper 인터페이스를 Spring Bean으로 주입하여 사용할 수 있는 것이다.
<!-- 스프링 트랜잭션 관리 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
3. 마지막에 스프링 트랜잭션 관리하는 의존성까지 추가한다.

4. 내가 설정한 의존성들이 잘 들어갔는지 확인을 하고 싶다면 c드라이브 - 사용자 - admin - .m2 에 들어가서 repository - org - springpramework 안으로 들어가서 확인을 할 수가 있다.
왼쪽에 있는 프로젝트에서 web-inf - spring - root.wml 파일을 열어서 bean을 등록 할거다
우리가 자바를 할 때 db와 연결을 하기 위해서 드라이버 매니저를 사용 했었는데, 그것과 같은 원리라고 생각을 하면 된다.
프로젝트 중에서 Maven Dependencies - spring-jdbc-4.3.3 안에 들어가보면 org.springframework.jdbc 패키지가 나온다. 그 안에 들어있는 datasource 패키지를 열어보면 드라이버매니저데이터소스가 있는데, 이걸 활용해서 bean을 등록할거기 때문에 잘 기억해두면 좋다.

<!-- id는 이 빈을 참조할 때 사용할 이름. 다른곳에서 이 이름을 통해 이 빈에 접근할 수 있다.
class는 사용할 클래스의 경로를 지정 -->
<bean id= "db" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/aws0822?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>
1. root-context.xml 파일에서 데이터베이스 연결을 설정하는 부분.
MySQL 데이터베이스에 연결하기 위한 DriverManagerDataSource 빈을 정의하고 있다.
클래스는 드라이버매니저데이터소스 클래스의 경로를 그대로 적으면 된다.
/를 적으면 뒤에 닫는 태그가 사라진다.
<!-- 공장과 같은 곳 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="db"/>
<!-- mappers 폴더 내의 모든 xml 파일을 매퍼로 사용하겠다는 의미 -->
<property name="mapperLocations" value="classpath:mappers/*.xml" />
<!-- mybatis의 설청 파일 위치를 지정 -->
<property name="configLocation" value="classpath:config/mybatis_config.xml" />
</bean>
2. 그 아래에도 bean을 추가해서 코드를 작성한다. 위 코드와 연동되어 있다.

<!-- 쿼리를 보내는 대리점 같은 곳 위에있는 쿼리와 연동된다. -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
3. 얘는 대리점과 같은애 위에는 공장 생성자를 통해서 연동되어 있다. 마이바티스를 사용하려면 sql객체를 통해서 연결되어있다

4. 리소스 패키지 안에 mappers 패키지를 만든다.
mappers 란?
일반적으로 MyBatis와 연동하여 데이터베이스의 데이터를 객체로 매핑하는 인터페이스를 의미합니당. mapper는 SQL 쿼리와 Java 메서드를 연결해 주고, 이를 통해 SQL 쿼리를 Java 코드에 직접 작성하지 않고도 데이터베이스의 데이터를 다룰 수 있게 해준다.

5. mappers 안에 xml 파일을 생성해서 memberMapper.xml 파일을 하나 만든다.

6. 리소스 패키지 안에 config 패키지 하나 더 생성하기
컨피그 안에는 mybatis_config.xml 파일 하나 생성
memberMapper.xml에 가서 문서 타입을 지정해줘야 한다.

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.my0803.myapp.persistance.Member_Mapper">
</mapper>
1. mybatis용 DTD 데이터 타입 문서라는 뜻이다.

2. myapp 안에다가 persistance 패키지를 생성한다.
마이바티용 메소드를 정의하는곳이다.

3. 그 안에다가 클래스가 아닌 인터페이스 파일을 생성한다. 여기에는 메소드 이름만 선언을 한다. 실질적으로 구현되는 쿼리들은 매퍼에다가 적어서 마이바티스가 작동되는것이다.

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="mv" type="com.myaws.myapp.domain.MemberVo"/>
</typeAliases>
</configuration>
4. 다음은 mybatis_config.xml 파일로 가서 여기도 타입을 지정해줘야 한다. 여기는 마이바티스 환경설정용이다 라는 정의를 내렸다.
typeAlias 는 별칭이라는 뜻. 환경설정으로 별칭과 주소를 한 번에 묶겠다.

5. 왼쪽에 domain 패키지에 이클립스에서 썼던 memeberVo를 가져와서 붙여넣기 한다.
package com.myaws.myapp.domain;
6. 상단에 적용해주기