728x90

<c:forEach items="${gamelist}" var="b" varStatus="status">
   [${status.index}]: ${gamelist[status.index]}
   <TR>
    <TD>${b.gameid}</TD>
    <TD>${b.displaytype}</TD>
    <TD>${b.displayno}</TD>
    <TD>${b.gamelink}</TD>
    <td><c:if test="${b.ishidden=='T'}"><span style="color:red">Hidden</span></c:if></td>
    <td>${b.lang}</td>
    <td><a href="javascript:edit(${b.bid})">[Edit]</a></td>
   </TR>
  </c:forEach>

.index는 0부터 시작하고

.count는 1부터 시작한다.



출처 : http://jsonlee.tistory.com/52

Posted by 앗뜨거
,
728x90

sqlMapper를 작성할 때 #과 $ 기호의 차이점은 아래와 같다.


# : 매개변수로 전달받은 파라메터를 그대로 삽입한다.

ex) 만약 아래와 같이 SQL이 작성되어 있다고 네임 스페이스는 test.select 라고 하자.

    select * from MEMBER where name = #{name}

    호출시 인자 전달 방법은 아래와 같다.

    getSqlSession.selectOne("test.select", "이지형");


$ : key와 value로 이루어진 Map 형태로 전달된다.

    select * from MEMBER where name = ${name}

    이라고 하면 파라메터 타입을 HashMap으로 넘겨줘야하며 

    name(key)에 해당하는 값(value) SQL 구문에 넣어주게 된다.

    HashMap<String, String) map = new HashMap<String, String>();

    map.put("name", "이지형");

    getSqlSession.selectOne("test.select", map);






1. #는 쿼리가 수행될 때, 다음과 같이 된다 

SELECT * FROM USER 

WHERE 
col = ?  


parameter : [값]


?에 bind된 값이 들어가게 된다. 

이 쿼리의 컴파일 된 내용을 재사용 할 수 있고, 파라미터에 따라 대입해주므로 효율적이다.
내부적으로 preparedStatement 객체에서 ? 에 들어갈 파라미터의 값을 set 해줌으로써 사용이 된다.
 
preparedStatement는 한번 수행한 쿼리를 캐싱하는 객체


사용 용도 >>

#일 경우, 에 사용한다.

myBatis : 컬럼명 = #{값}   
iBatis : 컬럼명 = #값#

* 쿼리에 작은 따옴표가 붙게 된다.


2. $는 쿼리가 수행될 때, 다음과 같이 된다

SELECT * FROM USER
WHERE 
col = 



값이 넣어진 쿼리 자체로 수행이 된다.(상수)
즉, 문장 전체가 preparedStatement가 된다.

사용 용도 >>

$일 경우는 컬럼명이 동적으로 바뀌어야 할 때 사용한다. 또는 테이블명.

myBatis : ${컬럼명} = #{값}   
iBatis : $컬럼명$ = #{값}

* 쿼리에 작은따옴표가 붙지 않는다. 
값에 $를 사용하면 스트링의 경우 작은따옴표로 감싸지지 않기 때문에 에러 발생한다.


이렇게 사용하지 않으면 unknown column 이나 There is no readable property named  등등의 에러가 뜨게 된다


출처 : http://warmz.tistory.com/744
   http://marobiana.tistory.com/60


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

iBatis 복수 parameter넘기는법  (0) 2014.11.18
Mybatis 기본 사용법  (0) 2014.10.28
[스크랩]resultMap, resultClass, parameterClass  (0) 2014.10.14
Posted by 앗뜨거
,
728x90

DAO용도인 .JAVA 파일에 다음과 같은 메서드를 만들어 넣는다 단지 map한개만 만들어서 보내고 싶은 파라미터 다 집어 넣으면 된다. 변수 이름과 key값은 같은게 좋을 듯 하다. 

그리고 그냥 MAP만 한개 던저주면 게임 끝이다.

아 이 얼마나 쉬운가 이거 어찌 하나 몇시간 생각했었는데. 혹시 되나하고 해봤는데 되니까 참 .. iBatis 레퍼런스 찾아봐도 되는데 이리 하면 기억에 오래 남아서 머리 싸매고 고민하는게 난 좋다 ㅎㅎㅎ(멍청한 짓인가) 이 프레임워크 만든사람이 나보다 똑똑한 사람일텐데 파라미터 하나 복수로 넘길수 없는 걸 만들었을리 없다는 확신이 있었다. ㅋㅋㅋㅋㅋ

public ArrayList getTimePriceList(String contractCode,String sdate,String edate,String stime,String etime) throws SQLException {
         HashMap map = new HashMap();
         map.put("contractCode", contractCode);
         map.put("sdate", sdate);
         map.put("edate", edate);
         map.put("stime", stime);
         map.put("etime", etime);
         
   list=(ArrayList)sqlMap.queryForList("getTimePriceList",map);  
   return list;
  }

SQL을 지정한 XML에서 다음과 같이 parameterClass를 맵으로 하면 된다. 꼭 MAP이 아니라 list 나 table도 되는지는 귀찮아서 안해봤다. 뭐 되지 않을까 싶다 안되면 되는거 쓰면 되니까 뭐 문제는 없을 듯하다. 
어짜피 parameter넘길뿐인데 뭐든 어떠냐 잘 넘어가기만 하면 되지 ㅎㅎㅎ

<select id="getTimePriceList" parameterClass="java.util.HashMap" resultClass="timeprice">
    <![CDATA[SELECT contractCode,date,time,close,sum(vol) as sumvol from timeprice 
    where 
    contractCode=#contractCode# 
    and date>=#sdate# 
    and date<#edate# 
    and time>=#stime# 
    and time<#etime# 
    group by close order by close
    ]]></select>


출처 : http://hedging.tistory.com/entry/iBatis-%EB%B3%B5%EC%88%98-parameter%EB%84%98%EA%B8%B0%EB%8A%94%EB%B2%95

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

[MyBatis] $ 과 # 차이점  (0) 2014.11.18
Mybatis 기본 사용법  (0) 2014.10.28
[스크랩]resultMap, resultClass, parameterClass  (0) 2014.10.14
Posted by 앗뜨거
,