하나의 DATA값이

여러 Byte로 저장되는 경우

CPU마다 처리순서가 다르다.

 

숫자 769를 4 Byte 공간에 넣는다고 했을 때

큰 숫자가 앞에 있다고 인식하고 처리하는 Big Endian

(이때 저장된 Hex값은 0x00 0x00 0x03 0x01 으로 저장되어있다.)

 

작은 숫자가 앞에 있다고 인식하고 처리하는 Little Endian

(이때 저장된 Hex값은 0x01 0x03 0x00 0x00 으로 저장되어있다.)

 

 

그런데, 뭐?

Local에서 지지고 볶을 때는 관계없다.

 

하지만, 네트웍을 통해 전달하는 경우

주는 쪽에서 생성한 방식과

받는 쪽에서 인식해야 하는 방식이 다르다면?

769원이

16,973,824원으로 인식될 수도 있게된다.

 

 

이때 양쪽의 처리방식을 맞추면

동일한 값으로 인식할 수 있다.

 

내 PC의 처리방식(Byte Order)는 뭘까?

 ByteOrder.nativeOrder();

ByteOrder.BIG_ENDIAN 과 ByteOrder.LITTLE_ENDIAN 중 하나가 나온다.

 

 

됐고, 난 이걸로 할꺼야.

원하는 처리방식으로 Byte 배열을 얻고 싶다면?

769를 Little Endian 값으로 받고 싶다면?

 ByteBuffer byteBuffer = ByteBuffer.allocate( Integer.BYTES );
 byteBuffer.clear();
 byteBuffer = byteBuffer.order( ByteOrder.LITTLE_ENDIAN );
 int value = 769;
 byteBuffer.putInt( value );
 byte[] bytes = byteBuffer.array();

 

clear 와 order 를 실행하지 않으면 꽝!!!

 

내 PC의 처리방식이 뭐든지간에

JAVA는 기본적으로 BIG_ENDIAN으로 생성된다.

이걸 잊어도 꽝!!!

 

잘 챙겨서

날 벼락 맞는 일 생기지 않기를...

 

 

Excel Upload를 처리하기 위해서

Apache POI - Download Release Artifacts : http://poi.apache.org/download.html

현재의 최신버전 3.17 사용했었.

 

poi-3.17.jar
poi-ooxml-3.17.jar
poi-ooxml-schemas-3.17.jar

 

※ Excel Upload를 처리하기 위해

   추가로 cos.jar, commons-collections4-4.1.jar, xmlbeans-2.6.0.jar 파일이 더 필요하다.

 

Windows 개발환경에서는 잘 되었으나

 

Ubuntu 에서는

아래와 같은 Exception을 맞았다.

 

 java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER
    org.apache.poi.poifs.filesystem.FileMagic.<clinit>(FileMagic.java:42)
    org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:174)
    org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipFile(ZipHelper.java:237)
    org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:134)
    org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:117)
    org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:257)
    org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:187)
    org.apache.poi.POIXMLDocument.openPackage(POIXMLDocument.java:89)
    org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:340)
    org.apache.jsp.excel_005fupload_jsp.getExcel(excel_005fupload_jsp.java:48)
    org.apache.jsp.excel_005fupload_jsp._jspService(excel_005fupload_jsp.java:599)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

 

 

버전 3.16 사용했더니...

 

poi-3.16.jar
poi-ooxml-3.16.jar
poi-ooxml-schemas-3.16.jar

 

또 다른 Trace로 Exception을 맞았다.

 

 java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER
    org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:192)
    org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipFile(ZipHelper.java:269)
    org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:134)
    org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:117)
    org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:257)
    org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:187)
    org.apache.poi.POIXMLDocument.openPackage(POIXMLDocument.java:90)
    org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:336)
    org.apache.jsp.excel_005fupload_jsp.getExcel(excel_005fupload_jsp.java:48)
    org.apache.jsp.excel_005fupload_jsp._jspService(excel_005fupload_jsp.java:599)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

 

 

이리 저리 검색하다...

버전 3.13 을 사용했더니 성공~

 

poi-3.13.jar
poi-ooxml-3.13.jar
poi-ooxml-schemas-3.13.jar

 

※ jar 파일 다운로드

https://repo1.maven.org/maven2/org/apache/poi/poi/3.13/

https://repo1.maven.org/maven2/org/apache/poi/poi-ooxml/3.13/

