insert into emp02 (empno, ename, job, mgr, hiredate, sal, comm, deptno) values
(0, 'test', 'test', 0,null,0,0 ,0);
이렇게는 하나하나 넣어지는데
더미데이터 넣는 방법
create sequence ex_seq
increment by 1
start with 9091;
begin
for i in 1..3 loop
insert into emp02 (select max(empno) + 1 from emp02, ename, job, mgr, hiredate, sal, comm, deptno) values
(0, 'test', 'test',0 ,null ,0 ,0 ,0);
해당알터키를 지정해서 넣어야한다.
emp유효성 검사할때 이렇게 하나하나 지정해서 검사해야한다.
select count(*) from emp where empno = 1;
================================================================
[SW공학] 시스템 검증과 테스트를 중시하는 V 모델
V 모델은 폭포수 모델에 시스템 검증과 테스트 작업을 강조한 모델로 11개의 소프트웨어 테스팅 프로세스...
blog.naver.com
모듈설계 = 단위테스트(가 중요)
테스트 = qa가 하는일
대부분 큰회사 아니면 개발자가 함ㅠ
통합테스트=소프트웨어의 품질을 결정
v테스트 실무에서 매우중요!
설계=생각을 문서로 남기는것
junit으로 단위 테스트!
package edu.bit.ex.calculator;
//테스트
public class Calculator {
public int sum(int num1, int num2) {
return num1 + num2;
}
public int sub(int num1, int num2) {
return num1 - num2;
}
}
package edu.bit.ex.calculator;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
public class CalculatorTest {
@Autowired //객체주입
Calculator calculator;
@Test
public void testCalculator() {
assertNotNull(calculator);//null이기 때문에 빨간색
}
@Test
public void testSum() {
Calculator cal = new Calculator();
int result = cal.sum(10, 20);
assertEquals(30, result, 10);
System.out.println(result);
}
@Test
public void testSub() {
Calculator cal = new Calculator();
int result = cal.sub(10, 20);
assertEquals(-10, result);
}
}
----이런식으로 테스트하면된다.
문서에 반드시 test드리븐 형태로 개발한다는걸 꼭 나타내주기. 옆에 녹색창 보이는것도 꼭 보여주기
src/test/java에 log4j.xml과 log4j2.properties 파일을 넣어준다.
이제spring을 test해주기
[BoardMapperTest.java]
package edu.bit.ex.mapper;
import static org.junit.Assert.assertNotNull;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import edu.bit.board.mapper.BoardMapper;
import edu.bit.board.vo.BoardVO;
import lombok.Setter;
//import edu.bit.board.vo.BoardVO;
import lombok.extern.log4j.Log4j;
@RunWith(SpringRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardMapperTest {
/* @Setter(onMethod_ = @Autowired) */
@Setter(onMethod_ = @Autowired)
private BoardMapper boardMapper;
@Test
public void testBoardMapper() {
assertNotNull(boardMapper);
System.out.println("boardmapper 테스트");
}
@Test
public void testGetList() {
List<BoardVO> list = boardMapper.getList();
log.info(boardMapper);
for (BoardVO boardVO : list) {
log.info(boardVO.getbContent());
System.out.println("getlist 테스트");
}
}
/*
* @Test public void updateBoard() { int deptno = boardMapper.updateBoard(30); }
*/
}
package edu.bit.ex.database;
import static org.junit.Assert.assertNotNull;
import javax.inject.Inject;
import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import lombok.extern.log4j.Log4j;
//★★Spring을 테스트할땐 반드시 ioc컨테이너기반을 바탕으로 Test되어야 한다는 것을 생각하자.
//★★따라서 밑에 SptrinRunner이다.
@RunWith(SpringRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml") // 어디서 읽어들일건지
@Log4j
class ConnectionTest {
@Inject
DataSource dataSource;
@Test
public void testDataSource() {
log.info("나와라 뿅" + dataSource);
assertNotNull(dataSource);
}
}
왜인진모르겠지만 얜 아무반응이 없음....
========================================================================================================================================================
DB 모델링
[2장]데이터 모델링
안되면 엑셀켜서 하나하나해보기
자바에서 객체로 표현되는 것이 엔티티이다.
학생 = 엔티티 = 테이블
학번,주소,이름,생년월일 = emp에 12개 컬럼과 같다. = entity relationship = ER
복합 애트리뷰트의 대표적 예는 주소이다.
보유기술(하나의 애트리뷰트)에 두개 이상 요소들이 들어갈수있다.
예시)
학생 | ||
학번 | 이름 | 보유기술 |
1 | 홍길동 | 자바, c, 파이썬 |
이렇게 자바,c,파이썬 2개이상 들어간거에대해선 저 그림모양처럼 표현된다.
나이는 매년 달라지기때문에 계산해서 얻은 값이 어야한다. = 유도된 애트리뷰트
과목에는 섹션이 있다.
컴퓨터라는 과목이 있을때 섹션은 자바,c,파이썬 으로 나눠진다.
자바,c,파이썬에서도 또 섹션번호로 자바의정석, c언어, 등등으로 나뉘어진다.
과목이 사라지게되면 섹션도 사라진다.
그럴때 표현되는 것이 바로 도형 두번그리기이다.(테두리가 두번임. 종속되어있다는 뜻)
과목 | ||
번호 | 과목명 | 과목개요 |
1 | 컴퓨터공학 | |
- - - - - - - - -↓종속관계 - - - - - - | - - - - - - - - - - - - - - - - |
- - - - - - - - - - - - - - - - |
섹션 | ||
과목번호(foreign key) | 세션번호 | 세션이름 |
1 | 1 | 자바 |
1 | 2 | c언어 |
중요!!
학생테이블과 과목테이블 사이에 어떤 관계가 생기느냐.
학생이 과목을 등록(수강).
이때 관계를 표현하는 등록은 마름모이다.
카디널리티 비율 ==> 1:1 1:N M:N 관계
emp 하고 dept는 1:N관계이다
관계를 맺는것은 키를 가져오는것이다.
외래키(FK)를 가져오는곳이 자식. dept는 emp에있는 키를 가져오지않는다. 따라서 1:N관계
하지만
db상에서 M:N으로 표현되는게 있으면 절대! 안된다!!!!
나중에 반드시 1:N관계로 바꿔줘야한다.
======================================================================================================================================================
오늘의 문제
1.emp 에서 더미데이터 2000 개 넣어서 emp 테스트 하기.
--empno가 랜덤인 쿼리문
begin
for i in 1..2000 loop
insert into emp02 (empno, ename, job, mgr, hiredate, sal, comm, deptno) values
(ROUND(DBMS_RANDOM.VALUE(5000,9999),0), 'test', 'test',0 ,sysdate ,0 ,0 ,0);
end loop;
end;
commit;
--수정하고싶을때
delete from emp02 where job = 'test';
2. Junit를 통해서 랜덤으로 emp 더미 데이터에서 deptno 업데이트 하시오.
3. emp01테이블을 emp 에서 복사하여, pk ,fk 툴을 사용해도 좋고, alter 문으로 설정하여, emp01로 페이징 테스트 하기.
[alter문으로 설정]
Primary key
Primary Key 2개 설정
CREATE TABLE member (
mem_num INT NOT NULL AUTO_INCREMENT,
mem_id VARCHAR(20),
PRIMARY KEY (mem_num, mem_id));
기존 프라이머리 키를 삭제
alter table 테이블명 drop primary key;
새로운 프라이머리 키를 설정
alter table 테이블명 add primary key(컬럼명, 컬럼명, 컬럼명 ... );
alter table 테이블명 add primary key(컬럼1, 컬럼2, 컬럼3);
과 같이 프라이머리 키를 생성하면 프라이머리 키의 기준값이 [컬럼1컬럼2컬럼3] 으로 생성되는 것입니다. 모든 인덱싱은 오직 한가지의 값만 가지게 됩니다.
복합인덱싱은 복수개의 컬럼값이 연결된 값으로 인덱스를 생성합니다.
============================
Foreign key
테이블 생성시
Primary Key2개 잡기
CREATE TABLE Info
(
a bigint(20) unsigned NOT NULL,
bun char(16) NOT NULL,
provider tinyint NOT NULL default '0',
b int NOT NULL default '0',
PRIMARY KEY (a,b)
);
-- FOREIGN KEY 추가하는 방법 포함
-- FOREIGN KEY 를 추가할 때 주의사항 3가지
-- INNODB에서의 FOREIGN KEY는
-- 1.반드시 아버지와 자식은 INNODB 여야 한다.
-- 2.아들이 참조하는 키는 아버지가 가지고 있는 키의 자료형과 동일하게 사용해야 한다.
-- 3.아버지가 UNIQUE한 값을 갖는 키들만, 아들이 가져가서 참조할 수 있다.
Foreign key 설정
CREATE TABLE FriendAddInfo -- 친구 신청 정보
(
abc bigint(20) unsigned NOT NULL,
def bigint(20) unsigned NOT NULL,
FOREIGN KEY(abc) REFERENCES UserInfo(a) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY(def) REFERENCES UserInfo(a) ON UPDATE CASCADE ON DELETE CASCADE
);
ON UPDATE CASCADE, ON DELETE CASCADE는 참조한 원본 테이블이 UPDATE, DELETE의 이벤트가 발생하면 변경사항을 자동으로 반영한다.
===========================
[oracle 편집툴로 설정]
3. emp01테이블을 emp 에서 복사하여, pk ,fk 툴을 사용해도 좋고, alter 문으로 설정하여, emp01로 페이징 테스트 하기.
4.아래의 리스트 페이지 에서 Jquery 로 makeList() 함수를 완성하여, 페이지를 뿌리도록 하시오.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
function makeList() {
}//end
</script>
<script>
$(document).ready(function(){
makeList();
});
</script>
</head>
<body>
<table id="list-table" width="500" cellpadding="0" cellspacing="0" border="1">
</table>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
function makeList() {
var htmls="";
$("#list-table").html("");
$("<tr>" , {
html : "<td>" + "번호" + "</td>"+ // 컬럼명들
"<td>" + "이름" + "</td>"+
"<td>" + "제목" + "</td>"+
"<td>" + "날짜" + "</td>"+
"<td>" + "히트" + "</td>"
}).appendTo("#list-table") // 이것을 테이블에붙임
//왜?
//★★★위에는 웹브라우저에서 해석 따라서 그대로 보냄. 하지만 얘(c:,el($))는 서버쪽 언어이다.
//따라서 전부다 html로 다 다 바꿔준다.★★★
<c:forEach var="boardVO" items="${list}" >
htmls += '<tr>';
htmls += '<td>'+ '${boardVO.bId}' + '</td>';
htmls += '<td>'+ '${boardVO.bId}'+ '</td>';
htmls += '<td>';
<c:forEach begin="1" end="${boardVO.bIndent}">
htmls += '-';
</c:forEach>
htmls += '<a href="${pageContext.request.contextPath}/content_view?bId=' + '${boardVO.bIndent}' + '">' + '${boardVO.bTitle}' + '</a></td>';
htmls += '/<td>';
htmls += '${boardVO.bDate}';
htmls += '${boardVO.bDate}';
</c:forEach>
$("#list-table").append(htmls);
}//end getList()
</script>
<script>
$(document).ready(function(){
makeList();
});
</script>
</head>
<body>
<table id="list-table" width="500" cellpadding="0" cellspacing="0" border="1">
</table>
</body>
</html>
<!-- var htmls = "";
$("#list-table").html("");
$(
"<tr>",
{
html : "<td>" + "사원번호" + "</td>" + // 컬럼명들
"<td>" + "사원이름" + "</td>" + "<td>" + "사원직급" + "</td>"
+ "<td>" + "매니저" + "</td>" + "<td>" + "입사일"
+ "</td>" + "<td>" + "급여" + "</td>" + "<td>"
+ "커미션" + "</td>" + "<td>" + "부서" + "</td>"
}).appendTo("#list-table") // 이것을 테이블에붙임
//왜?
//★★★위에는 웹브라우저에서 해석 따라서 그대로 보냄. 하지만 얘(c:,el($))는 서버쪽 언어이다.
//따라서 전부다 html로 다 다 바꿔준다.★★★
<c:forEach var="empVO" items="${ list2}" >
htmls += '<tr>';
htmls += '<td>' + '${empVO.empno}' + '</td>';
htmls += '<td>' + '${empVO.ename}' + '</td>';
htmls += '<td>' + '${empVO.job}' + '</td>';
htmls += '<td>' + '${empVO.mgr}' + '</td>';
htmls += '<td>' + '${empVO.hiredate}' + '</td>';
htmls += '<td>' + '${empVO.sal}' + '</td>';
htmls += '<td>' + '${empVO.comm}' + '</td>';
htmls += '/<td>';
</c:forEach>
$("#list-table").append(htmls);
}//end getList()
</script>
'코딩 > 수업 정리' 카테고리의 다른 글
21.02.04 [052] Thu (0) | 2021.02.04 |
---|---|
21.02.03 [051] Wed (0) | 2021.02.03 |
21.02.01 [049] Mon (0) | 2021.02.01 |
21.01.29 [048] Fri (0) | 2021.01.29 |
21.01.28 [047] Thu (0) | 2021.01.28 |
댓글