[2023.11.29] 개발자 교육 48일 차 : 강의-오라클 실습 [구디 아카데미]

DaramGee·2023년 11월 29일
0

오늘 정리

MyBatis는?? 간단하게는 자바에서 DB를 쉽게 다룰 수 있도록 도와주는 오픈소스 프레임워크이다!!

무슨 장점이 있나?? sql쿼리를 자바에서 직접 작성할 수도 있고, 가져올 수도 있다. SQL쿼리와 프로그래밍 코드를 분리하여 유지보수가 쉽다. 기존 JDBC 연동보다 쉽다.(고 한다..)😊

강의 내용

[프로시저 실습-1)전체 학습 점수계산]

  • 어떤 컬럼, 정보가 출력되어야 하나?

어제가 학생 한 명에 대한 점수계산의 프로시저였다면, 오늘은 전체 학생들에 대한 정답, 오답을 한 번에 계산하는 프로시저 만들기.

키워드 : 커서(전부 다), sum&decode&group by(로우-컬럼 다른 것 정리하며 출력), fetch(건이 아닌 행 단위)

CREATE OR REPLACE procedure SCOTT.proc_account2
is
    vexam_no varchar2(10);
--수험생이 입력한 1번 답안
    u1 number(1):=0;
--수험생이 입력한 2번 답안    
    u2 number(1):=0;
--수험생이 입력한 3번 답안    
    u3 number(1):=0;
--수험생이 입력한 4번 답안    
    u4 number(1):=0;
    --1번 정답
    d1 number(1):=0;
    --2번 정답
    d2 number(1):=0;
    --3번 정답  
    d3 number(1):=0;
    --4번 정답
    d4 number(1):=0;
--수험생이 맞춘 정답 수를 담음    
    r1 number(3):=0;
--수험생이 틀린 수를 담음        
    w1 number(3):=0;
    cursor paper_cur is
    select exam_no, dap1, dap2, dap3, dap4 from  exam_paper;
begin
    SELECT 
                  min(decode(d_no,1,dap))
               ,  min(decode(d_no,2,dap))
               ,  min(decode(d_no,3,dap))
               ,  min(decode(d_no,4,dap)) 
               INTO d1, d2, d3, d4
       FROM sw_design
    GROUP BY ceil(d_no/4);
    open paper_cur;
    --3명 수험생 채점 진행
    loop
        fetch  paper_cur into vexam_no, u1,u2,u3,u4;
        --무한루프에 대한 방어 코드 작성하기
        exit when paper_cur%notfound;--학생수만큼 반복된다 - 3바퀴를 돈다
        if u1 = d1 then
            r1:=r1+1;
        else
            w1:=w1+1;
        end if; 
        if u2 = d2 then
            r1:=r1+1;
        else
            w1:=w1+1;
        end if;    
        if u3 = d3 then
            r1:=r1+1;
        else
            w1:=w1+1;
        end if;    
        if u4 = d4 then
            r1:=r1+1;
        else
            w1:=w1+1;
        end if;   
        update exam_paper
              set right_answer = r1,
                     wrong_answer = w1
        where exam_no = vexam_no;     
        commit;
        r1:=0;
        w1:=0;                                   
    end loop;
    close paper_cur;
end;
/

exec proc_account2; --실행결과 확인 


[프로시저 실습-2)로그인 프로시저]

CREATE OR REPLACE PROCEDURE SCOTT.proc_login1(p_id IN varchar2, p_pw IN varchar2, r_msg OUT varchar2)
IS
    status number(2):=7;
BEGIN
    --1이면 아이디와 비번이 모두 일치, -1이면 아이디가 존재하지 않음. 0이면 비번이 틀림
    --아이디가 존재하면 0반환, 비번도 일치하면 1을 반환 
    SELECT nvl((SELECT m_id FROM MEMBER1 WHERE m_id=p_id),'-1') INTO status 
        FROM dual;
    IF status = -1 THEN 
        r_msg := '아이디가 존재하지 않습니다.';  
    ELSE
        SELECT nvl((SELECT m_name FROM MEMBER1 
                      WHERE m_id=p_id
                      AND m_pw = p_pw),'비번이 틀립니다.') INTO r_msg 
            FROM dual;
    END IF; 
