您的位置:首页 > 其它

Ibatis使用笔记

2009-07-04 11:06 141 查看
最近做的一个项目,ORM层采用的是Ibatis框架,关于这个框架和Hibernate框架的比较就不再赘述,主要是记录自己使用的一些心得。

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

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

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>


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>


前者会做类型检查,而后者不会。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: