본문 바로가기
개발/Spring FW

maven없이 스프링(Spring) 프로젝트 만들기 (3) - 디비(DB, Database) 연동하기 #2

by Devsong26 2017. 11. 8.

스프링 디비 연동 포스팅은 3파트로 나뉩니다.

(1) DB 드라이버, ibatis, mybatis.jar 다운받기 및 셋팅

(2) DTO, DAO, mybatis 작업하기

(3) view 페이지 작업, Controller 작업하기

 

지금 보실 내용은 (2) DTO, DAO, mybatis 작업하기 입니다.

 

- DTO, DAO 생성하기

(1) DTO 클래스 생성하기

DTO란? Data Transfer Object의 약자로 DB처리(Insert, delete, ...)에 직접적으로 사용되는 데이터 객체입니다. 

 

src에 spring.home.dto 패키지를 생성 후 HomeDTO 클래스를 생성합니다.

 

생성 후 아래와 같이 코딩을 합니다.

 

dto의 모든 멤버는 private 접근지정자로 선언하고 setter와 getter메소드를 만듭니다. 

setter, getter메소드는 private 멤버를 외부에서 직접 접근할 수 없기 때문에 만드는 메소드입니다. 

 

(2) DAO 클래스 만들기

DAO란? Data Access Object의 약자로 데이터의 접근하는 Database에 접근하는 객체입니다. 

 

OOP에서는 여러 클래스의 공통 메소드가 있을 경우 인터페이스를 구현하여 메소드 prototype을 작성 후 클래스들이 인터페이스를 상속받아 메소드를 Override하여 사용합니다.  이것을 추상화의 원칙이라고 합니다. 

추상화의 원칙에 따라서 인터페이스를 생성 후 클래스를 만들겠습니다. 

 

src에 spring.home.dao패키지를 생성 후 HomeDAO 인터페이스를 생성합니다.

 

 

* 저는 디비에 간단하게 이름이랑 전화번호만 저장하는 메소드, 이름을 입력하여 전화번호를 가져오는 메소드를 만들겠습니다. 

 

아래와 같이 메소드 prototype을 정의합니다.

 

 

이제 같은 패키지 안에 HomeDAO를 구현하는 HomeDAOImpl 클래스를 생성합니다. 

(인터페이스 구현 클래스의 이름은 인터페이스Impl 형식으로 만듭니다.)

그리고 아래와 같이 코딩합니다. 

 

그럼 HomeMapper 클래스를 만들지 않았기 때문입니다. 이제 HomeMapper를 만들겠습니다. 

 

- HomeMapper 클래스 생성하기

생성하기 앞서 mybatis 사용법에 대해 알아보겠습니다. 

먼저, 오라클에서 사용되는 사용자 계정 정보를 저장할 properties 파일을 생성합니다. 

 

src 우클릭 -> New -> Other -> General을 클릭합니다.

 

그리고 File -> Next를 누릅니다. 

 

File 명을 "db.properties"라고 입력 후 Finish를 누릅니다. 

 

그러면 아래와 같이 보여집니다.

 

 

 

 

위와 같이 db.properties를 입력하면 되는데 username, password는 오라클에서 사용중이신 계정을 입력하시면 됩니다. 

driver는 디비 드라이버의 이름, url은 디비 드라이버의 위치를 입력합니다. 

 

아래와 같이 오라클에서는 테이블을 생성해야 합니다. 

 

create table home(
  num number,
  name varchar2(10),
  tel varchar2(15)
);

create sequence home_num_seq;

 

시퀀스는 num의 값을 자동으로 생성하기 위해 만듭니다. 

 

그 후 src 안에 SqlMapConfig.xml을 파일을 생성합니다. 

 

 

아래와 같이 코딩을 합니다. 

 

(1) Doctype을 정확하게 입력하셔야 코드에 에러가 발생하지 않습니다. 

(2) properties는 디비정보가 저장된 파일의 경로를 입력합니다. 

(3) typeAliases는 mabatis에서 클래스를 사용할 때는 클래스의 전체 경로를 입력해야 합니다. 

이 때 위와 같이 typeAlias(별칭)을 지정하면 경로를 입력하지 않고 homeDTO만 입력을 할 수 있습니다.

(4) environments는 환경설정을 하는 태그이며, 사용하는 JDBC와 driver등의 정보를 입력합니다. 

