项目中用到了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);