spring Oracle과 mybatis 연동 실습

개발 및 관리/Java 2022. 1. 28. 16:55 posted by HighLighter
반응형


********************************
https://youtu.be/bmLFtrZVnRQ
https://youtu.be/aIAUFDaXAbE
https://youtu.be/y-AHuYVkt6E
https://youtu.be/bepiioZDUN8
https://youtu.be/aIAUFDaXAbE
https://youtu.be/IHdjBXlvNRY
https://youtu.be/Jc9UTY_lcrY
https://youtu.be/joL360SrrtI
https://youtu.be/WdgDWbLCOUg
https://youtu.be/eMuFWW6-8i0
https://youtu.be/c3tQnaNiOAQ
https://youtu.be/WYjVmIplNyI
https://youtu.be/k5g2kK1WQ34
https://youtu.be/lMWwaysjIkI
https://youtu.be/YYlXmkpjRrU
https://youtu.be/J8SEJ9lCDI8
https://youtu.be/3-pszozdXAM
https://youtu.be/K6T6tx9-qI4
https://youtu.be/CCqVKz6RRLs

Programming School

spring Oralce과 mybatis
spring Oracle과 mybatis 연동 실습(회원 목록,등록,수정,삭제)
oracle+mybatis
spring boot oracle mybatis

********************************



********************************
*회원관리의 전체적인 구조
********************************

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

----------------------------------------------------------------------------------------

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

insert into member(userid, passwd, name, email) values
('kim','1234','김철수','kim@gmail.com');

select * from member;
commit;

----------------------------------------------------------------------------------------

**********************************
*모델
*model.dt.MemberDTO.java
**********************************

import java.util.Date;

public class MemberDTO{
private String userid;
private String passwd;
private String name;
private String email;
private Date join_date;
}



**********************************
*DAO
*model.dao.MemberDAO.java
**********************************

package com.example.spring01.model.dao;

import java.util.List;

import com.example.spring01.model.dto.MemberDTO;

public interface MemberDAO{
public List<MemberDTO> memberList();
public void insertMember(MemberDTO vo);
public MemberDTO viewMember(String userid);
public void deleteMember(String userid);
public void updateMember(MemberDTO vo);

//비밀번호 체크
public boolean checkPw(String userid, String passwd);
}

----------------------------------------------------------------------------------------


**********************************
*MemberDAO
**********************************

package com.example.spring01.model.dao;

import java.util.List;

@Repository //서버가 startup될 때 이 클래스가 메모리에 자동으로 등록됨
public class MemberDAOImpl implements MemberDAO{
 //로깅 처리를 위한 객체 선언
 private static final Logger loggger = LoggerFactory.getLogger(MemberDAOImpl.class);

 //SqlSession 객체를 개발자가 직접 생겅하지 않고 스프링에서 연결시켜 줌 
 @Inject //의존관계 주입
 SqlSession sqlSession;

 @Override
 public List<MemberDTO> memberList() {
logger.info("memberList called");
// sql mapper에 작성된 sql 코드가 실행됨 (auto commit & close)
return sqlSession.selectList("member.memberList");
 }

 @Override
 public MemberDTO viewMember(String userid) {
  // MemberDTo dto = sqlSession.selectOne("member.viewMember", userid);
  // return dto;
  return sqlSession.selectOne("member.viewMember", userid);
 }

 @Override
 public void deleteMember(String userid) {
sqlSession.delete("member.deleteMember", userid);
 }

 @Override
 public void updateMember(MemberDTO vo) {
sqlSession.update("member.updateMember", vo);
 }


