switch / case / default 와 비슷한 작동방식
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dept.DeptMapper3">
<select id="seletDynamicDeptno" parameterType="HashMap" resultType="Dept">
select deptno, dname, loc
from dept
<choose>
<when test="loc != null and dname != null">
where dname=#{dname} and loc=#{loc}
</when>
<when test="dname != null">
where dname=#{dname}
</when>
<when test="loc != null">
where loc=#{loc}
</when>
<otherwise></otherwise>
</choose>
</select>
</mapper>
아래 foreach태그는 arraylist전달받으면 전달받은 데이터의 엘리먼트들을 명시한 방식으로 구분지어준다.
<foreach item="item" collection="list" open="(" separator="," close=")"> #{item} </foreach>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dept.DeptMapper4">
<update id="multiUpdate" parameterType="arraylist">
update dept
set loc = '제주'
where deptno IN
<foreach item="item" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</update>
</mapper>
객체를 리스트에 담아 mapper -> foreach의 데이터로 전달할 때
각 객체의 멤버변수 접근은 아래와 같이 한다. (#{item.멤버변수})
<insert id="multiInsert" parameterType="list">
insert all
<foreach collection="list" item="item">
into dept (deptno, dname, loc)
values (#{item.deptno}, #{item.dname}, #{item.loc})
</foreach>
select * from dual
</insert>
mapper 태그 호출시 인자로 전달되는 방식으로 사용되며 offset index부터 limit 갯수만큼만 값을 반환받는다.
// id, 검색어, new RowBounds(시작index, 갯수)
List<Dept> list = session.selectList("com.dept.DeptMapper5.topN", null, new RowBounds(offset, limit));
public List<Dept> selectTopN(SqlSession session, int offset, int limit) {
// id, 검색어, new RowBounds(시작index, 갯수)
List<Dept> list = session.selectList("com.dept.DeptMapper5.topN", null, new RowBounds(offset, limit));
return list;
} mapper<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dept.DeptMapper5">
<select id="topN" resultType="Dept">
select deptno, dname, loc
from dept
order by 1 asc
</select>
<![CDATA[ sql ]]>로 대괄호 안에 sql문을 입력하면 해당 영역 내의 sql문은 특수문자를 그대로 사용할 수 있다.
예시
<select id="selectAll" resultType="Dept">
<![CDATA[
select * from dept where deptno>=90
]]>
</select>
또는 > < 와 같은 표현을 대신 사용하여도 된다.
<select id="selectAll2" resultType="Dept">
select * from dept where deptno>=90
</select>
절차지향적
dom의 접근은 태그가 다 그려진 뒤 접근해야함
데이터타입
Not A Number (NAN)
함수도 참조형데이터
변수에 함수저장이 가능함
블럭scope가 아닌 함수단위로 scope가 지정된다.
var를 지정하지 않으면 전역변수가 된다.
for(var i =0;)
호이스팅 예시
<script>
console.log(foo); // undefiend =호이스팅(끌어올림)되어 출력
var foo = "inky";
console.log(foo);
</script>
같은 이름의 전역변수가 있어도 로컬변수 선언이 있다면 우선적으로 로컬변수를 호이스팅하여 사용한다.
var scope = "global";
function f(){
//var scope;
console.log(scope); //호이스팅, undefined
var scope = 'local'
console.log(scope);
}