sum()의 경우 대개 정수나 실수로 결과가 딱 하나 나오니
그거담을 객체를 별도로 생성하긴 귀찮으니까

int형으로 돌려받으려면 
int나 java.lang.Integer를 resultType으로 하면 된다지만..
<select id="selectCount" resultType="java.lang.Integer"
    select count(*) as cnt from tb_user where id=#{id} 
</select> 

[링크 : http://okjsp.net/seq/217267]

막상해보니 안되서 이리저리 해본결과.. -_-a
resultType 대신 resultClass로 해주면 된다.
<select id="selectSumScore" resultClass="java.lang.Integer" parameterClass="java.util.HashMap">
SELECT SUM(score) FROM MUSIC_SCORE WHERE musicId=#musicId#
</select> 

'프로그램 사용 > ibatis & mybatis' 카테고리의 다른 글

ibatis null  (0) 2014.05.29
ibatis 쿼리에 list 타입 인자로 넣기  (0) 2014.05.28
ibatis / mybatis 데이터가 비어있는 경우(null)  (0) 2014.05.23
ibatis namespace  (2) 2014.05.22
ibatis2 map  (0) 2014.05.21
Posted by 구차니
<insert>나 <select> 등에서
<iterate>를 이용하여 리스트를 동적으로 sql 문에 넣을 수 있다.

<iterate prepend="AND" property="UserNameList"  open="(" close=")" conjunction="OR">
  username=#UserNameList[]#
</iterate>

[링크 : https://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html

[링크 : http://blog.naver.com/cain007/170076719]

'프로그램 사용 > ibatis & mybatis' 카테고리의 다른 글

ibatis select sum() resultType / resultClass  (0) 2014.05.29
ibatis null  (0) 2014.05.29
ibatis / mybatis 데이터가 비어있는 경우(null)  (0) 2014.05.23
ibatis namespace  (2) 2014.05.22
ibatis2 map  (0) 2014.05.21
Posted by 구차니
데이터가 int 형일 경우 null이 면 쥬금
되도록이면 DB에서 constraint 를 사용해 not null을 해주는게 ibatis에는 좋을 듯 하다.

[링크 : http://silver-lining.tistory.com/39]

 

'프로그램 사용 > ibatis & mybatis' 카테고리의 다른 글

ibatis null  (0) 2014.05.29
ibatis 쿼리에 list 타입 인자로 넣기  (0) 2014.05.28
ibatis namespace  (2) 2014.05.22
ibatis2 map  (0) 2014.05.21
ibatis / log4j 를 이용한 sql문 덤프  (0) 2014.05.21
Posted by 구차니
xml을 통해 sql문들을 불러올 키인 'name' 이 중복될 경우 키가 중복된다고
Duplicate <sql>-include ... found 에러가 뜨게 된다.

com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/sql'.  Cause: com.ibatis.sqlmap.client.SqlMapException: Duplicate <sql>-include 'select-all' found.
com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
com.ibatis.sqlmap.engine.builder.xml.SqlMapParser.parse(SqlMapParser.java:40)
com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$10.process(SqlMapConfigParser.java:270)
com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84)
com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:46)
com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)
account.joinAction.<init>(joinAction.java:45)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
java.lang.Class.newInstance(Unknown Source)
com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:123)
com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:154)
com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:143)
com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:113)
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:275)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:365)
com.opensymphony.xwork2.DefaultActionInvocation.access$000(DefaultActionInvocation.java:38)
com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:83)
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
com.opensymphony.xwork2.DefaultActionInvocation.<init>(DefaultActionInvocation.java:74)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:189)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:494)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)
 

이런 문제는 namespace를 통해 해결할 수 있으나
namespace를 쓰기 위해서는 ibatis 설정에서 사용이 가능하도록 설정 해주어야 한다.
useStatementNamespaces 는 기본값이 false이다.
Example: useStatementNamespaces=”false”
Default: false (disabled)
 
[링크 : http://ibatis.apache.org/docs/dotnet/datamapper/ch04s03.html


/src/sqlMapConfig.xml

<sqlMapConfig>
<properties resource="/dbconnect.properties" />
<settings cacheModelsEnabled="true" enhancementEnabled="true"
lazyLoadingEnabled="true" maxRequests="1" maxSessions="1"
maxTransactions="1" useStatementNamespaces="true" />

<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" />
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${username}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>

<sqlMap resource="/sql/external.xml"/>
</sqlMapConfig> 

/src/sql/external.xml

<sqlMap namespace="user_namespace">
</sqlMap>

[링크 : http://www.okjsp.net/seq/89041]
Posted by 구차니
일반적인 상황에서는 ibatis2를 통해 인자를 하나만 넘겨줄수 있는데
2개 이상 필요할 경우에는 DAO를 통해 클래스로 넘기거나
Map 객체를 통해 여러개의 값을 넘겨줄 수 있다.

[링크 : http://okjsp.net/bbs?seq=206384]
[링크 : http://masachi.tistory.com/258]
Posted by 구차니
ibatis의 단점(?)아닌 단점으로는
실제로 값이 넘어가는지 알기가 어렵다는 점인데..
log4j를 이용하여 로그로 콘솔을 통해 디버깅이 용이하도록
SQL 문 자체를 출력할 수 있다.

DEBUG [http-8080-3] -Created connection 1249656.
DEBUG [http-8080-3] -{conn-100000} Connection
DEBUG [http-8080-3] -{conn-100000} Preparing Statement:       SELECT * FROM SBOARD2      WHERE boardId = ? ORDER BY ref DESC, re_step ASC  
DEBUG [http-8080-3] -{pstm-100001} Executing Statement:       SELECT * FROM SBOARD2      WHERE boardId = ? ORDER BY ref DESC, re_step ASC  
DEBUG [http-8080-3] -{pstm-100001} Parameters: [null]
DEBUG [http-8080-3] -{pstm-100001} Types: [null]
DEBUG [http-8080-3] -{rset-100002} ResultSet
DEBUG [http-8080-3] -Returned connection 1249656 to pool. 

 # Global logging configuration
log4j.rootLogger=ERROR, stdout

# SqlMap logging configuration
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.BasicDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

# Console output
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] -%m%n

[링크 : http://northface.tistory.com/15]
[링크 : http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip]

'프로그램 사용 > ibatis & mybatis' 카테고리의 다른 글

ibatis 쿼리에 list 타입 인자로 넣기  (0) 2014.05.28
ibatis / mybatis 데이터가 비어있는 경우(null)  (0) 2014.05.23
ibatis namespace  (2) 2014.05.22
ibatis2 map  (0) 2014.05.21
ibatis - db framework  (0) 2014.05.14
Posted by 구차니
ibatis는 현재 mybatis로 이름이 변경되었다.

db를 위한 프레임워크로
코드상에 sql문을 넣는게 아닌 xml에 sql문을 넣어 관리가 용이하도록 한다.

[링크 : https://ibatis.apache.org/]
[링크 : http://blog.mybatis.org/]
  [링크 : http://mybatis.github.io/mybatis] 문서
Posted by 구차니