mybatise 接收list集合参数

这是一个表的查询,根据学校ID查到对应数据

EntityWrapper<ViewCardNoListServer> ew =new EntityWrapper<ViewCardNoListServer>();
            ew.where("schoolcode = {0}", schoolCode);
            List<ViewCardNoListServer> list1 =iViewCardNoListServerService.selectList(ew);

现在把一个List集合数据插入表ViewCardNoListServer中,怎么判断表中是否已经存在相同主键的数据,有就做更新,没有做插入。。求大神指点

查询里做判断id = #{id},具体百度试试应该是这样的

Oracle的话可以使用merge语法,语法如下:

MERGE INTO T T1

USING (SELECT '1001' AS a,2 AS b FROM dual) T2

ON ( T1.a=T2.a)

WHEN MATCHED THEN

  UPDATE SET T1.b = T2.b

WHEN NOT MATCHED THEN 

  INSERT (a,b) VALUES(T2.a,T2.b);

MongoDB类似的数据库就直接用save方法更新就行了,
MySQL这种数据库你就只能在代码里边遍历判断了。

gvbjiu_*jbfxc.

)chhg.f#&﹉'jkibnf:%

可以在插入之前判断啊,存在的放入更新集合中,不存在的放入插入集合中,然后批量更新和插入

查的时候已经有主键了,foreach根据主键更新就好了。如果查完换表插入,就先查询再处理。

可以使用replace into或insert on duplicate key代替insert。

  1. replace into会判断主键和唯一键冲突,如果有冲突会先删除原理的记录再插入(先delete然后再insert),所以replace into时要注意如果发生冲突,执行的影响行数是2,(delete一次和insert一次)。
  2. 如果表数据特别大时使用replace into效率低于insert on duplicate key,因为replace在冲突时要先删除再插入,需要重新维护索引。但insert on duplicate在冲突时执行的是更新操作不涉及主键,不需要重新维护索引。