티스토리 뷰
처음 하는 스프링(Spring), MariaDB와 mybatis에 이어서.
천천히 뜯어보기, 첫 번째
1. mybatis와 mapper
이전 글을 통해서 mybatis가 대략적으로 어떤 느낌의 역할을 하는지 살펴봤었다.
근사한 단어를 사용하면 이해하기엔 더욱 어려워지니깐 처음엔 쉽게 쉽게 이해를 해보자.
mybatis를 한마디로 SQL, 프로시저 등에 이름을 지어준다고 생각하자.
왜 사용하는지, 어떻게 편리한지 간단히 예를 들어보도록 하겠다.
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 | Connection conn = DriverManager.getConnection("jdbc:mariadb://localhost:3306/exampleDB", "id", "password"); String query = "select age, product, price from Customer_Table where product = '아메리카노' and age > 19"; PreparedStatement psmt = conn.prepareStatement(query); ResultSet rs = psmt.executeQuery(); while(rs.next()) { int i=1; String age = rs.getString(i++); String product = rs.getString(i++); String price = rs.getString(i++); ... } rs.close(); stmt.close(); conn.close(); | cs |
가령 위와 같이 jdbc를 이용해서 DB를 조회하는 코드가 있다고 하자.
DB 연결부터 쿼리 작성 및 실행, 결과 처리까지 여러 역할이 하나의 코드에 혼재되어 있다.
간단한 예제에서는 문제가 없을지 몰라도, 프로그램의 규모가 커진다면 자칫 DB의 연결 정보나 쿼리를 수정하려고 할때 머리가 아파올 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <mapper namespace="cafe"> <select id="selectCustomer" resultType="java.lang.String"> select age, product, price from Customer_Table where product = '아메리카노' and age > 19 </select> </mapper> | cs |
여타 다른 객체지향 언어의 장점과 마찬가지로, mybatis를 통해 얻을 수 있는 장점도 비슷하다.
각자의 역할을 분리해서 관리를 하는 것처럼, DB 연결 설정, 쿼리, 결과 처리 등 각각의 부분을 분리하여 처리하기 쉽도록 도와주는 프레임워크다.
위의 코드는 그중 쿼리 부분을 mapper를 통해 분리해낸 모습이다.
이렇게 되면 데이터를 처리하는 부분은 해당 쿼리의 이름을 호출하게 되고, 쿼리를 수정하더라도 호출하는 부분은 바뀌지 않기 때문에 개발이 한층 편리해진다.
이제 다시 이전 글의 예시로 돌아가보자.
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <mapper namespace="spl"> <select id="selectDisposableTable" resultType="java.lang.String"> select * from disposable_table </select> </mapper> | cs |
DB 연결에 관한 설정은 이미 살펴보았고, mapper에 대해서 한 줄 한 줄 살펴보도록 하자.
첫 번째 줄은 xml 파일이라는 선언과 인코딩 부분이므로 넘어가고, 두 번째 줄부터 살펴보도록 하자.
2~4번째 줄은 mapper DTD를 선언해주는 부분인데, 이 xml 파일은 mybatis의 mapper 역할을 수행할 것이라고 명시해주는 부분이다.
5번째 줄은 본격적으로 이 xml의 루트 태그인
7~10번째 줄은 실제 쿼리가 들어가는 부분으로, select, insert, update 등의 태그가 있다.
위의 예제에서는 단순 조회 쿼리로 간단한 select 문을 작성했고, 저 부분에 사용할 쿼리를 작성하면 된다.
이제 이렇게 만들어진 mapper는 namespace.id 형식으로 "spl.selectDisposableTable" 과같이 호출해줄 수 있다.
2. Dao
이제 다시 java 코드로 넘어와서, Dao의 역할에 대해서 살펴보자.
Dao(Data Access Object)의 역할은 이름 그대로 데이터에 접근하는 객체로써, DB에서 데이터를 가지고 오는 것까지의 역할만 수행한다.
(이후에, 가져온 데이터를 처리하는 것은 Service에서 하고, 처리된 데이터는 Controller를 통해서 적절한 View에 전달되는 것이 MVC 구조다.)
1 2 3 4 5 6 7 | package com.first.begin.sample.dao; public interface SampleDao { public String selectSampleData() throws Exception; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.first.begin.sample.dao; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository("sampleDao") public class SampleDaoImpl implements SampleDao { @Autowired protected SqlSessionTemplate sqlSession; @Override public String selectSampleData() throws Exception { return sqlSession.selectOne("spl.selectDisposableTable"); } } | cs |
스프링 개발에서 흔히 사용하는 인터페이스를 이용한 패턴이다.(이 부분은 나중에 다루도록 하겠다.)
Dao를 구현한 DaoImpl 클래스를 살펴보자.
7번째 줄에서 @Repository 애노테이션을 통해 Dao의 역할을 할 것이라고 선언해주었다.
10~11번째 줄에선 SqlSessionTemplate 빈을 사용할 수 있게 했고, DB와의 연결을 열고 닫아주는 역할을 간편하게 대신해줄 것이다.
13~16번째 줄은 실제 데이터를 가져오기 위한 코드로, 만들어준 sqlSession을 통해 mapper로 만든 쿼리의 이름을 호출해서 데이터를 가져오는 과정을 쉽고 단순하게 만들어주었다.
다음은 Service와 Controller에 대해 뜯어보도록 하자.
'dev > java' 카테고리의 다른 글
처음 하는 스프링 부트(Spring Boot), 프로젝트 생성하기 (0) | 2020.03.21 |
---|---|
처음 하는 스프링(Spring), Service와 Controller (2) | 2018.08.01 |
처음 하는 스프링(Spring), MariaDB와 mybatis (9) | 2018.06.27 |
처음 하는 스프링(Spring), context 설정 및 Controller (4) | 2018.06.22 |
처음 하는 스프링(Spring), pom.xml과 web.xml (2) | 2018.06.19 |
- Total
- Today
- Yesterday
- MVC
- MariaDB
- 스프링
- 커피프렌즈
- mybatis
- 변수
- 쏠편한환전
- 설정
- spring
- 꿈의숫자
- 스타벅스
- 화려해
- 두번가요
- 주식
- 맛집
- Tomcat
- 블라디보스톡
- 환전
- 세번가요
- 이클립스
- 자작냉우동
- 내돈돌려줘
- AFK아레나
- controller
- 교환코드
- Java
- 루블
- Nasdaq
- JMT
- sbux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |