본문 바로가기

프로그래밍/JAVA & SPRING

spring 5강 Oracle과 mybatis 연동 실습(회원 목록,등록,수정,삭제)

반응형

라. 회원정보관리 예제

1) 회원관리의 전체적인 구조

Controller

  MemberController.java

 

Service

  MemberService.java 인터페이즈

  MemberServiceImpl.java 구현클래스

 

Model

  MemberDAO.java 인터페이스

  MemberDAOImpl.java 구현클래스

  MemberDTO.java

  memberMapper.xml sql매퍼

 

View

  member_list.jsp

  write.jsp

  view.jsp

 

2) member 테이블 (오라클 접속)

spring 계정에서

create table member (
userid varchar2(50) not null primary key,
password varchar2(50) not null,
name varchar2(50) not null,
email varchar2(50),
join_date date default sysdate
)

 

insert into member (userid, password, name, email) values

('kim', '1234', '홍길동', kim@gmail.com'">'kim@gmail.com');

 

select * from member;

 

commit;

 

클래스를 코딩할 때 순서는

1. MemberDTO

2. MemberDAO.java

3. MemberDAOImpl.java

스프링에서는 객체관리를 맞겨버리는 것이 편하다.

그래서 @Repository를 붙여준다.

현재 클래스가 서버가 올라올때 이 클래스를 메모리에 올려준다.

외부에서 new하지 않고 Inject 하면 된다.

 

먼저 memberList를 불러오는 것만 구현해본다.

Logger 설정

@Inject SqlSession sqlSession; 설정

sql mapper에 작성된 sql 코드가 실행됨 (auto commit & close)

sqlSession.selectList("member.memberList");

 

@Inject SqlSession sqlSession; 

sqlSession 객체를 개발자가 직접 생성하지 않고 스프링에서 연결시켜 줌

SqlSession을 우리가 만든게 아니라 스프링프레임워크에서 만들어 놓은 객체를 연결해서 쓴다.

@Inject : 의존관계를 주입: MemberDAOImpl클래스는 mybatis에서 제공하는 sqlSession에 종속 되어 있다.

sqlSession은 언제 만들어졌을까?

root-context.xml에서

sqlSession이라는 빈의 id가 있는데 이 빈이 우리가 inject한 sqlSession이다.

 

<!-- SqlSession 객체 주입 -->
 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"
  destroy-method="clearCache">
  <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
 </bean>

 

 

sqlSession의 타입은 SqlSessionTemplate이므로

SqlSessionTemplate을 이용해서 SqlSession을 만든다.

우리가 SqlSessionTemplate을 이용해서 SqlSession을 만들어주는 코딩을 했어야 하는데

스프링이 올라올때 올라오기 때문에 바로 쓸 수 있다.

 

복잡한 코드를 쓰지 않고 @Inject SqlSession sqlSession; 이렇게 하면 mybatis를 호출하는 준비가 되는 것이다.

 

destroy-method="clearCache"

session을 close(), commit()을 할 필요가 없다.

 

다음은 매퍼를 작성한다.

 

4. mybatis 설정

memberMapper.xml을 작성

 <select id="memberList" 

     resultType="com.example.spring01.model.dto.MemberDTO"> 
 </select>

resultType 의 값이 길때 줄일 수 있다.

mybatis-config.xml에서 아래와 같이 alias를 설정하고

<typeAlias type="com.example.spring01.model.dto.MemberDTO" alias="memberDto"/>

 

 

<select id="memberList"
  resultType="memberDto">
   select * from member order by name
</select>

 

 

이렇게 하면 모델쪽 작업이 끝났다

컨트롤 - 서비스 - 페이지 만드는 잡업이 남았다.

서비스는 dao와 비슷하다. 구분을 짓기 모호하다.

서비스단이 있으면 코드가 약간 달라딘다. 서비스단은 필수는 아니다.

서비스에서 dao를 호출하는 방식으로 간다.

MemberService, MemberServiceImpl을 만든다.

여기서 컨트롤러, 모델, 서비스는 우리가 관리를 안할 거다.

가져다 쓰기만 한다. 필수적으로 어노테이션을 붙여준다.

 

MemberServiceImpl.java

@Inject MemberDAO memberDao;

어노테이션을 붙이면 서버가 올라오면서 @이 붙은 객체를 메모리에 올린다.

그리고 그 주소값을 memberDao에게 알려주기 때문에 에러가 발생하지 않는다.

 

MemberController.java

컨트롤러를 만들고 서비스를 호출한다.

서비스는 dao를 호출하고 dao는 mybatis의 매퍼를 호출한다.

컨트롤러는 결과를 받으면 jsp페이지로 넘겨서 출력시킨다.

 

구성

서비스를 주입받고

회원리스트, 회원등록폼, 회원등록,

@Inject MemberService memberService;

@RequestMapping(value="member/list.do")
 public String memberList(Model model) { ... }

 

@RequestMapping(value="member/write.do")
 public String write() { ... }

 

@RequestMapping(value="member/insert.do")
 public String insert(@ModelAttribute MemberDTO dto) { ... }

 

회원등록 폼 컨트롤러를 만들고

mapper를 작성하면서 반대로 올라오자.

- mapper 작성후 dao를 작성한다.

- dao에서 insertMember()메소드에서

sqlSession.insert() 호출하면서 매퍼정보와 dto를 넣어주면 된다.

 

- 서비스로 가서 dao를 이용해서 관련 메소드.insertMember()를 호출한다.

- 컨트롤러에서 등록메소드.insert()를 만든다.