Joslynn의 하루

MSA Full-Stack 개발자 양성 과정 - MyBatisFrameWork_221110 본문

카테고리 없음

MSA Full-Stack 개발자 양성 과정 - MyBatisFrameWork_221110

Joslynn 2022. 11. 10. 18:05

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 맵핑

테이블 생성
java studentDTO 클래스

설정 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>

 

Comments