mybatis sql mapping问题

摔倒的葱 2016-11-16 06:33:56
[2016-11-16 18:04:56,671][ERROR][ReloadableSqlSessionFactoryBean.java:458] Failed to parse mapping resource: 'file [C:\CGVONLNAPI\workspace\CGVONLNAPI-Library\build\classes\cj\onlineapi\members\sql\oracle\ReceiveTableService.sqlx]'
org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{THAT_GRD_CD,
#{THAT_CD}. Check syntax #{property|(expression), var1=value1, var2=value2, ...}
at frameone.core.common.ibatis.ConfigurableXMLMapperBuilder.configurationElement(ConfigurableXMLMapperBuilder.java:143)
at frameone.core.common.ibatis.ConfigurableXMLMapperBuilder.parse(ConfigurableXMLMapperBuilder.java:115)
at frameone.core.common.ibatis.ReloadableSqlSessionFactoryBean.buildSqlSessionFactory(ReloadableSqlSessionFactoryBean.java:455)
at frameone.core.common.ibatis.ReloadableSqlSessionFactoryBean.afterPropertiesSet(ReloadableSqlSessionFactoryBean.java:328)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at cj.common.syscommon.web.listener.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:39)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{THAT_GRD_CD,
#{THAT_CD}. Check syntax #{property|(expression), var1=value1, var2=value2, ...}
at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.parseParameterMapping(SqlSourceBuilder.java:128)
at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.buildParameterMapping(SqlSourceBuilder.java:68)
at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.handleToken(SqlSourceBuilder.java:63)
at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:50)
at org.apache.ibatis.builder.SqlSourceBuilder.parse(SqlSourceBuilder.java:42)
at org.apache.ibatis.scripting.defaults.RawSqlSource.<init>(RawSqlSource.java:39)
at org.apache.ibatis.scripting.defaults.RawSqlSource.<init>(RawSqlSource.java:33)
at org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseScriptNode(XMLScriptBuilder.java:68)
at org.apache.ibatis.scripting.xmltags.XMLLanguageDriver.createSqlSource(XMLLanguageDriver.java:36)
at frameone.core.common.ibatis.ConfigurableXMLStatementBuilder.parseStatementNode(ConfigurableXMLStatementBuilder.java:122)
at frameone.core.common.ibatis.ConfigurableXMLMapperBuilder.buildStatementFromContext(ConfigurableXMLMapperBuilder.java:158)
at frameone.core.common.ibatis.ConfigurableXMLMapperBuilder.buildStatementFromContext(ConfigurableXMLMapperBuilder.java:151)
at frameone.core.common.ibatis.ConfigurableXMLMapperBuilder.configurationElement(ConfigurableXMLMapperBuilder.java:141)
... 40 more
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 25
at java.lang.String.charAt(String.java:658)
at org.apache.ibatis.builder.ParameterExpression.trimmedStr(ParameterExpression.java:129)
at org.apache.ibatis.builder.ParameterExpression.option(ParameterExpression.java:122)
at org.apache.ibatis.builder.ParameterExpression.jdbcTypeOpt(ParameterExpression.java:97)
at org.apache.ibatis.builder.ParameterExpression.property(ParameterExpression.java:68)
at org.apache.ibatis.builder.ParameterExpression.parse(ParameterExpression.java:45)
at org.apache.ibatis.builder.ParameterExpression.<init>(ParameterExpression.java:37)
at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.parseParameterMapping(SqlSourceBuilder.java:124)
... 52 more

