mybatis的参数处理

单个参数
#{变量名} 取出实参值
多个参数:会被封装成一个map
取值:#{param1},#{param2}....
也可以使用注解不适用paramN来获取
map的key:@param("id")
key:指定值@param("id")
value:#{指定的key}(#{id})
pojo:
如果多个参数正好是业务逻辑的数据模型,我们为您剋以直接传入pojo
#{属性名} 取出传入的pojo属性值


map:如果多个参数不是业务逻辑中的参数没有对应的pojo,为了方便我们也可以传入map
#{key}  取出map中对应的参数


如果多个参数不是业务模型中的数据,但是经常使用,推荐来编写一个To(Transfer Object)数据传输对象
page{
int index;
int size;
}
=======================例子========================
public Emp getEmp(@param("id")integer id,String name);
 取值:id===》  #{id/param1}  name===》#{param2} 
 
 public Emp getEmp(integer id,@param{"e"} Emp emp);
取值:  id===>#{param1}   name===> #{e.name/param2.name}
如果是Collection,list,set,类型或者是数组也会特别处理,把传入的list或者集合封装在map中
他们的key:  Collection(collection),List(list),Array(array)


 public Emp getEmpbyid(List<Integer> ids);
  取值:取出其中的一个id#{list(0)}
 ===============================结合mabatis源码===================
 没有源码的我,直接省略
 
 ====================属性取值======================
 #{}:可以获取map中的值,或者pojo对象属性的值
 ${}:可以获取map中的值,或者pojo对象属性的值
   区别:
   #{}是以预编译的形式将参数设置到sql语句中,preparedStament
   ${}是直接将取到的值拼接到sql语句中,会有安全问题
   原生sql不支持展位符我们就可以用${}进行取值 ,比如表名,排序等
   ·大多数情况下我们取参数的值都应该用#{}
   #{}更丰富的用法:
    规定参数的一些规则
    javaType,jdbcType,mode(存储过程) ,numericScale
    resultMap,typeHandler,jdbcTypeName, expression(未来准备支持的功能)
   
    jdbcType:通常在某种特定的条件下设置
    在数据为null时,有些数据库不能识别mybatis不能识别对null的默认处理,比如Oracle(报错)
    oracle报错:jdbcType other 无效的列类型,因为mybatis对所有的null都映射成原生的jdbc的other类型,oracle不识别
   
    mysql可以解析
    由于全局配置中:jdbcTypeofNull = otherType
    解决办法:
    1.可以在mapping.xml中配置:ename =#{ename,jdbcType=NULL}
    2.也可以再全局中去配置
    <settings>
        <setting name="jdbcTypeForNull" value="Null"></setting>
    </settings>
   
   
   
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值