项目中用到了ibatis。看了很多篇在XML 里动态编写sql 的文章!
我突然有了疑问,在一个statement 中可以包含多个 dynamic 子标签么?
于是 试验了一把,嘿嘿 果然能行~~
dynamic 标签的作用是 可以自动添加或者移除 在SQL语句中 多余的表单符号 不用再担心 少了逗号,and 连接符号之类的
贴代码。。。(前提是你要理解dynamic 动态标签的基本作用)
下面代码 是一段插入数据 片段 我所要说的是只要数据库字段没有强制的 “不许为空”的话 都可以这样写,这样加大了 灵活性,只要设置作为参数的对象 sheetState 的任何一个或者N个属性 都成。可以进行动态的插入 ,也不用再担心SQL 语句会因为少写插入字段出错的问题。
当然如果表字段多的话 我还是不建议使用这样写~~ 因为每个字段都要去写入判断标签内的,会很长很长。
但虽然麻烦,但只要写完一个,以后的所有关于此表的添加 都可以这样通用了。
<statement id="addSheetState" parameterClass="sheetState" resultClass="Integer">
INSERT INTO
<dynamic prepend="EOMS_SHEETSTATE" open="(" close=")">
<isNotEmpty prepend="," property="v_parachsheetid">
V_PARACHSHEETID
</isNotEmpty>
<isNotEmpty prepend="," property="v_sheetno">
V_SHEETNO
</isNotEmpty>
<isNotEmpty prepend="," property="v_sheetstatus">
V_SHEETSTATUS
</isNotEmpty>
<isNotEmpty prepend="," property="dtm_statustime">
DTM_STATUSTIME
</isNotEmpty>
<isNotEmpty prepend="," property="v_people">
V_PEOPLE
</isNotEmpty>
<dynamic open="(" close=")" prepend="VALUES">
<isNotEmpty prepend="," property="v_parachsheetid">
#v_parachsheetid#
</isNotEmpty>
<isNotEmpty prepend="," property="v_sheetno">
#v_sheetno#
</isNotEmpty>
<isNotEmpty prepend="," property="v_sheetstatus">
#v_sheetstatus#
</isNotEmpty>
<isNotEmpty prepend="," property="dtm_statustime">
#dtm_statustime#
</isNotEmpty>
<isNotEmpty prepend="," property="v_people">
#v_people#
</isNotEmpty>
</dynamic>
</statement>
这是测试时调用的代码
Eoms_SheetState sheetstate=new Eoms_SheetState();
sheetstate.setV_parachsheetid("testid");
sheetstate.setDtm_statustime("2010-11-13 11:31:21");
sheetstatedao.addSheetState(sheetstate);
本文介绍了一个使用Ibatis实现的动态SQL插入操作案例。通过在XML配置文件中使用dynamic标签和isNotEmpty条件判断,实现了根据对象属性动态构建SQL语句的功能,增强了代码的灵活性并减少了错误。

737

被折叠的 条评论
为什么被折叠?



