일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- java
- 관계형 데이터베이스
- w3schools
- CS 기초
- ssafy
- Compute Science
- 삼성청년SW아카데미
- exception
- 모두를 위한 컴퓨터 과학
- 이진법
- 예외처리
- WebProgramming
- Java Programming
- 상속
- CS기초지식
- SSAFY 9기
- 모두를 위한 컴퓨터 과학(CS50)
- Computer Science
- til
- 부스트코스
- SW
- CS50
- ERD
- CS 기초지식
- 객체지향
- 기초프로그래밍
- edwith
- 알고리즘
- 면접을 위한 CS 전공지식 노트
- 데이터베이스 모델링
- Today
- Total
Joslynn의 하루
MSA Full-Stack 개발자 양성 과정 - MyBatisFrameWork_221110 본문
ORM(Object Ralation Mappring) Framework
: 객체와 관계형 데이터베이스의 테이블을 연결
: 종류 ①Hibernate = JPA API, ②MyBatis FrameWork
MyBatis FrameWork
SqlSessionFactoryBuilder
: SqlSessionFactory 를 생성한 후 유지할 필요는 없다. 그러므로 SqlSessionFactoryBuilder 인스턴스의 가장 좋은 스코프는 메서드 스코프(예를 들면, 메서드 지역변수)이다
SqlSessionFactory
:한번 만든뒤, SqlSessionFactory 는 애플리케이션을 실행하는 동안 존재해야만 한다. 그래서 삭제하거나 재생성할 필요가 없다. 애플리케이션이 실행되는 동안 여러 차례 SqlSessionFactory 를 다시 빌드하지 않는 것이 가장 좋은 형태이다.
SqlSession
: 각각의 쓰레드는 자체적으로 SqlSession 인스턴스를 가져야 한다.
: SqlSession 인스턴스는 공유되지 않고, thread-safe 하지 않다.
: 가장 좋은 스코프는 요청 또는 메서드 스코프
insert, update, delete (DML)
xml문서코딩(mapper문서)
<insert>, <update> , <delete> 태그 사용
: id 속성 필수
: parameterType="" → int , string = #{_parameter} , #{value}
dto = #{dto안의property명}
map = #{map의key}
list= 반복문필요
<insert id="insert" parameterType="empDTO"> <!-- #{property}: get 메소드 호출 -->
insert into emp(empno, ename, job, sal, hiredate)
values(#{empNo}, #{empName}, #{job}, #{sal}, sysdate)
</insert>
: parameterMap 속성은 사용안함.
: resultType은 없다!!!!
java문서코딩
: int result = sqlSession.insert() / update() / delete()
: insert() / update() / delete() → mybatis에서 jdbc의 executeUpdate() 호출
: DML 작업은 결과 result가 성공여부를 뜻한다.(0이면 실패, 1이상이면 성공)
: 반드시 commit 또는 rollback 필수
select
1) xml문서에서
<select id="" parameterType="" reslutType="" reslutMap="">
: reslutMap은 반드시 <resultMap>태그가 선언되어 있고 선언된 태그의 id를 참조
(DB의 결과와 dto에 매핑결과가 다를때 임의대로 매핑 시켜줄때 필요함)
2)java문서에서
: sqlSession.selectOne() : 레코드가 0 또는 1 리턴될때
: selectList() : 레코드가 0개 이상 리턴될때
select 메소드
1) 레코드 0개 이상인경우
selectList(String id)
selectList(String id , Object parameter)
selectList(String id , Object parameter , RowBounds rows)
* RowBounds : 특정 개수 만큼의 레코드를 건너띄게 한다 (paging 처리시 사용)
2) 레코드가 0 또는 1 인경우
selectOne(String id)
selectOne(String id, Object parameter)
언더바가 포함된 컬럼 - java CamelCase 맵핑
설정 xml 문서
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
: DB의 언더바(underscore)를 사용한 컬럼과 자바의 낙타표기법을 사용한 property를 맵핑하기 위해서 myBatis 설정 문서에 위의 setting을 추가한다.
#{name(값)}에 null이 들어가도록 설정
: #{이름}을 했을 때는 값이 없으면 오류 발생, 만약 값이 없으면 NULL 값이 전달될 수 있도록 설정 필요
설정 xml 문서
<configuration>
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
</configuration>