https://repo1.maven.org/maven2/org/apache/poi/poi-ooxml-schemas/3.13/

 

 

  1. anpd-info 2022.05.10 14:09 신고

    덕분에 됐네요. 감사합니다!

java Server를 띄울 때

아래 옵션을 주면 된다.

 

-Djava.net.preferIPv4Stack=true

 

 

local에서 접속할 경우

0:0:0:0:0:0:0:1 로 표시되던 것이

 

127.0.0.1 로 표시된다.

 

 

 

eclipse에서는

Servers에 정의한 서버 정보 Double Click

General Information Part 에서

Open launch configuration Click

Arguments TAB 에서

VM arguments 끝에 옵션을 붙여주면 된다.

 

 

 

전화번호 앞자리 0이 사라질 때

 

style="mso-number-format:'@';"

 

 

* xxDAO.java

 

...

return (전체VO)select( "조회DAO.get전체목록", ... );

 

 

* xxsql.xml

 

<typeAlias  alias="전체VO" type="com...전체VO"/>

<typeAlias  alias="서브VO" type="com...서브VO"/>

 

<resultMap id="전체Map" class="전체VO">

    <result property="..." column="..."/>

    <result property="서브목록" column="서브조회Column" select="get서브목록"/>

                            ~~~~~~

                            전체VO class에 private List<서브VO> 서브목록; 으로 선언되어있어야 한다. 당연히.

</resultMap>

 

<select id="조회DAO.get전체목록" parameterClass="..." resultMap="전체Map">

    SELECT ...

    FROM    ...

    WHERE  ...

</select>

 

<select id="get서브목록" parameterClass="서브조회Column Type" resultClass="서브VO">

    SELECT ...

    FROM    ...

    WHERE  ...

</select>

 

 

gradle을 통해 실행된 결과는 Cash된다.

이를 무시하고 다시 실행하기 원할 때는

 

gradle -rerun-tasks 블라블라

 

batch 파일로 만들어서 실행하고 싶다면

gradle 자체가 .bat 파일이기 때문에

 

call gradle -rerun-tasks 블라블라

 

 

이런 저런 실행 옵션은

 

> gradle -h

USAGE: gradle [option...] [task...]

 

 -?, -h, --help
 -a, --no-rebuild
 -b, --build-file
 -c, --settings-file
 --configure-on-demand

 

 

 --continue
 -D, --system-prop
 -d, --debug
 --daemon

 

 --foreground
 -g, --gradle-user-home
 --gui
 -I, --init-script
 -i, --info
 -m, --dry-run
 --no-color
 --no-daemon
 --offline
 -P, --project-prop

 

 -p, --project-dir

 

 Shows this help message.
 Do not rebuild project dependencies.
 Specifies the build file.
 Specifies the settings file.
 Only relevant projects are configured in this build run.
 This means faster build for large multi-project builds.
 [incubating]
 Continues task execution after a task failure.
 Set system property of the JVM (e.g. -Dmyprop=myvalue).
 Log in debug mode (includes normal stacktrace).
 Uses the Gradle daemon to run the build.
 Starts the daemon if not running.
 Starts the Gradle daemon in the foreground. [incubating]
 Specifies the gradle user home directory.
 Launches the Gradle GUI.
 Specifies an initialization script.
 Set log level to info.
 Runs the builds with all task actions disabled.
 Do not use color in the console output.
 Do not use the Gradle daemon to run the build.
 The build should operate without accessing network resources.
 Set project property for the build script
 (e.g. -Pmyprop=myvalue).
 Specifies the start directory for Gradle.
 Defaults to current directory.

 --parallel

 

 

 --parallel-threads

 

 Build projects in parallel.

 Gradle will attempt to determine the optimal number of executor threads to use. [incubating]
 Build projects in parallel, using the specified number of executor threads. [incubating]

 --profile

 

 --project-cache-dir

 -q, --quiet
 --recompile-scripts
 --refresh-dependencies
 --rerun-tasks
 -S, --full-stacktrace
 -s, --stacktrace
 --stop
 -u, --no-search-upward
 -v, --version
 -x, --exclude-task

 Profiles build execution time and generates a report in the <build_dir>/reports/profile directory.
 Specifies the project-specific cache directory.
 Defaults to .gradle in the root project directory.
 Log errors only.
 Force build script recompiling.
 Refresh the state of dependencies.
 Ignore previously cached task results.
 Print out the full (very verbose) stacktrace for all exceptions.
 Print out the stacktrace for all exceptions.
 Stops the Gradle daemon if it is running.
 Don't search in parent folders for a settings.gradle file.
 Print version info.
 Specify a task to be excluded from execution.

 

 