${}를 사용하여 db정보 파일의 변수명을 입력하면 적었던 정보가 입력됩니다. 

(username = temp로 입력했을 때 $을 코딩시 temp라는 값이 입력된다는 것입니다.)

(5) mappers는 사용할 mapper를 선언하는 태그입니다. 

 

이제 mapper.xml을 생성하는 과정을 보여드리겠습니다. 

src에 spring.home.mybatis 패키지를 생성하고, HomeMapper 클래스를 생성합니다. 

아래와 같이 코딩합니다.

 

static{}은 SqlMapConfig.xml에서 SqlSessionFactory 객체를 가져오는 영역입니다. 

getTel(), insertMember()에서 사용하는 SqlSession 클래스는 데이터베이스와 연동하여 작업을 하는 클래스입니다. 

SqlSession 변수는 insert(), delete(), update(), select(), selectOne()등의 메소드를 호출할 수 있으며, 매개변수의 문자열은 HomeMapper.xml의 id값을 의미합니다. 

두번째 매개변수는 요청 작업에 query에 입력되는 매개변수입니다. 

 

insert(), delete(), update() 등의 DB정보를 변경하는 query의 경우, 메소드 호출 이후 commit()을 호출해야 DB에 작업 결과가 저장됩니다. 

SqlSession 변수를 더 더이상 사용하지 않을 경우, close()메소드를 호출하여 SqlSession 변수 사용을 종료합니다. 

 

그리고 DB의 작업을 수행하는 xml파일인 HomeMapper.xml을 생성하겠습니다. 

 

Doctype은 SqlMapConfig.xml과 동일합니다. 

<mapper> 태그 안에 query 수행 태그를 적으면 되고, namespace를 위와 같이 지정합니다.

<select>, <insert> 태그에는 id값을 반드시 적어야 해당 태그 작업을 HomeMapper 클래스에서 사용할 수 있습니다.

parameterType은 query에 사용될 매개변수의 자료형을 적어주시면 되고 resultType은 query 처리 결과를 반환할 반환형을 적으면 됩니다.

 

<insert>, <delete>, <update>의 경우 반환형이 항상 int형이기 때문에 반환형을 적지 않습니다. 

 

 

 


더 많은 내용을 보시려면 아래를 참고하세요.


블로그의 다른 글

 

maven없이 스프링(Spring) 프로젝트 만들기 (3) - 디비(DB, Database) 연동하기 #3

스프링 디비 연동 포스팅은 3파트로 나뉩니다. (1) DB 드라이버, ibatis, mybatis.jar 다운받기 및 셋팅 (2) DTO, DAO, mybatis 작업하기 (3) view 페이지 작업, Controller 작업하기 지금 보실 내용은 (3) view..

developer-syubrofo.tistory.com

 

maven없이 스프링(Spring) 프로젝트 만들기 (4) - Ajax 설명

- Ajax란? Asynchronous Javascript + XML의 약자이며 비동기적 통신을 말합니다. HTML form 태그의 의해서 웹 브라우저가 웹 서버에 데이터를 요청하고 그 응답을 받을 경우 웹 페이지 화면 자체가 갱신이 됩

developer-syubrofo.tistory.com

 

Map - Hashtable 사용하는 방법

1. Hashtable이란? Map 인터페이스를 구현한 클래스입니다. 2. 특징 1) (key,value)쌍으로 데이터를 입력합니다. 2) key, value의 값은 null이 될 수 없습니다. 3) Hashtable 객체는 initial capacity와 load fa..

developer-syubrofo.tistory.com

 

Set - HashSet 사용하는 방법

- HashSet이란? Set인터페이스를 구현한 hash table입니다. - 특징 (1) 입력된 순서로 저장되지 않습니다. (2) element의 중복을 허용하지 않습니다. (3) null element를 허용합니다. (4) 동기화처리가 되지 않습.

developer-syubrofo.tistory.com

 

Set - LinkedHashSet 사용하는 방법

1. LinkedHashSet이란? Set인터페이스를 구현하고 Hash Set클래스를 상속받은 Linked List입니다. 2. 특징 - iteration 작업을 할 경우, Set에 삽입된 순서대로 접근합니다. - 데이터 중복을 허용하지 않으며, 중

developer-syubrofo.tistory.com