본문 바로가기
코딩/수업 정리

21.02.02 [050] Tue

by 6^6 2021. 2. 2.
728x90
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;

 

 

 

 

================================================================

m.blog.naver.com/PostView.nhn?blogId=xcripts&logNo=70120808518&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[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드리븐 형태로 개발한다는걸 꼭 나타내주기. 옆에 녹색창 보이는것도 꼭 보여주기

 

log 어디다가 넣는지 다시 확인

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);
	}
}

왜인진모르겠지만 얜 아무반응이 없음....

 

 

JUNIT사용법.pptx
0.05MB

 

 

 

 

 

 

========================================================================================================================================================

 

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>
728x90

'코딩 > 수업 정리' 카테고리의 다른 글

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

댓글