我的sql写的是
MERGE INTO /* [receiveTableService][receiveTable2][20161115][dgq] */
MM_POLICYSITE p
USING DUAL np
ON (p.THAT_GRD_CD = #{THAT_GRD_CD}
and p.THAT_CD = #{THAT_CD}
and p.AVL_FR_DY = #{AVL_FR_DY})
WHEN MATCHED THEN
UPDATE
SET
p.LOWEST_PRICE_DIFF_FG_YN = NVL(#{LOWEST_PRICE_DIFF_FG_YN},LOWEST_PRICE_DIFF_FG_YN),
p.AVL_TO_DY = NVL(#{AVL_TO_DY},AVL_TO_DY),
p.REG_K_ID = NVL(#{REG_K_ID},REG_K_ID),
p.REG_DT = NVL(#{REG_DT},to_date(REG_DT,'yyyymmddhh24miss')),
p.UPD_K_ID = NVL(#{UPD_K_ID},UPD_K_ID),
p.UPD_DT = NVL(#{UPD_DT},to_date(UPD_DT,'yyyymmddhh24miss')),
p.INF_DT =NVL(#{INF_DT},to_date(INF_DT,'yyyymmddhh24miss'))
WHEN NOT MATCHED THEN
INSERT
(THAT_GRD_CD,
THAT_CD,
AVL_FR_DY,
LOWEST_PRICE_DIFF_FG_YN,
AVL_TO_DY,
REG_K_ID,
REG_DT,
UPD_K_ID,
UPD_DT,
INF_DT
)
VALUES (#{THAT_GRD_CD,
#{THAT_CD},
#{AVL_FR_DY},
#{LOWEST_PRICE_DIFF_FG_YN},
#{AVL_TO_DY},
#{REG_K_ID},
to_date(#{REG_DT},'yyyymmddhh24miss'),
#{UPD_K_ID},
to_date(#{UPD_DT},'yyyymmddhh24miss'),
to_date(#{INF_DT},'yyyymmddhh24miss')
)


这个sql单独在数据库里是可以跑起来的,但是放到代码启动tomcat就会提示我上面错误,
然后我用另一个类似的sql放在代码里tomcat就可以跑起来不会报错
下面是我的另一个sql
MERGE INTO 
MM_POLICYSITE p
USING (select #{THAT_GRD_CD} as THAT_GRD_CD,
#{THAT_CD} as THAT_CD,
#{AVL_FR_DY} as AVL_FR_DY,
#{LOWEST_PRICE_DIFF_FG_YN} as LOWEST_PRICE_DIFF_FG_YN,
#{AVL_TO_DY} as AVL_TO_DY,
#{REG_K_ID} as REG_K_ID,
to_date(#{REG_DT},'yyyymmddhh24miss') as REG_DT,
#{UPD_K_ID} as UPD_K_ID,
to_date(#{UPD_DT},'yyyymmddhh24miss') as UPD_DT,
to_date(#{INF_DT},'yyyymmddhh24miss') as INF_DT
from dual) np
ON (p.THAT_GRD_CD = np.THAT_GRD_CD
and p.THAT_CD = np.THAT_CD
and p.AVL_FR_DY = np.AVL_FR_DY)
WHEN MATCHED THEN
UPDATE
SET
p.LOWEST_PRICE_DIFF_FG_YN = np.LOWEST_PRICE_DIFF_FG_YN,
p.AVL_TO_DY = np.AVL_TO_DY,
p.REG_K_ID = np.REG_K_ID,
p.REG_DT = np.REG_DT,
p.UPD_K_ID = np.UPD_K_ID,
p.UPD_DT = np.UPD_DT,
p.INF_DT = np.INF_DT
where p.THAT_GRD_CD=np.THAT_GRD_CD
and p.THAT_CD = np.THAT_CD
and p.AVL_FR_DY = np.AVL_FR_DY
WHEN NOT MATCHED THEN
INSERT
VALUES (np.THAT_GRD_CD,
np.THAT_CD,
np.AVL_FR_DY,
np.LOWEST_PRICE_DIFF_FG_YN,
np.AVL_TO_DY,
np.REG_K_ID,
np.REG_DT,
np.UPD_K_ID,
np.UPD_DT,
np.INF_DT
)

江湖救急啊
...全文
245 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