ibatis中批量更新我这样写有问题吗?

素剑步青尘 2014-02-21 12:01:53
Customer是一个实体类
ids这个字段是Customer实体类中是存在的附加字段,数据库中是没有的,但是我这样写不行,求高手!

<update id="UpdateCustomerUserIdById" parameterClass="Customer">
<![CDATA[
update customer
set userinfo_id=#userId#
WHERE id in ($ids$)
]]>
...全文
768 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
素剑步青尘 2014-03-07
  • 打赏
  • 举报
回复
感谢大家,其实这样写是可以的,就是我的实参其实是customerId
liqi_wj 2014-02-24
  • 打赏
  • 举报
回复

<select id="getCarveoutStrs" parameterClass="com.jml.coproject.domain.CoProject" resultClass="com.jml.coproject.domain.DicCarveoutMode">
    	SELECT carveoutName FROM dic_carveout_mode WHERE carveoutID in ($carveoutIDS$) 
    </select>
我们程序里面的一段 ,你看看把
火焰舞者 2014-02-24
  • 打赏
  • 举报
回复
可以传进来的 但是你用的 id in ($ids$) $$不会默认拼'' 所以说 你传进来的值错了!少了'' 正确的形式应该是 '1', '2', '3' 这样就ok了!
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 18 楼 xiaokailele 的回复:
[quote=引用 15 楼 xiaokailele 的回复:] [quote=引用 14 楼 defonds 的回复:] [quote=引用 13 楼 xiaokailele 的回复:] [quote=引用 7 楼 defonds 的回复:]
<statement id="getMenu" parameterClass="java.util.List"
resultMap="menuResult">

select * from APP_MENU where (TASK_ID,AUTH_CODE) in 
<iterate property="SampleData" open="(" close=")" conjunction=",">$SampleData[].task$,$SampleData[].authCode$</iterate>

</statement>
这里有个传入 list 的 where in 操作的例子,你可以参考一下
版主这个和我在程序里面用for循环差不多的![/quote] 不一样吧。 这个只操作数据库一次。 程序里用 for 循环的话,就是 N 次数据库操作。[/quote] 嗯好的,我试试[/quote] 我现在就是想用类多传几个参数进来,String只能传递一个参数,其它参数就只能写死了!我之前就是ids是String传递过来的,状态什么的写死了![/quote] 我用类不也是同样的道理吗?怎么就不可以呢?
Defonds 2014-02-21
  • 打赏
  • 举报
回复
#status# 是你传进来的 hashMap 集合里的 key 为 status 的那个值。
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 15 楼 xiaokailele 的回复:
[quote=引用 14 楼 defonds 的回复:] [quote=引用 13 楼 xiaokailele 的回复:] [quote=引用 7 楼 defonds 的回复:]
<statement id="getMenu" parameterClass="java.util.List"
resultMap="menuResult">

select * from APP_MENU where (TASK_ID,AUTH_CODE) in 
<iterate property="SampleData" open="(" close=")" conjunction=",">$SampleData[].task$,$SampleData[].authCode$</iterate>

</statement>
这里有个传入 list 的 where in 操作的例子,你可以参考一下
版主这个和我在程序里面用for循环差不多的![/quote] 不一样吧。 这个只操作数据库一次。 程序里用 for 循环的话,就是 N 次数据库操作。[/quote] 嗯好的,我试试[/quote] 我现在就是想用类多传几个参数进来,String只能传递一个参数,其它参数就只能写死了!我之前就是ids是String传递过来的,状态什么的写死了!
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 14 楼 defonds 的回复:
[quote=引用 13 楼 xiaokailele 的回复:] [quote=引用 7 楼 defonds 的回复:]
<statement id="getMenu" parameterClass="java.util.List"
resultMap="menuResult">

select * from APP_MENU where (TASK_ID,AUTH_CODE) in 
<iterate property="SampleData" open="(" close=")" conjunction=",">$SampleData[].task$,$SampleData[].authCode$</iterate>

</statement>
这里有个传入 list 的 where in 操作的例子,你可以参考一下
版主这个和我在程序里面用for循环差不多的![/quote] 不一样吧。 这个只操作数据库一次。 程序里用 for 循环的话,就是 N 次数据库操作。[/quote] <update id="updateStatusBatch" parameterClass="hashMap"> update Question set status = #status# <dynamic prepend="where questionId in"> <isNotNull property="actionIds"> <iterate property="actionIds" open="(" close=")" conjunction=","> #actionIds[]# </iterate> </isNotNull> </dynamic> </update > 这个表示没看懂,#status# 这个参数值如何得到?property="actionIds" actionIds是哪里来的?
AndyXuq 2014-02-21
  • 打赏
  • 举报
