개인 프로젝트: 보드 리스너에 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
서버에서 최신 버전 받아오는거 : 패치
위 경로로 패키지 및 파일준비
xml 파일 작성하기
mybatis 다운로드
<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 클래스 (인터페이스) 이름으로 작성하는 것이 좋ㄷ,.
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 결과 받기
'[네이버클라우드] 클라우드 기반의 개발자 과정 7기 > 웹프로그래밍' 카테고리의 다른 글
[NC7기-68일차(7월31일)] - 웹프로그래밍 49일차 (0) | 2023.07.31 |
---|---|
[NC7기-67일차(7월28일)] - 웹프로그래밍 48일차 (0) | 2023.07.28 |
[NC7기-65일차(7월26일)] - 웹프로그래밍 46일차 (0) | 2023.07.26 |
[NC7기-64일차(7월25일)] - 웹프로그래밍 45일차 (0) | 2023.07.25 |
[NC7기-63일차(7월24일)] - 웹프로그래밍 44일차 (0) | 2023.07.24 |