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 ...
随机推荐
- 【HDOJ】2217 Visit
挺好的一道DP. /* 2217 */ #include <iostream> #include <cstdio> #include <cstring> #incl ...
- 贪心:SPOJ Backup Files
BACKUP - Backup Files no tags You run an IT company that backs up computer data for large offices. ...
- HDOJ 2058 The sum problem
Problem Description Given a sequence 1,2,3,--N, your job is to calculate all the possible sub-sequen ...
- sqlserver授予用户查看执行计划的权限
sqlserver查看语句的执行计划是非常重要的,可以提高开发人员代码的质量.所以有必要授予开发人员对数据库查看执行计划的权限. 查看执行计划的权限属于数据库一级别的权限,具体例子如下 use ...
- 布隆过滤器的java实现
package com.kaikeba.data.jobspider.util; import java.util.BitSet; public class Bloomfilter { private ...
- OpenERP里面继承的用法
最近开发遇到了这样的问题:需要往HR模块里面添加一些查询条件,这些查询条件是HR模型里已经写好的,直接修改HR肯定可以实现,但是HR模块一旦修改就会导致一系列的错误,OE开发中的一项基本原则就是不可修 ...
- 微信小程序开发手册
目录: 数据绑定 条件渲染 列表渲染 API FAQ: <block wx:for> 和 <view wx:for>的区别 wx:if 什么情况下判断为假 坑列表: 微信版本6 ...
- jquery ajaxform上传文件返回不提示信息的问题
在使用jquery的ajaxform插件进行ajax提交表单并且上传文件的时候,返回类型datatype :json但是后台通过写出一个json对象后,在执行完以后没有进入success函数,而是直接 ...
- Linux 上Oracle RAC 10g 升级到 Oracle RAC 11g
了解如何在 Oracle Enterprise Linux 5 上逐步将 Oracle RAC 10g 第 2 版升级到 Oracle RAC 11g. Oracle 数据库 11g(即,新一代网格计 ...
- linux网络编程学习笔记之五 -----并发机制与线程�
进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我仅仅是举几个样例作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省 ...