END;
/

[MyBatis]

  • sql 제어 소스? (SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크)

  • 간단하게 무엇인가?? 간단하게는 자바에서 JDBC를 통해 DB를 쉽게 다룰 수 있도록 SQL문을 Map 구조로 저장하여 사용하는 오픈소스 프레임워크이다!!

  • 무슨 장점이 있나?? sql쿼리를 자바에서 직접 작성할 수도 있고, 가져올 수도 있다. SQL쿼리와 프로그래밍 코드를 분리하여 유지보수가 쉽다. 기존 JDBC 연동보다 쉽다.(고 한다..)

    • 매퍼 SML 파일은 SQL 명령어들이 저장되는 파일을 말한다.
    • 저장된 매퍼 파일들은 유일한 id를 등록해야 한다.
  • 시작하기

  1. https://mvnrepository.com/artifact/org.mybatis/mybatis
  2. ->3.5.9 jar 다운로드
  3. 프로젝트 폴더 경로에 압축해제 (D:\workspace_web\web231027\src\main\webapp\WEB-INF\lib)
  4. 프로젝트에서 빌드패스(class path)

[MyBatis 설정]

  • 자바 & 오라클 프로시저, 트리거 연동
  • 폴더구성

  • 작성 코드
    //test.xml - > SQL과 객체 매핑을 설정하는 XML 파일(DB에 있는 SQL문에 id를 부여하여 매핑) 
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
    <mapper namespace="com.mybatis.mapper.TestMapper"> 
    <resultMap id="empVO" type="com.vo.EmpVO"/>
    <select id="proc_empcursor" parameterType="java.util.Map" statementType="CALLABLE">
    	{  call proc_empcursor(#{key, jdbcType=CURSOR, mode=OUT, javaType=java.sql.ResultSet, resultMap=empVO})}
    </select>
     <select id="currentTime" parameterType="string" resultType="string"> 
    	SELECT to_char(sysdate, 'YYYY-MM-DD') FROM dual
     </select> 
    </mapper>
    //MapperConfig.xml - > DB의 접속 정보 또는 Mapping 파일의 경로, alias 등을 설정하는 XML 파일
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
      	<environments default="development">
    		<environment id="development">
    			<transactionManager type="JDBC" />
    			<dataSource type="UNPOOLED">
    				<property name="driver" value="oracle.jdbc.driver.OracleDriver" /> 
    				<!-- <property name="driver" value="com.p6spy.engine.spy.P6SpyDriver"/>  -->
    				<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl11" />
    				<property name="username" value="오라클 id" />
    				<property name="password" value="오라클 비밀번호" />
    			</dataSource>
    		</environment>
    	</environments> 
    	<mappers>
    		<mapper resource="com/mybatis/mapper/test.xml" />
    	</mappers>
    </configuration>

[리액트]

  • 리액트, JSP 뭐지 대체??? jsp는??
JSPReact
차이HTML 내 자바코드를 삽입, 페이지 단위 처리Java Script로 구현, 변경된 data만 가져옴. 빠른 성능, 조회항목 가변처리 등 동적처리 가능
렌더링서버 사이드 렌더링(서버에서 완전한 HTML 작성)클라이언트 사이드 렌더링(서버는 API만 제공, 응답결과 조합해서 HTML 동적 만듦)
  • 사용 예시
    • index.js 의 해당 <> 수정 시 앱을 지정할 수 있고, 자동 랜더링됨.

$ npm i react-router-dom -D 

강의 마무리

  • 12월부터 강의
    • 큰 틀 : 서블릿(자바)과 JSP(html + css + javascript + java)
    • UI 부분 : nodejs 기반 화면 솔루션, js 기반 화면 솔루션, others 솔루션(xml 기반 화면 그리기)

0개의 댓글