blog.mytatis.org - > products탭 -> mybaits3 다운로드 링크 -> github


@github는 따로 공부해서 사용해보는게 좋다


[Mybatis]

:: DB연동에 사용하는 framework

:: rs.getString처럼 여러개의 레코드를 가져오려면 하나하나 작업을 했는데  

  그 작업을 하지 않아도 되게 간편하게 작업 할 수 있게 제공


:: ORM(object relational mapping)프레임워크

- 객체와 레코드의 관계를 맺어 이름이 맞는 메서드를 찾아 자동으로 매핑해줌

- 데이터베이스와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법

- 관계는 xml문서에 설정


:: 퍼시스턴스(Persistence Framework) 프레임워크

- 데이터의 저장,조회,변경,삭제를 다루는 클래스 및 설정 파일들의 집합

- sql문을 하나의 파일을 만들어 모아놓는 것


:: POJO(Plain Old Java Object)

- 순수한 자바 객체(오래된 방식의 간단한 자바 오브젝트)

- 직접 만드는 class를 의미(외부 라이브러리를 상속받지 않는)

  (ex. DTO)


___________________________________________________________________________________________________________________


[실습]


●JavaProject생성 -> lib폴더 생성하고 외부 jar파일 넣기 -> 프로젝트 buildpath -> add jar 

-> 해당프로젝트의 lib폴더에 있는 jar파일 선택 -> apply


●src에 프로퍼티스파일 생성

:: driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@localhost:1521:XE

username=scott

password=tiger


●sqldeveloper에 테이블 생성

:: create table MEM(

id varchar2(20),

pwd varchar2(20),

email varchar2(20),

phone carchar2(20),

regdate date);



●주로 사용하는 쿼리를 실행시키는 매서드

//sqlsession selectList()

//sqlsession selectOne()

//sqlsession insert()

//sqlsession update()

//sqlsession delete()


●xml파일

:: mapper파일을 잘 설정해주어야 함(doctype mapper)


●SqlSession

:: 요청하면 만들고 끝나면 끝냄

:: SqlSession session = sqlSessionFactory.openSession(); 

try {   

// do work 

} finally {

  session.close(); }


●typeAliases

:: 클래스의 이름이 너무 길면 별칭을 주어 타이핑을 줄이기 위함

:: type속성에 클래스명을 적어줌

:: 기본으로 내장된 별칭이 있고 대소문자를 가림

:: pdf 12page,13page 표 중요함



※ 14,15page생략


●transactionManager

:: 속성에는 JDBC와 MANAGED가 있는데 우린 JDBC만을 쓴다


●dataSource

:: 3가지의 내장된 타입이 있고 가장 자주 쓰는건 POOLED다.


●mappers

:: sql구문을 정의


●SQL Map XML파일   ☆★☆★

<select>

:: resultMap(ibatis) = mybatis에서는 잘 안씀

:: parameterMap은 안쓴다

:: resultMap은 컬럼명과 변수명이 다를 때 별칭을 주어서 이름을 맞춰주면 데이터 저장 가능하거나

  다르다는 것을 따로 지정해 주면 됨

:: resultType은 컬럼명과 변수명이 같을 때 주로 사용함


※ insert,delete,update는 result속성이 없다


resultType 과 resultMap :: mybatis에서는 레코드 수를 세는 것 때문에 result가 없음.

          jdbc의 경우에는 변경된 레코드의 갯수를 세는 것이기 때문에 result가 있다.


<insert>

:: 


<update>

::값을 하나만 바꾸고 싶고 값이 두개가 들어갈 때  parameterType에 map을넣어서 사용


<selectKey>

:: insert문에서 사용 가능

:: 먼저 실행하고 프로퍼티를 만들어서 결과물을 다음에 사용하게끔 제공(BEFORE)

:: 후에 실행하고 프로퍼티를 만들어서 결과물을 다음에 사용하게끔 제공(AFTER)

:: 프로그램적으로 만들어서 사용해도 되고 그게 아니면 selectKey를 사용


<sql>

:: sql구문을 sql변수에 저장해놓고 사용할 때 include refid="sql변수"를 이용해서 select문을 가져다 씀


<parameters>

:: 전달받는 값(요소)


ºproperty

:: 이름을 가지고 있는 값

:: 원시적이거나 기본형 데이터는 이름이 없이 값만으로 사용

:: jdbcType은 소문자가 아닌 대문자를 사용해야 함

:: jdbcType은 null가능한 칼럼을 위해 필요 Ex. #{prop.jdbcType=VARCHAR} => null값 허용


☞모든 컬럼에 대해  null허용(config.xml)

<settings>

<setting name="cacheEnabled" value="false" />

<setting name="jdbcTypeForNull" value="NULL" />

</settings>


<like>

:: where 컬럼명 like '%'|| #{값} || '%';

:: 쿼리문에서 ||는 더하기 역할을 한다.

:: '%값%' 처럼 ||기호를 사용하지 않으면 에러가 난다.


[문자열 대체]

:: 잘 사용하지 않음


[resultMap]

:: 컬럼명과 변수명이 다를 때 사용(별칭을 사용)

:: 도메인 모델로는 HashMap보다는 자바빈이랑 POJO를 사용.

:: 별칭을 사용하기 싫으면 resultMap을 만들어 프로퍼티와 컬럼을 매핑하는데 사용



[Advanced Result Mapping]

:: 모든 데이터를 가지고 있는 DTO는 없다

:: 매번 ResultMap을 추가해서 빌드

:: 작성이 복잡하면 프로그램을 만들어서 돌림



[id, result]

:: 결과 매핑의 가장 기본적인 형태

:: id = 변수명, result = 컬럼명


[constructor]

:: 생성자의 매개변수를 담을 객체를 지정

:: javaType지정할 때 순서 주의


[cahce]

:: 한번 읽어보기



●동적 SQL


[ if ]

:: ? 


[ choose, when, otherwise ]

:: ? 


[ trim, where, set ]

:: where절은 동적으로 where키워드를 붙이고 추가될 쿼리문 where 다음에 and나 or이 붙어있을경우 삭제

:: set절은 동적으로 set키워드를 붙이고 필요없는 ,(콤마)를 자동으로 지워줌


[ foreach ]

:: 파라미터로 list or array가 전달이 될 때 list는 list라는 이름으로 array는 array라는 이름의 키로 사용

:: open, separator, close를 이용해 괄호와 구분자를 넣어주고 값을 넣어 반복문을 돌림

 


[RowBounds]

:: 특정 개수 만큼의 레코드를 건너띄게 함



  

※ sqlSession과 Mapper파일 만드는 것은 정리를 잘 해두어야 Spring개발을 할 수 있다.

   그 외에는 spring에서 자동으로 사용하기 때문에 위의 두개의 내용은 확실히 정리



'프로그래밍 > Java' 카테고리의 다른 글

Spring MVC  (0) 2018.09.11
Spring 데이터 베이스 연동 지원  (0) 2018.09.11
Spring AOP  (0) 2018.09.10
Spring정리  (0) 2018.09.05
제어문  (0) 2018.07.15

+ Recent posts