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 선택


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
























반응형
반응형

안녕하세요...

오늘은 ASM으로 설치된 ORACLE DBMS 테이블스페이스 관리하는 방법에 대해 알아보겠습니다.

데이터파일 RESIZE는 기존 파일시스템 관리 방식과 동일합니다.

1. DATAFILE RESIZE

SELECT FILE_NAME, BYTES/1024/1024/1024||'GB' FROM DBA_DATA_FILES X 

WHERE TABLESPACE_NAME = 'SYSTEM' ORDER BY FILE_NAME;

ALTER DATABASE DATAFILE '+DATA/EPSDB/system01.dbf' RESIZE 3G;

테이블스페이스의 데이터파일 추가 방식이 약간 변경되었습니다.

DATAFILE 명령어 이후에 '+DATA'만 명시해주시면 DATAFILE이 자동 추가됩니다. 이름도 자동추가됩니다.

2. DATAFILE ADD


SELECT FILE_NAME, BYTES/1024/1024/1024||'GB' FROM DBA_DATA_FILES X 

WHERE TABLESPACE_NAME = 'TS_STAT' ORDER BY FILE_NAME;

ALTER TABLESPACE TS_STAT ADD DATAFILE '+DATA' SIZE 30G;

3. ASM 용량확인

반응형
반응형

요즘 DBA에 일이 몰리고 있다.신기술도 배워야한다.
전체 속에서 패턴을 찾고 기계학습에 쓰려면 하둡에,소셜미디어 같은 문서는 NoSQL에 담는 식으로 데이터를 분할 저장할 수 있는 기술에
성숙했다고 한다.
필자의 회사에서도 Oracle BDA, KT NEXR NDAP 등을 사용하고 있다.

'빅데이터 플랫폼 신기술 + 데이터아키텍트'등의 역할을 DBA에 추가적으로 원하고 있는 것 같다.
하둡, NoSQL, 스파크, MapReduced, MySQL 등을 데이터 특성에 맞게 취사선택할 정도로 스킬셋을 확보해야 할 듯 하다.

기존의 ORACLE, MS-SQL DBA에 역할에 추가적인 Needs가 추가되는 것이 요즘 추세인 듯 하다.

한 마디로, 배우고 할 일이 많아진다는 것을 의미하는 것 같다.

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

NoSQL이나 하둡과 같은 비관계형 데이터 관리 기술의 향후 성장과 관련, DBA가 이에 대한 플랫폼까지 담당하게 될 것으로 예측됐다. 하둡 또는 NoSQL을 운영하는 응답자 중 약 3분의 2가 이러한 기술을 관리하고 있다고 답했으며, 하둡과 NoSQL을 모두 도입한 기업 중 DBA가 비관계형 기술을 관리하는 업무 시간은 전체 시간의 72%에 달했다.

https://www.zdnet.co.kr/view/?no=20180814122734
http://www.digitaltoday.co.kr/news/articleView.html?idxno=67836
http://www.cctvnews.co.kr/news/articleView.html?idxno=42962
https://www.oracle.com/assets/changing-role-of-dba-4255708-ko.pdf

반응형
반응형

1. Oracle Server
오라클 서버는 information management에 종합적인 접근이 가능하도록 해주는 database 관리 시스템이다.
오라클 서버는 Oracle instance와 Oracle database로 구성된다.

2. Oracle Instance
오라클 인스턴스는 오라클 데이타 베이스에 접근하는 한 수단이다.
항상 오직 한 데이터 베이스에만 열려 있고 사용이 가능하다.
오라클 인스턴스는 메모리와 background process structure들로 구성된다.

3. Oracle Database
오라클 데이타베이스는 unit으로 다루어 지는 데이타들의 집합이다.
오라클 데이타베이스는 3가지 파일 타입으로 구성된다. 
오라클 데이타베이스는 아래와 같이 3가지 타입을 가진다.
1) Data files
2) Control files
3) Redo Log files 

