namespace
1.namespace + 指令ID 会当做Map中key,namespace也是指令区分的一种方式
2.namespace是接口的全路径,汇集那个namespace当做接口全路径进行注册,生成代理类
resuliMap
id 属性
主键标识,作用和result一样
type 属性
具体映射成那个类
extends 属性
继承一个resultMap
result 标签
jdbcType
可省略 数据库中类型 mybatis 可以自动检查
javaType
可省略 属性类型 mybatis 自动检查
typeHandler
可缺省 mybatis 内置有
$ 和 #
$和#都能获取参数值
$:静态sql,参数是字符串拼接
#:动态sql,参数会进行预处理
区别
$存在sql注入得风险,#在一定程度上规避了这个问题
但是在参数是特殊关键字,列名,表明,函数名等特殊关键字时,不能进行转义,只能使用$
面试:既然两种方式都一样为什么还要保留 $
那么就要研究#这个符号到底是怎么处理的。
动态SQL
if标签
where标签
where取代where关键字,并且可以去掉最前面第一个add
set标签
set取代set关键字,去掉最后一个逗号
@param
mybatis 中默认只支持对象类型得参数,如果是多个简单参数则使用数组得格式获取值,为了便于获取值,使用@param注解,为参数设置别名