 @Override
 public boolean checkPw(String userid, String passwd) {
boolean result = false;
// mapper에 넘길 값이 2개 이상인 경우 map으로 묶오서 전달
Map<String, String> map = new HashMap<>();
map.put("userid", userid);
map.put("passwd", passwd);
int count = sqlSession.selectOne("member.checkPw", map);
// 리턴값이 1이면 true, 0이면 false
if(count==1) result = true;
return result;
 }



*****************************************************************************************************************************
*****************************************************************************************************************************


**********************************
*service.MemberService.java
*MemberService
**********************************

package com.example.spring01.services;

import java.util.List;

import com.example.spring01.model.dto.MemberDTO;

public interface MemberService{
public List<MemberDTO> memberList();
public void insertMember(MembmerDTO dto);
public MemberDTO viewMember(String userid);
public void deleteMember(String userid);
public void updateMember(MemberDTO dto);

// 비밀번호 체그
public boolean checkPw(String userid, String passwd);
}

----------------------------------------------------------------------------------------

package com.example.spring01.service;

import java.util.List;

@Service
public class MemberServiceImpl implements MemberService{

// MemberDAO memberDao = new MemberDAOImpl();
@Inject // 스프링 컨테이너가 만든 dao 객체가 연결됨 (의존관계 주입)
MemberDAO memberDao;

@Override
public MemberDTO viewMember(String userid) {
 return memberDao.viewMember(userid);
}

@Override
public boolean checkPw(String userid, String passwd) {
 return memberDao.checkPw(userid, passwd);
}

@Override
public void updateMember(MemberDTO dto) {
 memberDao.updateMember(dto);
}
}




----------------------------------------------------------------------------------------

*****************************************************************************************************************************
*****************************************************************************************************************************


컨트롤러 -> 서비스 -> DAO -> mybatis(mapper호출) -> jsp

**********************************
*MemberController
**********************************

package com.example.spring01.controller;

@Controller // 현재 클래스를 Controller Bean으로 등록함
public class MemberController{
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);

@Inject // MemberService 객체가 주입됨
MemberService memberService;
// MemberService memberService = new MemberServiceImpl();

@RequestMapping("member/list.do") // 사용자가 요청하는 주소
public String memberList(Model model) { 
 List<MemberDTO> list = memberService.memberList();
logger.info("회원 목록:" + list);
model.addAttribute("list", list); // 모델에 저장
return "member/member_list"; // 출력 페이지로 포워딩
}

@RequestMapping("member/write.do")
public String write() {  
 return "member/write";
}

// 폼에 입력한 데이터가 MemberDTO dto 변수에 저장됨
// request.getParameter 생략
@RequestMapping("member/insert.do")
public String insert(@ModelAttribute MemberDTO dto) {
            // public String insert(MemberDTO dto, HttpServletRequest request) {
 // String name = request.getParameter("name");
 memberService.insertMember(dto);  
 return "redirect:/member/list.do"; // 목록 갱신
}

// view.do?userid=kim 이라면
// @RequestParam String userid 변수에 kim이 저장됨
@RequestMapping("member/view.do")
public String view(@RequestParam String userid, Model model) {
 // System.out.println("클릭한 아이디:" + userid);
 // info, debug, warn, error
 // logger.info("클릭한 아이디:" + userid);

// 회원정보를 모델에 저장
model.addAttribute("dto", memberService.viewMember(userid));
// view.jsp로 포워딩
 return "member/view"; // view.jsp로 포워딩
}

@RequestMapping("member/update.do")
pblic String update(@ModelAttribute MemberDTO dto, Model model) {
 boolean result = memberService.checkPw(
dto.getUserid(), dto.getPasswd());
 logger.info("비밀번호 확인:"  + result);

if(result) { // 비밀번호가 맞으면
 memberService.updateMember(dto): // 레코드 수정
 return "redirect:/member/list.do"; // 목록으로 이동
} else { // 비밀번호가 틀리면
 MemberDTO dto2 = memberService.viewMember(dto.getUserid));
 dto2.setJoin_date(dto2.getJoin_date()); // 날짜가 지워지지 않도록
 model.addAttribute("dto", dto);
 model.addAttribute("message", "비밀번호가 일치하지 않습니다.");
 return "member/view"; // 수정 페이지로 되돌아감
}

@RequestMapping("member/delete.do")
public String delete(@RequestParam String userid, 
            @RequestParam String passwd, Model mode) {
 boolean result = memberService.checkPw(userid, passwd);
 if(resutl) {
memberService.deleteMember(userid);
return "redirect:/member/list.do";
} else {
 model.addAttribute("message", "비밀번호가 일치하지 않습니다.");
 model.addAttribute("dto", memberService.viewMember(userid));
 return "member/view"; }
      }




*redirect를 하지 않으면 forward가 됩니다. 주소가 안바뀝니다.

*변수명 일치해야 함
테이블필드명 = DTO = FORM

***********************************************
*설명내용
- @ModelAttribute : 폼의 전체 데이터, dto
- @RequestParam : 폼의 개별값
***********************************************


memberService.updateMember 
F3 -> 인터페이스, 바로 소스보기
F4 -> 계층구조보기 -> MemberServiceImpl 선택 -> updateMember 선택


*****************************************************************************************************************************
*****************************************************************************************************************************
























반응형