mybatis报错,在tomcat下偶尔会报如下错,求解

sxm1220 2015-07-26 09:36:27
Message:[public abstract org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller.handleRequest(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception:END!--]
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression ''. Cause: org.apache.ibatis.ognl.ExpressionSyntaxException: Malformed OGNL expression: [org.apache.ibatis.ognl.ParseException: Encountered "<EOF>" at line 1, column 0.
Was expecting one of:
":" ...
"not" ...
"+" ...
"-" ...
"~" ...
"!" ...
"(" ...
"true" ...
"false" ...
"null" ...
"#this" ...
"#root" ...
"#" ...
"[" ...
"{" ...
"@" ...
"new" ...
<IDENT> ...
<DYNAMIC_SUBSCRIPT> ...
"\'" ...
"`" ...
"\"" ...
<INT_LITERAL> ...
<FLT_LITERAL> ...
]
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:346)
at com.sun.proxy.$Proxy6.selectOne(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:154)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:70)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38)
...全文
5642 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
suyongsutao 2017-12-27
  • 打赏
  • 举报
回复
同问,求大神解答
qq_23978879 2017-04-16
  • 打赏
  • 举报
回复
原代码
<select id="queryById" resultType="Seckill" parameterType="long">
SELECT seckill_id,name,number,start_time,end_time,create_time
from seckill
WHERE seckill_id = #{seckillId}
<!-- #{}和${}的区别 -->
<!-- 最简单的区别就是${}解析穿过来的参数值不带单引号,#{}解析传过来参数带单引号 -->
-- 使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义
-- ${}方式会引发SQL注入的问题、同时也会影响SQL语句的预编译,所以从安全性和性能的角度出发,能使用#{}的情况下就不要使用${}
-- 但是${}在什么情况下使用呢?比如,动态SQL中的字段名,如:ORDER BY ${columnName}
</select>

修改后
<select id="queryById" resultType="com.max.entity.Seckill" parameterType="long">
<!-- #{}和${}的区别 -->
<!-- 最简单的区别就是${}解析穿过来的参数值不带单引号,#{}解析传过来参数带单引号
使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义
${}方式会引发SQL注入的问题、同时也会影响SQL语句的预编译,所以从安全性和性能的角度出发,能使用#{}的情况下就不要使用${}
但是${}在什么情况下使用呢?比如,动态SQL中的字段名,如:ORDER BY ${columnName}-->
SELECT seckill_id,sec_name,sec_number,start_time,end_time,create_time
from seckill
WHERE seckill_id = #{seckillId};
</select>

就可以正常识别了,在xml配置文件里面,不能像sql文件里一样做"--"注释,否则会理解成ognl表达式
suciver 2015-07-31
  • 打赏
  • 举报
回复
这是ognl表达式的错误,目测是楼主在xml里写sql时在标签上用了ognl,楼主认真检查下
sxm1220 2015-07-30
  • 打赏
  • 举报
回复
不是写在jsp,是后台配置的,关键是偶尔会报错,尤其是重启tomcat后;大部分时间都正常
  • 打赏
  • 举报
回复
你的sql写在jsp页面里面?
scmod 2015-07-27
  • 打赏
  • 举报
回复
xml里面的sql贴出来看下... 经常忘了结尾不要加分号什么的...
董小姐_123 2015-07-27
  • 打赏
  • 举报
回复
可能是你在配置xml的时候,配置信息出现的错误!
qq_15051701 2015-07-26
  • 打赏
  • 举报
回复
是不是你的数据中有特殊符号?

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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