mybatis审查要点
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 && processStatus != '' && processStatus != '-110'">
and process_status = #{processStatus,jdbcType=VARCHAR}
</when>
<otherwise>
and process_status != 1
</otherwise>
</choose>
2.对特殊符号的处理
下面的这些符号大于号、小于号、不等号、&、单引号和双引号在Mybatis的xml文件中不能有效识别,如果直接这样写是有问题,会导致文件编译出错。
> < <> & ' "
两种办法来解决
第一种是把这些符号进行转义:
> >
< <
<> <>
& &
' '
" "
左边的就是转义的字符表示,用这些就能走在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个字母组成等)。
mybatis审查要点的更多相关文章
- iBatis & myBatis & Hibernate 要点记录
iBatis & myBatis & Hibernate 要点记录 这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较. 1. iBatis iBatis主 ...
- mybatis使用要点(2019.5.19)
接口入参 只有一个参数,叫啥都没问题 有两个参数以上,需使用@Param,否则名字依次为0.1.2和param1.param2.param3 一般用#,防sql注入:偶尔用$,比如需要动态表名等 接口 ...
- 企业架构研究总结(39)——TOGAF架构能力框架之架构委员会和架构合规性
3. 架构委员会 正如前面所说,一个用来对架构治理策略的实现进行监督的跨组织的架构委员会是架构治理策略成功的主要要素之一.架构委员会应该能够代表所有主要干系人的需求,并且通常还需要对整个架构的审查及维 ...
- TOGAF架构能力框架之架构委员会和架构合规性
TOGAF架构能力框架之架构委员会和架构合规性 3. 架构委员会 正如前面所说,一个用来对架构治理策略的实现进行监督的跨组织的架构委员会是架构治理策略成功的主要要素之一.架构委员会应该能够代表所有主要 ...
- 不需要怎么修改配置的Mybatis整合Spring要点
首先对于Mybatis的主配置文件,只需要修改一处地方,将事务交给Spring管理,其它地方可以原封不动. <?xml version="1.0" encoding=&quo ...
- mybatis xml配置文件要点说明
mapper映射方式: 1 一一具体列举的方式 2扫描package 如: <mappers> <!-- 告知映射文件方式1,一个一个的配置 <mapper resource= ...
- Mybatis【逆向工程,缓存,代理】知识要点
前言 本文主要讲解Mybatis的以下知识点: Mybatis缓存 一级缓存 二级缓存 与Ehcache整合 Mapper代理 使用Mapper代理就不用写实现类了 逆向工程 自动生成代码 Mybat ...
- Mybatis【一对多、多对一、多对多】知识要点
Mybatis[多表连接] 我们在学习Hibernate的时候,如果表涉及到两张的话,那么我们是在映射文件中使用<set>..<many-to-one>等标签将其的映射属性关联 ...
- mybatis :xml文件中传入参数和if标签结合使用时要点
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti ...
随机推荐
- 用c写99乘法表
int main(int argc,char **argv){ int a; for(a=1;a<=9;a++){ int b; for(b=1;b<=a;b++){ printf(&qu ...
- HDU 4612 Warm up(手动扩栈,求树上哪两个点的距离最远)
题目大意: 给你一个无向图,问加一条边之后最少还剩下几座桥. (注意重边处理) 分析:其实当我们把边双连通分量给求出来之后我们就能将连通块求出来,这样我们就可以重新构图.重新构造出来的图肯定是一颗 ...
- 数位DP:SPOJ KPSUM - The Sum
KPSUM - The Sum One of your friends wrote numbers 1, 2, 3, ..., N on the sheet of paper. After that ...
- 【宽搜】Vijos P1206 CoVH之再破难关
题目链接: https://vijos.org/p/1206 题目大意: 给你开始和结束两张4x4的01图,每次操作只能够交换相邻的两个格子(有公共边),问最少的操作步数. 题目思路: [搜索] 这题 ...
- 获取Android设备屏幕分辨率
1.Android 4.3引入的wm工具: a.获取Android设备屏幕分辨率: adb shell wm size b.获取android设备屏幕密度: adb shell wm density ...
- [Locked] Alien Dictionary
Alien Dictionary There is a new alien language which uses the latin alphabet. However, the order amo ...
- [Javascript] Promise
Promise 代表着一个异步操作,这个异步操作现在尚未完成,但在将来某刻会被完成. Promise 有三种状态 pending : 初始的状态,尚未知道结果 fulfilled : 代表操作成功 r ...
- openfire for mac 无法启动
http://blog.csdn.net/winer888/article/details/49886281 ①:sudo chmod -R 777 /usr/local/openfire/bin ② ...
- 将对象格式的style转换为字符串格式
var style = { position:'absolute', background:'red', width:'2px', height:'2px', color:'#fff', top:x, ...
- linux —— 学习笔记(软件操作:安装、卸载、执行)
目录: 0.相关基本命令 1.安装软件 2.卸载软件 3.打开软件 0.相关基本命令 与软件操作相关的主要命令有:dpkg 和 apt-get . dpkg : “dpkg ...