Mybatis报无效的js关系运算符符异常

MyBatis3传递空值参数报异常的解决_纯粹_新浪博客
MyBatis3传递空值参数报异常的解决
MyBatis3传递空值参数报异常的解决
在使用Mybatis 3 时,发现了这个问题,当插入数据时,如果有一个字段为空值时,系统会报异常,导致插入数据失败。
异常信息类似:org.springframework.jdbc.UncategorizedSQLException:
Error setting null for
parameter&#9 with JdbcType OTHER . Try setting a
different JdbcType for this parameter or a different
jdbcTypeForNull configuration
property.&
在SQL语句中使用#{name,jdbcType=VARCHAR}&​指定JDBC类型;
在配置文件指定jdbcTypeForNull​=NULL(Oracle数据库);推荐使用;
博客等级:
博客积分:0
博客访问:742,324
关注人气:0
荣誉徽章:Mybatis在映射XML文件中配置了排序项,但排序结果总是没有变化。
经过查阅网上资料,才发现原来是变量定义转义问题
(1)对于形如#{variable} 的变量,Mybatis会将其视为字符串值,在变量替换成功后,缺省地给变量值加上引号。例如:
&order by #{variable1}
假设variable1传入值为“name”,则最终SQL语句等同为:
order by &name&
而这个结果在日志里是发现不了的,该句子语法检查亦能通过,可以执行。
(2)对于形如${variable}的变量,Mybatis会将其视作直接变量,即在变量替换成功后,不会再给其加上引号。例如:
order by ${variable1}
假设variable1传入值为“name”,则最终SQL语句等同为:
order by name
为想要的正确结果。
所以,对于order by变量的传入,应使用${}形式,同理,排序顺序ASC/DESC的变量传入,也应使用${}形式,否则,在使用ORACLE数据库时:
(1)ORDER by #{sortField}& #{sortOrder}
会出现“ORA-01745: 无效的主机/绑定变量名“
(2)ORDER by ${sortField}& #{sortOrder}
”ORA-00907: 缺失右括号“异常。
(3)ORDER by ${sortField}& ${sortOrder}
结果正确。
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by &111&, 如果传入的值是id,则解析成的sql为order by &id&。$将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id。#方式能够很大程度防止sql注入。 $方式无法防止Sql注入。 $方式一般用于传入数据库对象,例如传入表名。一般能用#的就别用$。
ps: 在使用mybatis中还遇到&![CDATA[]]&的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程。
所以order by 之后要使用$而非#。
本文已收录于以下专栏:
相关文章推荐
mybatis中 $,# 的区别,在order by时转义导致无效
MyBatis动态生成排序的问题
网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。
今天查看sql语句,发现mysql中field不能按指定id排序了,网上搜索了一下资料并没有人跟我遇到同样的情况。仔细查看sql代码发现order by 排序后面还有条件筛选。例如下面的例子: tes...
一、mysql field自定义排序函数的格式
order by field(value,str1,str2,str3,str4,,,,,,strn)
其中value后面的参数自定义...
字符串替换默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符...
在 mybatis 的 xml中,为一个SQL语句配置order by 子句时,需要这个排序的字段是前端传递过来的,而且排序的顺序(升序 OR 降序)也是由前端传递过来的。对于这种需求,我起初写成了下...
public List selectWithFileByCaseId(Long caseId, List userIdList, Page evidencePge) {
SuitEviden...
文章内容下周整理
曾写过一篇博客,是接触了一段时间的mybatis开发总结的:《Mybatis,怀疑--使用--感悟》。又过去了一段时间,前不久和别人联调接口,遇到了mybatis的排序问题。这篇博客就来总结一下,在m...
使用#orderItem#是会有问题的,ibatis会自动给你加上单引号,应该使用如下 
   
     
     $orderItem$
     ]]&
