라. 회원정보관리 예제
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()를 만든다.
'프로그래밍 > JAVA & SPRING' 카테고리의 다른 글
[박재성] slipp3 web.xml 설정 (0) | 2020.06.07 |
---|---|
[박재성] slipp3 pom.xml 설정 (0) | 2020.06.07 |
[기타] [빵형] 코드로 배우는 스프링 (0) | 2020.06.07 |
[LifeSoft] spring 4강 Controller와 View의 연결 방법 (0) | 2020.06.07 |
[LifeSoft] spring 1강 Spring Tool Suite 4 설치 및 테스트 (0) | 2020.06.07 |