想实现的逻辑效果:
@Select("<script>" +
" SELECT T.TACHE_NAME TEXT, T.ID VALUE FROM WF_TABLE T WHERE T.TEMPLATE_ID = #{templateId} " +
" <if test='tacheId!= null and tacheId != \"\"'> AND T.ID <> #{tacheId} </if> " +
" AND TACHE_TYPE <> 'GATEWAY' AND TACHE_TYPE <> 'END'" +
"</script>")
List<Map<String, Object>> getTacheIdDicts(@Param("templateId") String templateId, @Param("tacheId") String tacheId);
启动报错:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'wfServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysWfTacheMapper' defined in file [D:\project\XXL\trr_services\workflow_service\target\classes\com\trr\platform\workflow\mapper\WfMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: org.apache.ibatis.builder.BuilderException: Could not find value method on SQL annotation. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 161; 元素内容必须由格式正确的字符数据或标记组成。
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:321)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318)
... 31 common frames omitted
原因:
在@Select注解中采用script标签包围拼接SQL语句时不能在标签里有>大于或<小于符号出现,
需要对这样的标签符号进行转义。转义写法如下:
原符号写法 <、 <=、 >、 >=、 &、 '、 "、
替换符号 <、 <=、 >、 >=、 &、 '、 "、
我的这个是想表示不等于 直接改成!= 就行 不用<>这种写法
改后的写法
@Select("<script>" +
" SELECT T.TACHE_NAME TEXT, T.ID VALUE FROM WF_TABLE T WHERE T.TEMPLATE_ID = #{templateId} " +
" <if test='tacheId!= null and tacheId != \"\"'> AND T.ID != #{tacheId} </if> " +
" AND TACHE_TYPE != 'GATEWAY' AND TACHE_TYPE != 'END'" +
"</script>")
List<Map<String, Object>> getTacheIdDicts(@Param("templateId") String templateId, @Param("tacheId") String tacheId);
完事