ibatis + Spring 多表查询(3)

根据上文,我们采用了resultMap,parameterClass的办法使用参数和返回。

删除的时候:

	sqlMap.delete("Contact.deleteAll", contct);

更新的时候:

	sqlMap.delete("Contact.updateById",contactId);

(注意,虽然句柄是delete,实际上映射的SQL是更新,只是不要求有返回值,用delete省些事)

插入的时候:

        sqlMap.insert("Contact.insert", contact);
还需要注意:

I (List<Contact>) sqlMap.queryForList("Contact.getAll", null);

II (Contact) sqlMap.queryForObject("Contact.getById",new Integer(1));

但我们在映射文件中配置的是 resultClass="com.sk.ibatis.model.Contact" 时 ,使用第一种语法。

映射结果为 resultMap="result"   (result为自定义的resultMap,请回去详细的看看这里)时,使用第二种语法。

其中的要义就是:

最终执行的SQL语句不同,让我们得到结果的方式就不同,select没有多加限制条件,它有可能会返回多条记录的,就用List,而如果确定它只返回一个记录的,比如getById(),就直接使用POJO实例化了。


对于在存储过程中的参数使用,其实方法还有另外一种,对于两种选择,我觉得上面的那种使用resultMap会更好一些,因为get/set直接注入了结果中,我们直接强制类型转化就得到结果了,不过这不是大多数的场合都是最好的。

在存储过程中,我们还会用到 OUT IN 和INOUT参数,其中,只有INOUT和OUT参数可以更改,而IN不能被更改,无法取回。

<parameterMap class="map" id="swapParameters">    
    <parameter property="namestr"  javaType="java.lang.String" jdbcType="varchar" mode="IN"/>    
    <parameter property="returnid"  javaType="java.lang.Integer" jdbcType="int" mode="OUT"/>    
</parameterMap>    
<procedure id="insertNameByProcedure" parameterMap="swapParameters">    
    {call UP_GETINSERTEDIDENTITY_TT(?,?)}     
</procedure> 

我们在参数列表中指定了三种类型分的数据:

在调用的时候,就需要生成一个Map:

HashMap<String,Object> paramMap = new HashMap<String,Object>();     
paramMap.put("namestr", insertname);     
paramMap.put("returnid", returnid);     

接返回值:

this.getSqlMapClientTemplate().queryForObject("insertNameByProcedure", paramMap);     
return (Integer)paramMap.get("returnid");  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值