build.gradle 파일에

Test용으로(운영/배포시에는 포함하지 않겠다는 의미)

Compile하라는 testCompile("junit:junit:4.11")을 사용했을 때

 

모든 것이 정상인데도

Compile이 제대로 되지 않는 경우

아래처럼 error: package org.junit does not exist 가 발생한다.

 

 

 

아무리 이리 저리 용을 써봐도 안된다면...?

 

testCompile("junit:junit:4.11")을

compile("junit:junit:4.11")로 변경하면 정상적으로 Compile된다.

 

Compile된 후

다시 testCompile("junit:junit:4.11")로 변경한 후

gradle test 로 실행하게되면 또다시 error 발생...;;;

 

결국 찾은 원인은?

디렉토리 구조였다...;;;

 

/build.gradle

/src/test/java...  ← /src/main/java... 요래 해 놓으면 error 발생...;;;

 

 

그루비... 웬지 그... 루비(Ruby)? 스러운 이름이다...^^;

그루비는 JVM에서 동작하는 특징만큼이나

자바에 파이썬, 루비, 스몰톡등의 특징을 더한 동적객체지향프로그래밍 언어란다.

https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%A3%A8%EB%B9%84

 

http://groovy-lang.org/download.html

Windows installer를 다운받아 설치한다. 

 

 

 

 

 

 

 

 

 

 

 

 

역시나 설치한 다음에 환경변수를 손질(!) 해줘야 한다.

프로그램 설치 말미에 Check하면 해주겠다고 나왔었지만,

Path는 GROOVY_HOME/bin을 앞자리로 옮겨주셔야 한다...;;;

 

짜잔... 설치 끝...!!! 

 

 

스프링 어플리케이션을 빌드, 테스트, 배치하는데 사용하는 도구

 

http://gradle.org/gradle-download/

https://services.gradle.org/distributions/gradle-2.0-bin.zip

다운로드 받은 zip 파일을 바로 압축해제하면 설치 끝.

 

다음엔 환경변수 추가

내 컴퓨터 → 속성 → 고급 TAB → 환경변수

GRADLE_HOME

C:\Tmp\gradle-2.0

 

PATH에 경로 제일 앞에 추가 (그래야 한다나... 어쩐다나...)

%GRADLE_HOME%\bin;

 

 

 

 

다양한 경우에서 이런 Exception이 출몰하는 것 같다.

아래의 경우는 사용되는 Column/Table들의 이름들을 동적으로 설정한 것이며,
그 외에 결과 값의 Column 이름들이 변하는 경우에도 동일하게 적용된다.

<select id="fileInfo"  resultClass="java.util.Map" parameterClass="java.util.Map">



원문: http://jace.tistory.com/trackback/57
----------------------------------------------------------------------------------
[ibatis] 동적으로 column명을 사용할때 java.sql.SQLException: 부적합한 열 이름 에러 해결

ibatis를 사용하는 경우 동적으로 table name과 column name을 생성하여
쿼리를 실행해야 하는 경우가 발생한다.

예를 들면 다음과 같다.
<select id="fileInfo"  resultClass="java.lang.String" parameterClass="java.util.Map">
    SELECT $columnName$
      FROM $tableName$
    WHERE $pkName$ = #pkValue#
</select>

전혀 이상없는 구문이나 실행시 에러가 발생한다.
이상하게도 처음 실행시에는 에러가 발생하지 않으나,
두번째 부터 에러가 발생하기 시작한다.

WAS를 재기동하면 또 첫번째는 이상없으나, 두번째 부터 에러가 발생한다.

에러 내용은 다음과 같다.
(본인은 Spring AOP를 이용하여 ibatis 트랜잭션을 핸들링 하고 있으므로
에러 로그는 틀릴수 있다.)

