Acorn academy 12/19 MyBatis, Javascript

Bae Seong Jun·2023년 12월 19일

Acorn academy

목록 보기
23/70

mapper에서 사용하는 다양한 구문 (조건문, 반복문 사용)

choose when otherwise

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 이용한 sql에 데이터 나열

아래 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>

rowbound(offset, limit) 객체 사용

mapper 태그 호출시 인자로 전달되는 방식으로 사용되며 offset index부터 limit 갯수만큼만 값을 반환받는다.

// id, 검색어, new RowBounds(시작index, 갯수)
List<Dept> list = session.selectList("com.dept.DeptMapper5.topN", null, new RowBounds(offset, limit));

  • 주의사항 : mapper sql호출에서 여러인자 전달시 전달할 검색어값이 없다면 반드시 null을 넣어줘야 다음 인자들이 정상적으로 전달된다.
    DAO
    	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>
    	
``` ### sql문에서 특수기호 사용시 주의사항 꺽쇠같은 특수기호를 sql문에서 비교연산자로 사용시 태그 여닫이로 인식하기 때문에 특수한 처리를 해줘야한다.

<![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&gt;=90
	</select>

자바스크립트

절차지향적

dom의 접근은 태그가 다 그려진 뒤 접근해야함

데이터타입
Not A Number (NAN)
함수도 참조형데이터
변수에 함수저장이 가능함

데이터형

변수 scope

블럭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);
}
profile
코딩 프로?

0개의 댓글