MyBatis 시작하기

유광진·2023년 8월 31일
1

📌 1. MyBatis

Mybatis는 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크이다.

SQL을 별도의 파일로 분리해서 관리하게 해준다.

즉, 복잡한 JDBC코드를 작성하지 않고 깔끔한 소스코드를 유지할 수 있다.

📖 properties

properties는 자바와 mariaDB를 연동 하기 위해 사용했던 Driver라고 생각하면 된다.

별도의 파일을 생성하여 코드를 작성한다.

driver=org.mariadb.jdbc.Driver
url=jdbc:mariadb://127.0.0.1:3306/test

username= //사용자 지정
password= //사용자 지정

📖 Mapper.xml

Mapper는 자바와 DB를 연결한 상태에서 그 해당 데이터베이스에 SQL쿼리문을 작성할 수 있는 파일이다.

<mapper namespace="dev">
   <select id="selectDataAll" resultType="pack.SangpumDto" statementType="PREPARED"> 
  		select * from sangdata order by code asc
 </select>
</mapper>

select 태그에서 id속성은 해당 태그안에 있는 쿼리를 호출할 때 사용할 메서드의 이름을 식별하기 위한 것이다.

resultType은 속성은 SQL 쿼리의 실행 결과를 어떤 형태로 매핑할지를 지정하는 것이다.

resultType속성에서 왜 SangpumDto 타입으로 해줬을까?

데이터베이스 테이블 sangdata의 각 행의 정보를 SangpumDto 클래스의 객체에 매핑하기 위해서이다.

📖 Configuration.xml

<configuration>
 <properties resource="pack/db.properties" /> 
 <environments default="dev">
  <environment id="dev">
   <transactionManager type="JDBC" />
   <dataSource type="POOLED">
    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
   </dataSource>
  </environment>
 </environments>
 <mappers>
  <mapper resource="pack/DataMapper.xml" />
 </mappers>
</configuration>

이 파일은 데이터베이스 연결 정보를 읽어들이고, 데이터베이스와의 연결을 설정한 다음, SQL 쿼리와 자바 객체 간의 매핑을 처리할 수 있도록 정보를 읽어 들인다.

쉽게 말해 properties에서 설정한 DB연결 정보와 DataMapper안에서 작성한 쿼리문들의 정보를 담고 있는 파일이다.

📖 SqlMapConfig.java

public class SqlMapConfig {
	// mybatis 에서는 DB에 연동하는 Connection객체를 SqlSession이라 부른다.
	public static SqlSessionFactory sqlSession; 
	
	static {
		String resource = "pack/Configuration.xml";
		try {
			Reader reader = Resources.getResourceAsReader(resource);
			// "pack/Configuration.xml" 읽어서 sqlSession 객체에 부여
			sqlSession = new SqlSessionFactoryBuilder().build(reader);
			reader.close();
		} catch (Exception e) {
			System.out.println("SqlMapConfig 오류 : " + e);
		}
	}

	public static SqlSessionFactory getSqlSession() { // static이니 new 키워드를 안쓴다. 
		return sqlSession;
	}
}

sqlSession 객체는 SqlSessionFactory에 의해서 생성된다.

이 클래스 파일에서는 앞에 Configuration.xml 설정 파일을 불러오고 설정 정보를 가져온다.

Reader라는 객체를 통해 불러온 설정파일을 읽고, sqlSession 객체에 담아둔다.

📖 ServiceDao

public class ServiceDao {
	private SqlSessionFactory factory = SqlMapConfig.getSqlSession();
    // 데이터베이스에 저장되어 있는 복수개의 데이터값을 담기 위해  List사용
	public List<SangpumDto> selectAll() throws Exception {
	// SqlSession를 생성하기 위해 SqlSessionFactory를 사용한다. 
    // 세션을 한번 생성하면 매핑구문을 실행하거나 커밋 또는 롤백을 하기 위해 세션을 사용할수 있다.
		SqlSession sqlSession = factory.openSession(); // 세션(SQL 매핑 처리(단위) 열기
		// select은 메서드 이름이다. DataMapper.xml의 id를 호출
		List<SangpumDto> list = sqlSession.selectList("selectDataAll");
		sqlSession.close();
		return list;
	}
}

📖 Main.java

public class Main {
	public static void main(String[] args) {
		ServiceDao dao = new ServiceDao();		
		try {
        	System.out.println("전체 자료 읽기");
			List<SangpumDto> list = dao.selectAll();
			for(SangpumDto s:list) {
				System.out.println(s.getCode() + " " + s.getSang() + " " + 
                s.getSu() + " " + s.getDan());
			}
        } catch (Exception e) {
			// TODO: handle exception
		}
    }
}

그림으로 표현하자면 다음과 같다.

profile
백엔드 개발자 유광진 입니다.

1개의 댓글

comment-user-thumbnail
2023년 9월 3일

mybatis에 대한 글 잘 읽고 갑니다~

답글 달기