[03-05 20:41:52] ERROR StandardWrapperValve.java:253 : Servlet.service() for servlet jsp threw exception
java.sql.SQLException: 부적합한 열 이름
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
        at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3296)
        at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1914)
        at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1515)
        at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:225)
        at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.ibatis.common.jdbc.logging.ResultSetLogProxy.invoke(ResultSetLogProxy.java:47)
        at $Proxy14.getString(Unknown Source)
        at com.ibatis.sqlmap.engine.type.StringTypeHandler.getResult(StringTypeHandler.java:35)
        at com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getPrimitiveResultMappingValue(BasicResultMap.java:611)
        at com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.getResults(BasicResultMap.java:344)
        at com.ibatis.sqlmap.engine.mapping.result.AutoResultMap.getResults(AutoResultMap.java:55)
        at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:381)
        at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:301)
        at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:190)
        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
        at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForObject(GeneralStatement.java:104)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:566)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:541)
        at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
        at org.springframework.orm.ibatis.SqlMapClientTemplate$1.doInSqlMapClient(SqlMapClientTemplate.java:243)
        at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:193)
        at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:241)
        at com.thinkfree.common.CommonDao.fileDelete(CommonDao.java:31)
        at com.thinkfree.common.CommonService.fileDelete(CommonService.java:29)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:299)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:172)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:139)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in SqlMaps/StatBid.xml. 
--- The error occurred while applying a result map. 
--- Check the StatBid.getStatSR02List-AutoResultMap. 
--- Check the result mapping for the 'nation_name' property. 
--- Cause: java.sql.SQLException: S0022: 'nation_name'은(는) 잘못된 열 이름입니다.
com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in SqlMaps/StatBid.xml. 
--- The error occurred while applying a result map. 
--- Check the StatBid.getStatSR02List-AutoResultMap. 
--- Check the result mapping for the 'nation_name' property. 
--- Cause: java.sql.SQLException: S0022: 'nation_name'은(는) 잘못된 열 이름입니다.
 at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:201)
 at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139)
 at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:567)
 at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:541)
 at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
 at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:231)
 at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:168)
 at org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:190)
 at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:229)
 at kr.or.icak.stat.bid.dao.StatBidDao.getStatSR02List(StatBidDao.java:29)
 at kr.or.icak.stat.bid.controller.StatBidController.getStatSR02List(StatBidController.java:139)
 at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:393)
 at kr.or.icak.common.core.DefaultController.handleRequestInternal(DefaultController.java:33)
 at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
 at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:723)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:663)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:394)
 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:358)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:818)
 at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:329)
 at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:138)
 at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:90)
 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
 at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:121)
 at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:90)
 at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:205)
 at jeus.servlet.engine.HttpRequestProcessor.run(HttpRequestProcessor.java:278)

해결하기 위해 구글링을 시작하였다.
역시나 다른 사람들 또한 이런문제로 고민을 했었다.

ibatis는 특정 id의 쿼리를 실행 한 후
해당 id의 쿼리를
캐쉬로 보관하고 있다가

동일한 id에 대한 요청시 캐쉬에 저장된 쿼리정보를 토대로 result값을 맵핑 시킨다고 한다.
(ibatis에서 제공하는 CacheModel과는 전혀무관한 얘기임)

이를 해결하기 위해선 remapResults="true" 속성을 추가해 주면 된다.
default가 remapResults="false" 이기때문에
항상 요청된 id와 동일한 게 캐쉬에 저장되어 있다면
캐쉬의 내용으로 맵핑하려 할것이고, 에러가 날것이다.

위 속성을 true로 지정하면
캐쉬의 내용을 무시하고 현재의 값을 가지고 맵핑시킴.

즉 아래와 같이 사용하면 된다.

<select id="fileInfo" remapResults="true"  resultClass="java.lang.String" parameterClass="java.util.Map">
    SELECT $columnName$
      FROM $tableName$
    WHERE $pkName$ = #pkValue#
</select>

  1. 임형구 2011.07.07 13:31

    감사합니다. 그렇군요... 필요할때 도움이 된 글이었습니다.

  2. 익명 2011.08.31 15:53

    비밀댓글입니다

  3. 불저노 2011.10.31 14:11

    감사합니다^^ 도움받고 가요~

  4. 포도젤리 2017.12.04 15:45

    정상 쿼리가 번갈아가며 안되길래 뭐가 문젠지 감도 안 왔는데 정말 감사합니다

  5. 2019.12.23 10:06

    고맙습니다...진짜... 계속 찾았는데 덕분에 해결했네여.. 고맙습니다!!!!

  6. 김세환 2021.06.04 18:55

    ibatis이 부분 계속 찾았었는데 감사합니다. 간단한 문제인데 몰라서 1시간넘게 삽질했네요 ㅠㅠ

+ Recent posts