...
他的最新文章
讲师:董西成
讲师:唐宇迪
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)mybatis-SpringMVC+Mybatis调用后台报空指针异常,代码没查出错误,页面也有参数传进来,求解答
作者:用户
浏览:1044 次
SpringMVC+Mybatis调用后台报空指针异常,代码没查出错误,页面也有参数传进来,求解答5C[DEBUG]1:07:30,234org.springframework.
SpringMVC+Mybatis调用后台报空指针异常,代码没查出错误,页面也有参数传进来,求解答
[DEBUG] 11:07:30,234 org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver
Resolving exception from handler [public java.util.Map cn.sg.controller.BackStageController.QueStoreList(javax.servlet.http.HttpServletRequest)]: java.lang.NullPointerException
[DEBUG] 11:07:30,236 org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver
Resolving exception from handler [public java.util.Map cn.sg.controller.BackStageController.QueStoreList(javax.servlet.http.HttpServletRequest)]: java.lang.NullPointerException
[DEBUG] 11:07:30,236 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
Resolving exception from handler [public java.util.Map cn.sg.controller.BackStageController.QueStoreList(javax.servlet.http.HttpServletRequest)]: java.lang.NullPointerException
[DEBUG] 11:07:30,236 org.springframework.web.servlet.DispatcherServlet
Could not complete request
java.lang.NullPointerException
at cn.sg.controller.BackStageController.QueStoreList(BackStageController.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
八月 12, :30 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [sasmvc] in context with path [/CUPBOARD] threw exception [Reque nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at cn.sg.controller.BackStageController.QueStoreList(BackStageController.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
你看截图,错误显示是你BackStageController里面报异常了,你检查下是不是你这个控制器类里面用到的service或者其它类的对象没有在spring配置文件里面配置好
解决方案二:
import cn.sg.service.BackStageS
@Controller
@RequestMapping("/cupboard")
public class BackStageController {
@Autowired
@Qualifier("BackStageService")
private static BackStageService backStageS
public static void setBackStageService(BackStageService backStageService) {
BackStageController.backStageService = backStageS
@RequestMapping("queryStoreList.htm")
public String getChoose1(HttpServletRequest request, Model model){
return "backstage/store_list";
@RequestMapping(value = "storelist.htm",produces = {"application/charset=UTF-8"})
@ResponseBody
public Map&String,Object& QueStoreList(HttpServletRequest request){
String date = request.getParameter("date");
Integer pageIndex = Integer.parseInt(request.getParameter("pageIndex"));
Integer pageSize = Integer.parseInt(request.getParameter("pageSize"));
System.out.println(date+"////"+pageIndex+"////"+(pageIndex-1)*pageSize+"////"+pageSize);
Map&String,Object& params = new HashMap&String,Object&();
params.put("date",date);
params.put("name", "");
params.put("area", "");
params.put("start", (pageIndex-1)*pageSize);
params.put("limit", pageSize);
Map&String,Object& productmap = backStageService.qryProductByPage(params);
for (String key : productmap.keySet()) {
System.out.println("key= "+ key + " and value= " + productmap.get(key));
@RequestMapping(value = "getPages.htm",produces = {"application/charset=UTF-8"})
@ResponseBody
public Map&String,Object& getPages(HttpServletRequest request){
String date = request.getParameter("date");
Integer pageIndex = Integer.parseInt(request.getParameter("pageIndex"));
Integer pageSize = Integer.parseInt(request.getParameter("pageSize"));
System.out.println(date+"////"+pageIndex+"////"+(pageIndex-1)*pageSize+"////"+pageSize);
Map&String,Object& params = new HashMap&String,Object&();
params.put("date",date);
params.put("name", "");
params.put("area", "");
params.put("start", (pageIndex-1)*pageSize);
params.put("limit", pageSize);
//BackStageMap storeList = new BackStageMap();
Map&String,Object& pagemap = backStageService.qryPages(params);
@RequestMapping(value = "storelistsearch.htm",produces = {"application/charset=UTF-8"})
@ResponseBody
public Map&String,Object& QueStoreListByParams(HttpServletRequest request){
String date = request.getParameter("date");
String store = request.getParameter("store");
String area = request.getParameter("area");
System.out.println("date:"+date+"***"+"store:"+store+"***"+"area:"+area);
BackStageMap storeList = new BackStageMap();
Map&String,Object& map = storeList.getStoreMaps();
解决方案三:
package cn.sg.
import java.util.M
import org.springframework.beans.factory.annotation.A
import org.springframework.beans.factory.annotation.Q
import org.springframework.stereotype.S
import cn.sg.dao.ProductD
@Service("BackStageService")
public class BackStageService {
@Autowired
@Qualifier("productDaoImpl")
private ProductDao productD
public void setProductDao(ProductDao productDao) {
this.productDao = productD
public Map qryAllProduct(){
Map map = productDao.qryAllProduct();
public Map qryPages(Map params){
Map map = productDao.qryPages(params);
public Map qryProductByPage(Map params){
Map map = productDao.qryProductByPage(params);
解决方案四:
package cn.sg.dao.
import java.util.HashM
import java.util.L
import java.util.M
import org.apache.ibatis.session.SqlS
import org.apache.ibatis.session.SqlSessionF
import org.springframework.stereotype.R
import cn.sg.dao.ProductD
import cn.sg.model.Product1;
import cn.sg.model.inter.ProductMapper1;
import cn.sg.util.MyBatisU
@Repository("productDaoImpl")
public class ProductDaoImpl implements ProductDao {
* 获取所有商品
public Map qryAllProduct() {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
ProductMapper1 pMapper = session.getMapper(ProductMapper1.class);
List productLists = pMapper.qryAllProduct();
for (Product1 p : productLists)
System.out.println(p.getName()+","+p.getNum()+","+p.getArea());
map = new HashMap();
map.put("products", productLists);
map.put("success", "true");
} catch (Exception e) {
e.printStackTrace();
} finally{
session.close();
public Map&String, Object& qryPages(Map&String,Object& params) {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
ProductMapper1 pMapper = session.getMapper(ProductMapper1.class);
Map&String, Object& map =
int page = 0;
Product1 product1 = pMapper.qryProductNum(params);
page = (product1.getPages())/(Integer.parseInt((String) params.get("pageSize")));
System.out.println(page);
map = new HashMap&String, Object&();
map.put("pages", page);
map.put("success", "true");
} catch (Exception e) {
e.printStackTrace();
} finally{
session.close();
public Map&String, Object& qryProductByPage(Map&String, Object& params) {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
ProductMapper1 pMapper = session.getMapper(ProductMapper1.class);
Map&String, Object& map =
List&Product1& productList = pMapper.qryProductByPage(params);
for (Product1 p : productList)
System.out.println(p.getName()+","+p.getNum()+","+p.getArea());
map = new HashMap&String, Object&();
map.put("products", productList);
map.put("success", "true");
} catch (Exception e) {
e.printStackTrace();
} finally{
session.close();
解决方案五:
package cn.sg.model.
import java.util.L
import java.util.M
import cn.sg.model.Product1;
public interface ProductMapper1 {
//获取所有商品
public List qryAllProduct();
//查询商品总数
public Product1 qryProductNum(Map params);
//分页查询商品
public List qryProductByPage(Map params);
解决方案六:
BackStageController.questoreList 里面报的空指针,具体的自己找一下
解决方案七:
支持楼主,总结的不错,源码地址下载:
【云栖快讯】浅析混合云和跨地域网络构建实践,分享高性能负载均衡设计,9月21日阿里云专家和你说说网络那些事儿,足不出户看直播,赶紧预约吧!&&
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供类似问题 &
ASP.NET &&&&最新内容
ASP.NET &&&&相关内容Mybatis常见错误
我的图书馆
Mybatis常见错误
第一个错误& Mapped Statements collection does not contain value for ...... 可以如下查找错误 1、映射文件 例如People.xml的namespace是否指向正确的mapper 2、2个映射文件的namespace不可以相同 3、查询语句中 getSqlSession().selectList(path); 查询路径是否有错。 4、映射文件中的每一个映射语句的id是否正确 第二个错误 org.springframework.jdbc.BadSqlGrammarException: SqlMapC bad SQL grammar []; nested exception is mon.jdbc.exception.NestedSQLException:& --- The error occurred in com/ivo/etl/stg/model/Pubca.xml. --- The error occurred while applying a parameter map. --- Check the s_pub_getPubca-InlineParameterMap. --- Check the statement (query failed). --- Cause: java.sql.SQLException: ORA-00911: 无效字符 Caused by: java.sql.SQLException: ORA-00911: 无效字符
注: 无效的列类型& “;”&&
&&&&&&& 无效的列类型&&& 参数为 null映射文件中,语句末尾多了分号导致的。 第三个错误 mybatis Mapped Statements collection already contains value mybatis并发错误,前台多个请求并发请求mapper 原因大概是请求时mybaits解析sql并执行导致的并发错误。 mybaits初始化时加上以下这句可以解决。让Mybatis初始化时就编译sql语句。 sqlSesssionTemplate.getConfiguration().buildAllStatement
第四个错误&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&& & 无效的列索引&&& :& 解决& #&& 用 $ 替换 。&&&&
&&&&&&& 原因:例&&& to_date(&&&&& #{end}&&& ,&&&& 'yyyy-mm-dd hh24:mi:ss')&& 正确
&&&&&&&&&&&&&&&&&&&&&&&&&&& to_date(&&&&& '#{end}'&& ,&&&& 'yyyy-mm-dd hh24:mi:ss')&&&错误
&&&&&&&&&&&&&&&&&&&&&&&&&&& to_date(&&&&& ${end}&&& ,&&&&& 'yyyy-mm-dd hh24:mi:ss')&&&错误
&&&&&&&&&&&&&&&&&&&&&&&&&&& to_date(&&&&& '${end}'& ,&&&&&&&'yyyy-mm-dd hh24:mi:ss')&& 正确
&&& 注意 单引号
TA的最新馆藏[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢

我要回帖

更多关于 c语言关系运算符 的文章

 

随机推荐