스프링 메모들

스프링 메모들

1

VO: 메모리할당 하지 않는다.

DAO: @리포지토리

모델: @컨트롤러

리퀘스트 매핑

결합성 약하게: 클래스 하나 수정하면 다른 하나에 영향
응집성 강하게: 같은 기능의 메소드를 모아줌

스프링=경량 컨테이너: 관계도가 1개(단순함)

프로시저 : 반복수행(페이지 나누기)
           조건분기
          

Annotation: 사용자 정의 클래스
XML : 이미 만들어져있는 클래스(어노테이션을 달 수가 없으므로 beans 내의 bean사용)

2

client요청(ex)클릭 -> jsp -> 디스패처 서블릿(doget or dopost) —> 모델 ->
                                1. 해당 모델 클래스 찾는다
                                2. 메소드 수행 handlerRequest
      3. 모델 <===> DAO
    4. request에 결과값 싣는다
       ex) request.setAttribute()
                                5. 디스패처 서블릿
                                6. jsp: forward() 되면서 실행

config.xml : conn을 가짐(겟 커넥션과 디스 커넥션)
board-mapper : ps를 가짐(프리페어 스테이트먼트 = SQL문장)

board-mapper  xml에서, parameterType=”int” 은 set int
                       #{start}는 get(“start”)와 같음
      

private static SqlSessionFactory ssf;//ssf이 모든 정보를 갖고 있다. 파싱된 내용을 여기에 넣어줘야 한다.
 static//스태틱 블록을 쓰자.(메모리 할당하지 않는다)
 {
  try{
   Reader reader=Resources.getResourceAsReader(“Config.xml”);//파싱하자 마자 커넥션이 만들어질거다.
   //xml을 읽었음
   ssf=new SqlSessionFactoryBuilder().build(reader);
   /*
    *
    *    getConnection(),disConnection()
    *              저장(Map)
    *    ===============================
    *        id           sql
    *    ===============================
    *    boardAllData   SELECT~~~
    */
  }catch(Exception ex){System.out.println(“BoardReplyDAO파일-ssf static:”+ex.getMessage());}
 }

 public static List<BoardVO> boardAllData(Map map){
  List<BoardVO> list=new ArrayList<BoardVO>();
  
  SqlSession session=null;
  
  try{
   session=ssf.openSession();//이제 세션이 셀렉트부터 conn까지 다 가지고있다.
   /////session.commit();
   
   
   // 셀렉트 100개를 날리고 마지막에 한 번 커밋 날리는것. 이것을 트랜잭션이라고 한다.
   /*
    * 오픈세션은 두가지가 있다
    * openSession()              => 디폴트는 폴스다. autoCommit(false)
    * openSession(boolean b)         0
    */
   list=session.selectList(“boardAllData”,map);
   
  }catch(Exception ex){
   
   /////session.rollback();
   System.out.println(“BoardReplyDAO파일-boardAllData:”+ex.getMessage());}
  finally{
   if(session!=null){
    session.close();//세션이 ps,conn다 가지고 있음.
   }
  }
  return list;
  //return ssf.openSession().selectList(“boardAllData”,map);

3

프로퍼티=> 셋 메소드를 의미

타입=> 클래스를 의미

4

자바연결(JDBC) TCP연결 : IP와 Port필요 (ip는 로컬호스트, port는 1521)
JDBC 라이브러리: 자바 데이터베이스 커넥티드.

1. 드라이버 설치 -> class.forName(OracleDriver)

2. 연결 => Connection (Socket포함)

3. SQL 문장 보내고/받기=> statement (BufferdReader, OutputStream)

4. execute Query(결과값 O) //SELECT
   execute Update(결과값 X) //INSERT UPDATE DELETE–결과값이 없다
                              0번:정상수행, 1번:비정상수행

ResultSet은 표 모양과 흡사하며, 커서가 맨 마지막에 위치하고 있다.
그러므로 우선 커서를 맨 위로 올려야 한다. 그 뒤 다음값, 다음값.. 식으로 읽어야 한다.
그게 rs.next()다. EOF까지 읽는다.(End Of File)

아래서부터 위로 올라가려면 rs.previous()다. BOF 전까지 읽는다.(Begin Of File)

ResultSet을 통째로 보내는게 아니라, 필요한 데이터만을 취해서 가져와야 한다. 그래서 “어레이 리스트”를 쓰는 것이다.

count ex)회원가입시 아이디 중복체크
max ex)예약번호 max치에 +1 자동증가
rank ex)조회수 순으로 정렬

오라클: ‘%A%’
자  바: ‘%’||’A’||’%’

웹서버도 보내는 부분, 받는 부분, 소켓이 있다.
-보낼때:Request 클래스 (OutputStream가 들어있다)
-받을때:Response 클래스 (Buffered Reader가 들어있다)
-소켓은 브라우저에 있다(브라우저 주소라인에. 주소가 연결되는 부분이다)

★★★문제는 구조파악이다.

얘를 왜 쓰냐? 를 깨달아야 한다.

어노테이션: 메소드 구분할 때 쓴다.
invoke를 할때 메소드 앞에 어노테이션이 붙어있으면 ‘구분’해서 가져올 수 있다. 스프링의 80%는 어노테이션이다.

컨트롤러(제어하는 클래스), 리포지토리(데이터베이스 연결하는 클래스)

SELECT zipcode,sido,gugun,dong,NVL(bunji,’ ‘)
FROM zipcode
WHERE dong LIKE ‘%신촌%’;

객체 지향 프로그램
 1) 데이터 보호: 캡슐화
 2) 재사용: 상속, 포함(★포함클래스가 핵심:필요한 클래스를 갖다놓고 쓴다)
 3) 변경, 추가: 다형성
 4) 사물을 단순화: 추상화(클래스 설계) ex)우편번호를 데이터 5개로 단순화, 사원을 데이터 9개로 단순화..

마이바티스 셀렉트리스트, 하고 SQL문장을 써주면 SQL문장이 어레이리스트에 쫙 들어옴(SQL 매퍼)

양: 조인< 서브쿼리

조인: 테이블 두개를 합침
서브쿼리: 쿼리문 두개를 합침

1.서브쿼리 ; 페이징에서 나온다

아이디: 프라이머리 키
주민번호: 후보키 (대체할만한 키)