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 |