MyBatis는?? 간단하게는 자바에서 DB를 쉽게 다룰 수 있도록 도와주는 오픈소스 프레임워크이다!!
무슨 장점이 있나?? sql쿼리를 자바에서 직접 작성할 수도 있고, 가져올 수도 있다. SQL쿼리와 프로그래밍 코드를 분리하여 유지보수가 쉽다. 기존 JDBC 연동보다 쉽다.(고 한다..)😊
어제가 학생 한 명에 대한 점수계산의 프로시저였다면, 오늘은 전체 학생들에 대한 정답, 오답을 한 번에 계산하는 프로시저 만들기.
키워드 : 커서(전부 다), 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; --실행결과 확인
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;
/
sql 제어 소스? (SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크)
간단하게 무엇인가?? 간단하게는 자바에서 JDBC를 통해 DB를 쉽게 다룰 수 있도록 SQL문을 Map 구조로 저장하여 사용하는 오픈소스 프레임워크이다!!
무슨 장점이 있나?? sql쿼리를 자바에서 직접 작성할 수도 있고, 가져올 수도 있다. SQL쿼리와 프로그래밍 코드를 분리하여 유지보수가 쉽다. 기존 JDBC 연동보다 쉽다.(고 한다..)
시작하기
//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 | React | |
---|---|---|
차이 | HTML 내 자바코드를 삽입, 페이지 단위 처리 | Java Script로 구현, 변경된 data만 가져옴. 빠른 성능, 조회항목 가변처리 등 동적처리 가능 |
렌더링 | 서버 사이드 렌더링(서버에서 완전한 HTML 작성) | 클라이언트 사이드 렌더링(서버는 API만 제공, 응답결과 조합해서 HTML 동적 만듦) |
$ npm i react-router-dom -D