동적 SQL로 if, choose(when, otherwise), trim(where, set), foreach 가 있다.
if
<select id="findActiveBlogWithTitleLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
</select>
title 이 없다면 state가 ACTIVE인 BLOG가 리턴하게 된다.
choose, when, otherwise
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
자바의 switch 구문과 유사하며 마이바티스에서는 choose 엘리먼트를 제공한다.
title만으로 검색하고 author가 있다면 그 값으로 검색된다. 둘 다 제공하지 않는다면 featured 상태의 blog가 리턴된다.
trim, where, set
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
<where>
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</where>
</select>
where 엘리먼트는 태그에 의해 컨텐츠가 리턴되면 단순히 "where"만을 추가한다. 게다가 컨텐츠가 "and" 나 "or"로 시작한다면 그 "and"나 "or"을 지워버린다. where 엘리먼트가 기대한 것처럼 작동하지 않는다면 trim 엘리먼트를 사용자 정의할 수도 있다.
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>
where 엘리먼트에 대한 trim 기능과 동일하다.
override 속성을 오버라이드하는 텍스츠의 목록을 제한한다. 결과는 override 속성에 명시된 것들을 지우고 with 속성에 명시된 것을 추가한다.
<update id="updateAuthorIfNecessary">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</update>
set 엘리먼트는 update 하고자 하는 칼럼을 동적으로 포함시키기 위해 사용될 수 있다. trim으로 변환 시키면
<trim prefix="SET" suffixOverrides=",">
...
</trim>
와 같다. ","를 빼주면 된다.
빌드란 소스코드파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다. 프로젝트를 배포하기 위해서 하나의 파일로 만드는 과정이다.(war 또는 jar)
배포란
프로젝트 생성, 테스트 빌드 배포 등의 작업을 위한 전용 프로그램으로 빠른기간동안 늘어나는 라이브러리의 추가, 프로젝트를 집행하며 라이브러리의 버전 동기화의 어려움을 해소하고자 등장한 것이 빌드 도구이다.
Maven 는 자바용 프로젝트 관리독구로 Apache Ant 의 대안으로 만들어 졌다. 전체적인 라이프사이클을 관리하는 도구이며 많은 편리함과 이점이 있어 널리 사용되고 있다. 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다.
LifeCycle
미리정해진 빌드순서로 메이븐은 프레임워크이기때문에 동작방식이 이미 정해져 있고 미리 정의하고 있는 빌드 순서르 라이프사이클이라한다. 최종 빌드 순서는 complie -> test -> package 이다.
POM(Project Object Model)
pom.xml 파일을 말하며 메이븐의 기능을 사용하기 위해서 POM이 사용된다. 파일을 프로젝트마다 하나이며 이것 만으로도 프로젝트의 모든 설정, 의존성등을 알 수 있다.