。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-66일차(7월27일)] - 웹프로그래밍 47일차

quarrrter 2023. 7. 27. 17:56

개인 프로젝트: 보드 리스너에 getAttribute 추가 


52. Mybatis SQL Mapper Framework 

1. 현황 ================= >

2. 해결
MySQLBoardDao 
자바코드(JDBC API)
+ SQL코드

코드 관리가 어렵다
JDBC API 호출코드(뻔한코드)가 반복된다.
자바코드와 sql코드를 별도 파일로 분리
=> 코드 관리가 쉽다

JDBC API 호출코드를 캡슐화
=> 자바프로그래밍이 간결해짐 

할거: 

 

**서버의 bitcamp - dao를 myapp 밑으로 옮기기

 

myapp

 

빈폴더는 깃에 저장안댐 ~ 

실제 저장소 .gti 나머지는 working directoy

넣는 건 check in, commit, 꺼내는 거 check out

서버에서 최신 버전 받아오는거 : 패치 

 

메이븐 스탠다드 프로젝트 구조( gradle 똑같음)

 

위 경로로 패키지 및 파일준비

 

xml 파일 작성하기

mybatis 다운로드 

maven.org

 

수정 후 gradle eclipse

 

 

 

 

 

오른쪽에 깃허브 - mybatis 3  레파지토리 - getting-started 밑으로 쭉 내리면 ,,,
https://mybatis.org/mybatis-3/getting-started.html
복붙하기 // xml 선언부


<h1> abc </h1>

 

abc: 내용(content)

<h1> : meta data(content를 제어하는 데이터) = markup = tag 

 

Extensible Markup Language ( = XML)

content를 제어하고 설명하는 markup을 마음대로 추가하고 기술 (규칙에따라)

 

XML을 응용~ > Hyper Text Markup Language  : HTML 


<?xml version="1.0" encoding="UTF-8" ?>           
// XML 선언 ( XML 문서의 제일 첫줄에 와야하고, 공백이 있으면 안됨

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" // markup 규칙 정보 
 
                                 "https://mybatis.org/dtd/mybatis-3-mapper.dtd">   // 규칙을 정의한 문서의 URL (파일 속 규칙을 따라야함)
<mapper > //부모태그
<select > // 자식태그
<insert id = "insert"> ... </insert> // 시작태그 컨텐트 끝태그: element =tag
                                                    // id = "insert"  == attribute(속성)

</select>
</mapper>  

Wellformed-XML 과 valid-XML

Wellformed-XML

* XML 태그 작성 규칙에 따라 만든 문서

1. 루트 태그는 1개 

2. 시작 태그와 끝 태그는 한 쌍이어야함.  

3. 태그가 걸쳐서 겹치지 않아야함.

4. 끝태그 생략시 시작태그에 표시 <aaa />

5. 태그명이나 속성명은 XML 이름 규칙에 따라 작성해야한다.   //   숫자 $  - 시작 X, 중간 공백 X,  등

 

Valid XML : Wellformed-XML + DTD ( Doucment Type Definition)

* DTD 규칙에 따라 태그 사용

 

Mybatis Mapper XML 문서

<mapper namespace="bitcamp">
     <select id="list"> ... </select>

"list" 는 SQL문을 찾을 때 사용
네임스페이스 이름과 합쳐서 사용함. ex) "bitcamp.list"   // namespace(=pacakge).SQL ID

자바에서는 패키지라고 하지만 다른 세상에선 namespace를 많이 사용함. 

"bitcamp" 유지보수를 쉽게 할 수 있도록 SQL문을 사용하는 DAO 클래스 (인터페이스) 이름으로 작성하는 것이 좋ㄷ,.

 

리팩터 리네임. 리스트를 findAll로. 멤버다오도

mysqlBoardDao에 sqlsession 추가 & 수정 


여러 스레드가 세션 공유하면 안됨 

여러 쓰레드가 같은 sql세션객체를 쓰면 커넥션을 같은걸 쓴다는 뜻임. 서로 작업간섭하게되니까 안되고 

그래서 메서드 호출시점에 세션만들어야됨 

 

1. build() 에 설정파일에는 ,,, 

SQL mapper 파일 경로, DB 연결정보, 트렌젝션 관리정보, 기타 등등 

Mybatis API가 실행하는데 필요한 정보가 들어있음

복사
붙여넣


이클립스에서,,, 컴파일 ,, , 

bin은 이클립스 에디터 사용하는 동안 쌓이는 폴더 

컴파일 후에 bin/main 밑에 다 합쳐져서 복사됨;;; (main밑에있는 java랑 resources) 

클래스 경로에 따라 bin/main에 그냥 쭉쭊 ,,,, , 복사됨 .. 

프로젝트 폴더가 나뉘어져있는건 그냥 관리 쉽게하려고 하는거고, 컴파일 하면 class파일들은 하나로 합쳐짐. 

폴더구조만 보면 이클립스가 컴파일했을때 어떤 폴더에 떨어지는지 알고 있기 ~ 

--

gradle 하면 ;; 다른 얘기임. build 폴더 밑에 class 생김. 

 

이클립스


< = 트랜젝션을 고려하지 않은 방식>

<트랜젝션을 고려한 방식>

package bitcamp.util SqlSessionFactoryProxy 생성 후  server app 수정 

 

*select 결과 받기

어디에 없다는 거지
뷰카운트 증가,,,