4. Physical Structure
Physical structure는 아래와 같이 3가지 파일 타입을 가진다.
1) Data files
데이타 파일은 database 내에서 실제적인 data를 가지고 있다.
2) Control files
컨트롤파일은 database integrity를 검증하고 유지하는데 필요로하는 정보를 가지고 있다.
예를 들면, Database name, Time stampe of database creation, names and locations of data files and
online redo log files 등 기타 등등 여러가지를 가지고 있다.
3) Online redo log files
오라인 리두 로그 파일은
failure의 경우에 data의 복구가 가능하도록 database에 change가 가능한 record를 가지고 있다.

5. Memory Structure
오라클의 memory structure는 아래와 같은 두 가지 memory area로 구성된다.
1) System Global Area(SGA)
It is allocated at instance start up. And it is a fundamental component of an Oracle instance.
2) Program Global Area(PGA)
It is allocated when the server process is started.(It is equal to 'when a session is created)

반응형
반응형


 Oracle 홈페이지에서 Oracle 10g를 다운로드 받아 설치하였다면 다음은 Database Configuration Assistant를 실행해야 한다.


Database 객체를 만들어야 한다.

 그 다음에는 예제 소스를 실행해야 한다. 예제 소스의 실행 방법은 다음과 같다.
@ C:\oracle\product\10.2.0\db_1\odp.net\samples\DataSet\RelationalData\setup\Demobld.sql

예제 테이블을 만들고 그것을 가지고 공부를 할 수 있다. 대부분 예제 테이블을 기준으로 교재들이 구성되었기 때문에 예제 테이블을 만들고 공부를 해야 한다. 위는 @ 에 Demobld.sql 경로를 추가해 준 것이다. 위의 '@ 경로'를 sqlplus에 접속하여 실행하면 예제 테이블이 만들어 진다.

 처음 Database Configuration Assistant를 실행하고 sql*plus 로 접속하여 DML을 하면 잘 작동한다. 그러나 컴퓨터를 다시 부팅하면 실행이 안된다. 그것은 DB가 shutdown 된 상태이기 때문이다.


ORA-01034: ORACLE not available
ORA-27101: shared memory realm deos not exist

 DB를 startup 시켜 주어야 한다.

cmd 창에서 sqlplus /nolong 혹은 sqlplus "/as sysdba"로 접속을 한다.
 그 뒤에 SQL> startup 한 뒤에 다시 원하는 user로 접속을 시도한다.
SQL> connect scott/tiger

 

한 가지 문제점이 발생할 수도 있다.
select * from emp; 를 했는데, 아무 값이 나오지 않을 수도 있다.

그것은 현재 윈도우의 날짜가 한글 형식으로 되어 있기 때문이다. 그래서 오라클 10g도 날짜가 한글형식으로 되어 있기 때문에, 만약,

INSERT INTO EMP VALUES
        (7369, 'SMITH',  'CLERK',     7902,
        TO_DATE('17-DEC-1980', 'DD-MON-YYYY'),  800, NULL, 20);

를 한다면 Error가 발생할 수도 있다. 이것은 3가지 방법으로 해결할 수 있다.

1. NLS_DATE_FORMAT 변경
SQL> select sysdate from dual;
SQL> alter session set nls_date_format ='DD-MON-YY';
SQL> select sysdate from dual;

2. 시스템 언어 변경
SQL> alter session set nls_language = 'AMERICAN';
SQL> select sysdate from dual;

3. 아예 입력 구문을 바꾸기
SQL> alter session set nls_date_format = 'DD-MON-YY';
SQL> INSERT INTO EMP VALUES
        (7369, 'SMITH',  'CLERK',     7902,
        '17-12월-80',  800, NULL, 20);

오늘 처음으로 혼자 공부를 해보았는데, 하루에 1시간 아니 30분씩이라도 꾸준히 공부해야 할 것 같다.

퇴근 하고 나서 앞으로 DB 공부를 해야 할 것 같다.

반응형