博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis中的${}和#{}
阅读量:6387 次
发布时间:2019-06-23

本文共 3012 字,大约阅读时间需要 10 分钟。

1关于${}中是写value还是参数名称

按照常规想法,当使用like时,把#{}换成${}来完成sql语句,

因为用#{}的话,需要手动在添加参数时,将参数用"%xx%"包围住,编译后sql语句才是like %xx%,

或者要么用${}来完成,'%${value}%' 这个对应值会直接占据这个位置,并不像#{}那样先用?占据位置,再代入参数,相比上面一种方法,${}更方便,但是也增加了sql注入的风险,所以一般情况,尽量不要用后面一种方法。


但是,这次动态查询时,依旧时写了'%${value}%',而不是'%${title}%',发生了如下错误

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'value' not found. Available parameters are [param5, author, pubulishTime, title, param3, param4, param1, content, param2, statusCode]Caused by: org.apache.ibatis.binding.BindingException: Parameter 'value' not found. Available parameters are [param5, author, pubulishTime, title, param3, param4, param1, content, param2, statusCode]复制代码

复制代码
复制代码
复制代码

总结:

参考中评论区博主补充的一句当接受类型为简单类型时,只能写Value


2关于测试时遇到,通过网址来加入参数时,参数为中文,log中参数却显示为乱码

http://localhost:12306/test2?titleKey=%E6%AC%A7%E6%96%87[DEBUG] 2019-03-05 01:02:08,821 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)==>  Preparing: select * from article where title like '%欧æ%' [DEBUG] 2019-03-05 01:02:08,822 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)==> Parameters: [DEBUG] 2019-03-05 01:02:08,824 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)<==      Total: 0复制代码
  • 数据库建库建表都设置了编码utf8
  • jdbc属性配置中也加了
?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8复制代码
  • jsp页面也有
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>复制代码

将like语句换成=也是一样,有中文依旧乱码

http://localhost:12306/test3?title=%E5%BA%93%E5%85%B9%E9%A9%AC%EF%BC%9A%E8%A6%81%E4%BF%9D%E6%8C%81%E8%BF%87%E5%8E%BB%E4%B8%A4%E5%9C%BA%E7%9A%84%E7%B2%BE%E7%A5%9E%E9%9D%A2%E8%B2%8C%EF%BC%8C%E4%B8%8B%E4%B8%80%E4%B8%AA%E4%BA%BA%E8%A6%81%E7%AB%99%E5%87%BA%E6%9D%A5[DEBUG] 2019-03-05 01:15:43,630 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)==>  Preparing: select * from article where title=? [DEBUG] 2019-03-05 01:15:43,631 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)==> Parameters: åºå¹é©¬ï¼è¦ä¿æè¿å»ä¸¤åºçç²¾ç¥é¢è²ï¼ä¸ä¸ä¸ªäººè¦ç«åºæ¥(String)[DEBUG] 2019-03-05 01:15:43,634 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)<==      Total: 0复制代码

所以和like还是=没有关系,

总结:

暂时没找到解决方法,但是通过页面,写一个input标签来输入中文时,却没有问题

转载于:https://juejin.im/post/5c7d54ef6fb9a049b13ef123

你可能感兴趣的文章
Ubuntu用户通过Folder Color修改文件夹颜色-让桌面更多彩
查看>>
《C语言程序设计与实践(第2版)》——3.2 数据类型
查看>>
《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素
查看>>
《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.7 小结
查看>>
如何在 Linux 中创建一个共享目录
查看>>
分布式TCP压力测试工具 tcpcopy
查看>>
《术以载道——软件过程改进实践指南》—第1章1.1节对CMMI的基本认识
查看>>
geohash vs PostGIS
查看>>
Seven Microservices Anti-patterns
查看>>
Vertica的这些事&lt;十一&gt;—— Vertica 管理
查看>>
CSS3 overflow-x 属性
查看>>
联想G480类似没有小键盘开关的机器
查看>>
【云栖大会】人工智能:智,在云端
查看>>
Docker基础技术:Linux Namespace【上】
查看>>
MySQL的binlog数据如何查看
查看>>
应对海量并发请求,首席布道师谈微服务的应用架构设计
查看>>
MySQL · 捉虫动态 · event_scheduler 慢日志记错
查看>>
angular.js 嵌套路由
查看>>
mysql远程连接数据库很慢
查看>>
017-封装-OC笔记
查看>>