1.where条件遗漏情况

<select id="findActiveBlogLike" resultType="Blog">SELECT * FROM BLOG <where> <if test="state != null">state = #{state}</if> <if test="title != null">AND title like #{title}</if></where>
</select>遗漏了state != null &&title != null的情况,导致全表查询,甚至会导致内存泄露。
可以采用下面的方法将别的情况写在otherwise中,或者在otherwise中写 1=2。
<choose><when test="processStatus != null &amp;&amp; processStatus != '' &amp;&amp; processStatus != '-110'">and process_status = #{processStatus,jdbcType=VARCHAR} </when><otherwise>and process_status != 1</otherwise></choose>

2.对特殊符号的处理

下面的这些符号大于号、小于号、不等号、&、单引号和双引号在Mybatis的xml文件中不能有效识别,如果直接这样写是有问题,会导致文件编译出错。> < <>  & ' " 两种办法来解决
第一种是把这些符号进行转义:&gt;          > &lt;           < &lt;&gt;   <> &amp;      &&apos;      ' &quot;      "
左边的就是转义的字符表示,用这些就能走在xml文件中正确使用步骤一种不能正常使用的特殊符号了。另外一种解决的方式:
<![CDATA[ >= ]]>
来表示特殊符号,可以把整个sql语句写在<![CDATA[  ]]>中,这样这些特殊符号就可以正常编译了

3.if判断注意点

注意:下面这种写法只适用于 id 类型为字符串.<if test="id != null and id != '' ">id = #{id}</if>
如果id类型为int 当id=0时 这个判断不会进入.

4.编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式来避免sql注入,不要使用“${xxx}”

1.采用“#{xxx}”这样的格式的sql会采用预编译的形式,用?来占位<select id="getBlogById" resultType="Blog"parameterType=”int”>
select id,title,author,content
from blog where id=#{id}
</select>最后会编译成
selectid,title,author,content from blog where id = ?
这样在执行的时候 ,再将具体的参数注入进去,防止sql注入。2.采用“${xxx}”这样的格式的sql,在编译阶段就回将参数带入
<select id="orderBlog" resultType="Blog"parameterType=”map”>
select id,title,author,content
from blog order by ${orderParam}
</select>
最后编译形成的sql为
select id,title,author,content fromblog order by id
这样就可能会sql注入。因此在必须需要使用 ${xxx}的形式的时候(需要用此来动态创建表明和列名的时候),在代码层面来做手工过滤(不能有空格和and or等关键词,只能由26个字母组成等)。

转载于:https://www.cnblogs.com/shibazijiang/p/5568715.html

mybatis审查要点相关推荐

  1. 新《生产建设项目水土保持方案技术审查要点》要求下水土保持方案编制高级实践技术应用

    查看原文>>>新<生产建设项目水土保持方案技术审查要点>要求下水土保持方案编制高级实践技术应用 目录 一.新<生产建设项目水土保持方案技术审查要点>解读 二. ...

  2. 计算机软件合同审查要点有,关于技术合同的审核要点清单

    原标题:关于技术合同的审核要点清单 一.技术合同的项目名称 技术合同的项目名称应当简明.规范,技术合同的项目名称通常需要反应技术合同标的的名称.如技术开发合同.技术转让合同.技术咨询合同.技术服务合同 ...

  3. 2020面试要点大全

    2020年面试总结,下面主要是面试要点,感觉面试就是按照套路来的,万变不离其宗,掌握这些就没问题. 1.Java基础 Java常用锁 Java反射详解 Java提高equals()与hashCode( ...

  4. 智合同丨广告合同的审查技巧和方法

    前天有朋友问我,广告类合同的审查技巧和方法,今天就和小智梳理下相关内容,有不到位的地方还往大家指正. 我们知道,对于任何需要审查的合同,不论合同的标题是如何表述的,首先应当通过阅读整个合同的全部条款, ...

  5. 智合同丨建设工程合同的审查技巧和方法

    建设工程合同是指承包人进行工程建设,发包人支付价款的合同.建设工程合同的客体是工程.这里的工程是指土木建筑工程和建筑业范围内的线路.管道.设备安装工程的新建.扩建.改建及大型的建筑装修装饰活动. 一. ...

  6. 首发 阿里P8整理万字MyBatis实战笔记,精简易懂,开源免费下载

    MyBatis作为国内经常使用的持久层框架,其内部代码的设计非常优秀.比如在开发过程中,有能力对框架进行深度的定制化开发,解决BUG也更加得心应手!另外学习开发者是如何设计高扩展性.低耦合性的代码,便 ...

  7. 企业架构研究总结(39)——TOGAF架构能力框架之架构委员会和架构合规性

    3. 架构委员会 正如前面所说,一个用来对架构治理策略的实现进行监督的跨组织的架构委员会是架构治理策略成功的主要要素之一.架构委员会应该能够代表所有主要干系人的需求,并且通常还需要对整个架构的审查及维 ...

  8. C/C++基础知识10道题,你都会吗?

    题目1:指针基础知识 题述:描述指针数组和数组指针(指向数组的指针)的区别并举例 考察点:C指针的基础知识 答案:考虑如下 char *q[] = {"xxx", "xx ...

  9. 在印度与软件相关的发明可不可以申请专利?

    在印度与软件相关的发明可不可以申请专利? 吴国平  北京市隆安律师事务所 事实上,这是个非常复杂的问题.即使你耐心读完本文,你会发现,你仍然无法回答这个问题.无论如何,文本将从印度专利法.印度专利局审 ...

最新文章

  1. 计算机视觉库OpenCV中shape和resize函数的区别
  2. 坐标系旋转变换公式图解
  3. 怎么使用Docker搭建PHP开发环境呢?
  4. mysql 5.6 slave stop_mysql 5.6 Replication 参数
  5. 无忧PHP企业网站内容管理系统源码v2.8 标准版
  6. python网页调用摄像头_Python调用摄像头
  7. matlab乘幂的指数是矩阵,信号与系统MATLAB基本语法.ppt
  8. Laravel 开发笔记
  9. C语言全局变量和局部变量同名时的使用
  10. html+css模拟京东商城登陆首页
  11. cubase打开时,别的软件和网页无法正常播放视频。
  12. 计算机桌面上的声音图标没了怎么办,电脑声音图标不见了怎么办超详细教程
  13. 大内密探HMM(转)
  14. Redis数据库及五种数据类型的常用命令详解
  15. 国外的号码如何批量加入通讯录,Excel表格如何批量导入安卓苹果手机通讯录,如何快速的添加whatsApp,下面介绍具体的方法和软件
  16. cad隐藏图层命令快捷键_cad解锁图层命令(cad图层全部解锁快捷键)
  17. 可口可乐VS元气森林,谁的酒量更微醺
  18. 高通狂吹新GPU:赶超桌面显卡
  19. 【架构】分布式服务架构与微服务架构
  20. Python之进程 3 - 进程池和multiprocess.Poll

热门文章

  1. pytorch torchvision.datasets.ImageFolder
  2. python Supervisor
  3. redis 缓存 淘汰
  4. Elasticsearch IK分词器
  5. 百万年薪的腾讯员工买得起深圳房子吗?
  6. 阿里组织架构的”大中台+小前台“
  7. Spring MVC学习总结(14)——SpringMVC测试框架之mockMVC详解
  8. App后台开发运维和架构实践学习总结(5)——App产品从需求到研发到开发到上线到产品迭代全过程
  9. php小小通讯录,2009年小学信息技术优质课一等奖教学设计四上《小小通讯录》...
  10. java面试关于ssh的_[Java教程]ssh面试题