回复
理论上来说 ,楼主这样写 应该没问题啊。。 你去掉<![CDATA[ ]]>这个试试呢。。
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 14 楼 defonds 的回复:
[quote=引用 13 楼 xiaokailele 的回复:] [quote=引用 7 楼 defonds 的回复:]
<statement id="getMenu" parameterClass="java.util.List"
resultMap="menuResult">

select * from APP_MENU where (TASK_ID,AUTH_CODE) in 
<iterate property="SampleData" open="(" close=")" conjunction=",">$SampleData[].task$,$SampleData[].authCode$</iterate>

</statement>
这里有个传入 list 的 where in 操作的例子,你可以参考一下
版主这个和我在程序里面用for循环差不多的![/quote] 不一样吧。 这个只操作数据库一次。 程序里用 for 循环的话,就是 N 次数据库操作。[/quote] 嗯好的,我试试
Defonds 2014-02-21
  • 打赏
  • 举报
回复
引用 13 楼 xiaokailele 的回复:
[quote=引用 7 楼 defonds 的回复:]
<statement id="getMenu" parameterClass="java.util.List"
resultMap="menuResult">

select * from APP_MENU where (TASK_ID,AUTH_CODE) in 
<iterate property="SampleData" open="(" close=")" conjunction=",">$SampleData[].task$,$SampleData[].authCode$</iterate>

</statement>
这里有个传入 list 的 where in 操作的例子,你可以参考一下
版主这个和我在程序里面用for循环差不多的![/quote] 不一样吧。 这个只操作数据库一次。 程序里用 for 循环的话,就是 N 次数据库操作。
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 7 楼 defonds 的回复:
<statement id="getMenu" parameterClass="java.util.List"
resultMap="menuResult">

select * from APP_MENU where (TASK_ID,AUTH_CODE) in 
<iterate property="SampleData" open="(" close=")" conjunction=",">$SampleData[].task$,$SampleData[].authCode$</iterate>

</statement>
这里有个传入 list 的 where in 操作的例子,你可以参考一下
版主这个和我在程序里面用for循环差不多的!
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 10 楼 liqi_wj 的回复:
这种写法是可以的,但用$$这种写法容易被sql注入
现在不可以了,哥们能看出来哪里有问题不?
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 9 楼 zhangxiaojie0321 的回复:
为什么不在业务层用for循环 然后一条一条更新呢
一层层更新这个太没技术挑战性了
liqi_wj 2014-02-21
  • 打赏
  • 举报
回复
这种写法是可以的,但用$$这种写法容易被sql注入
ay转身遇 2014-02-21
  • 打赏
  • 举报
回复
为什么不在业务层用for循环 然后一条一条更新呢
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 7 楼 defonds 的回复:
<statement id="getMenu" parameterClass="java.util.List"
resultMap="menuResult">

select * from APP_MENU where (TASK_ID,AUTH_CODE) in 
<iterate property="SampleData" open="(" close=")" conjunction=",">$SampleData[].task$,$SampleData[].authCode$</iterate>

</statement>
这里有个传入 list 的 where in 操作的例子,你可以参考一下
我的是ibatis中批量操作操作的mysql
Defonds 2014-02-21
  • 打赏
  • 举报
回复
<statement id="getMenu" parameterClass="java.util.List"
resultMap="menuResult">

select * from APP_MENU where (TASK_ID,AUTH_CODE) in 
<iterate property="SampleData" open="(" close=")" conjunction=",">$SampleData[].task$,$SampleData[].authCode$</iterate>

</statement>
这里有个传入 list 的 where in 操作的例子,你可以参考一下
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 5 楼 defonds 的回复:
ids 这个 String 的格式怎么样的?多个 id 之间怎么分开? 恐怕不行,你试试把它换成 list 或者 map 传进来
我的ids传过来是1,2,3,4这样的
Defonds 2014-02-21
  • 打赏
  • 举报
回复
ids 这个 String 的格式怎么样的?多个 id 之间怎么分开? 恐怕不行,你试试把它换成 list 或者 map 传进来
素剑步青尘 2014-02-21
  • 打赏
  • 举报
回复
引用 3 楼 defonds 的回复:
[quote=引用 2 楼 xiaokailele 的回复:] [quote=引用 1 楼 defonds 的回复:] ids 是用什么传进来的,map 还是 list
我在Customer实体类中定义了ids变量[/quote]知道。问的是 ids 变量是什么类型的[/quote] ids是String类型的
加载更多回复(3)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