废话连篇2010.04.14

最近做的一个项目,自己搭建ORM层采用的是Ibatis框架,使用中遇到些理解出错之处。

记录自己使用的一些心得。

    1 用MAP向ibatis配置文件传参问题

    通常我们通过DAO调用配置文件时,加如下参数parameterClass="java.util.Map",在Dao中,我们调用map.put(key,value)方法,如下:  


[code="java"]  
Map parms = new HashMap();   
parms.put("startDate", example.getDatatime());   
parms.put("endDate", getLastDayOfMonth(example.getDatatime()));   

<select id="selectCountStatusByDate" resultClass="int" parameterClass="java.util.Map">  
 select count(*) from s_upload_log l where  l.datatime  between #startDate:VARCHAR# and #endDate:VARCHAR#   
</select>  
Map parms = new HashMap();
parms.put("startDate", example.getDatatime());
parms.put("endDate", getLastDayOfMonth(example.getDatatime()));

<select id="selectCountStatusByDate" resultClass="int" parameterClass="java.util.Map">
 select count(*) from s_upload_log l where  l.datatime  between #startDate:VARCHAR# and #endDate:VARCHAR#
</select>


或者也可以用parameterClass="某个对象类型",Ibatis配置文件直接可以获取对象get方法的各个字段。

但如果我们不用parameterClass="某个对象类型"的话,将该对象put到Map中,那对应的Ibatis配置文件用到的对象中的各个值,可以获取的到吗?答案是肯定的,用法是将map的key作为配置文件的前缀,同时不指名parameterClass,就OK了,代码如下:

SUploadLog record = new SUploadLog();    
Map map = new HashMap();   
map.put("upload", record);   


<update id="updateLogByTemplateId">  
    update S_UPLOAD_LOG   
    <dynamic prepend="set">  
      <isNotNull prepend="," property="upload.sname">  
        SNAME = #upload.sname:VARCHAR#   
      </isNotNull>  
      <isNotNull prepend="," property="upload.status">  
        STATUS = #upload.status:CHAR#   
      </isNotNull>  
    </dynamic>  
     where TEMPLATEID = #upload.templateid# and DATATIME=#upload.datatime#     
 </update>  
SUploadLog record = new SUploadLog(); 
Map map = new HashMap();
map.put("upload", record);

<update id="updateLogByTemplateId">
    update S_UPLOAD_LOG
    <dynamic prepend="set">
      <isNotNull prepend="," property="upload.sname">
        SNAME = #upload.sname:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="upload.status">
        STATUS = #upload.status:CHAR#
      </isNotNull>
    </dynamic>
     where TEMPLATEID = #upload.templateid# and DATATIME=#upload.datatime#  
 </update>

 

 


2 ##参数和$$参数的区别

Ibatis的配置XML中,#parm#和$parm$ 是有区别的,例如:


<select id="SELECT-MENU" parameterClass="java.util.Map" resultMap="Result4Menu">  
 select * from S_FUNCTION where SPARENT=#id#      
</select>  

<select id="SELECT-MENU" parameterClass="java.util.Map" resultMap="Result4Menu">  
 select * from S_FUNCTION where SPARENT=$id$   
</select>  
<select id="SELECT-MENU" parameterClass="java.util.Map" resultMap="Result4Menu">
 select * from S_FUNCTION where SPARENT=#id#   
</select>

<select id="SELECT-MENU" parameterClass="java.util.Map" resultMap="Result4Menu">
 select * from S_FUNCTION where SPARENT=$id$
</select>

 


前者会做类型检查,而后者不会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值