项目启动报错【Application run failedorg.springframework.beans.factory.UnsatisfiedDependencyException...】已解决
在MyBatis的XML文件中,当需要使用特殊符号如 “>”、“<”、“>=”、“<=”、“<>”等时,我们可以采取以下两种常见的处理方式:1. 使用xml转义:将特殊符号替换为对应的实体引用,以确保XML解析器正确处理这些字符。常见的有 < 代表“<”,> 代表 “>”,& 代表 &," 代表 ",' 代表 '。2. 使用CDATA节区:将包含特殊字符的文本放置在CDATA节区中,以保留原始的文
·
报错内容:
前段
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-11-16 10:28:21.629 [main] ERROR org.springframework.boot.SpringApplication:858 - Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'permissionsInterceptor': Unsatisfied dependency expressed through field 'sysUserService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserMapper' defined in file [C:\Users\Administrator\Desktop\projects\jeecg-service\jeecg-boot-module-system\target\classes\org\jeecg\modules\system\mapper\SysUserMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception...
后段
Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\Users\Administrator\Desktop\projects\jeecg-service\jeecg-boot-module-system\target\classes\org\jeecg\modules\testRecord\mapper\xml\TestRecordMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1458; columnNumber: 43; The content of elements must consist of well-formed character data or markup.
at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:594)
at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.afterPropertiesSet(MybatisSqlSessionFactoryBean.java:433)
at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.getObject(MybatisSqlSessionFactoryBean.java:627)
at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration.sqlSessionFactory(MybatisPlusAutoConfiguration.java:197)
at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$a97dec5.CGLIB$sqlSessionFactory$1(<generated>)
at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$a97dec5$$FastClassBySpringCGLIB$$410c346e.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration$$EnhancerBySpringCGLIB$$a97dec5.sqlSessionFactory(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 57 common frames omitted
解决过程:报错原因从前段看不出,搜了半天搜不到...直接看后段,是mapper.xml文件中出现报错!
报错原因:<> 符号是特殊符号,需要做处理。
and ifnull(xxx, '') <> ''
解决办法:
1. 使用xml转义
使用XML实体引用来表示这些特殊符号。下面是对应的实体引用:
- 大于符号(>):使用实体引用
>
- 小于符号(<):使用实体引用
<
- 大于等于符号(>=):使用实体引用
>=
- 小于等于符号(<=):使用实体引用
<=
<select id="getUsersByAge" resultType="User">
SELECT * FROM users
WHERE age >= #{minAge} AND age <= #{maxAge}
</select>
2. 使用CDATA节区
<select id="getUsersByAge" resultType="User">
SELECT * FROM users
WHERE age <![CDATA[ >= ]]> 18
</select>
总结:
在MyBatis的XML文件中,当需要使用特殊符号如 “>”、“<”、“>=”、“<=”、“<>”等时,我们可以采取以下两种常见的处理方式:
1. 使用xml转义:将特殊符号替换为对应的实体引用,以确保XML解析器正确处理这些字符。常见的有 < 代表“<”,> 代表 “>”,& 代表 &," 代表 ",' 代表 '。
2. 使用CDATA节区:将包含特殊字符的文本放置在CDATA节区中,以保留原始的文本内容,而不需要转义特殊字符。使用CDATA节区时,将文本内容放置在 <![CDATA[ ... ]]> 的标记内,如<![CDATA[ >= ]]>
更多推荐
已为社区贡献1条内容
所有评论(0)