单个参数:mybatis不会作特殊处理java
多个参数:mybatis会作特殊处理,即把多个参数封装成一个map ,key:param1....paramN,value:传入的参数值,#{}就是就是从map中获取指定的key的value,即#{param1},#{param2}等sql
多个参数处理:自定义封装参数的key数据库
若是多个参数正好是咱们业务逻辑的数据模型(能够只是模型的部分数据)就能够直接传入pojoexpress
若是多个参数不是咱们咱们业务逻辑的模型,没有对应的pojo,不推荐为了方便,咱们能够传入map数组
若是多个参数不是咱们咱们业务逻辑的模型,可是常用,推荐封装成一个vo(其实就是一个简单的javabean,把全部参数封装到一个java类中)安全
若是形参只有一个,可是形参的类型是集合(collection,list,set)或者数组,也会作特殊处理,把它们封装到map中mybatis
#{}取值和${}取值的区别oracle
#{}更丰富的用法code
规定参数的一下规则:javaType、 jdbcType、 mode(存储过程)、 numericScale、
resultMap、 typeHandler、 jdbcTypeName、 expression(将来准备支持的功能)xml
jdbcType:数据库类型:一般须要在某种特定的条件下被设置:
在咱们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。好比Oracle(报错);
JdbcType OTHER:无效的类型;由于mybatis对全部的null都映射的是原生Jdbc的OTHER类型,oracle不能正确处理;
因为全局配置中:jdbcTypeForNull=OTHER;oracle不支持;两种办法
#{email,jdbcType=OTHER};
jdbcTypeForNull=NULL
<setting name="jdbcTypeForNull" value="NULL"/>