mybatis怎么智能判断数据是否需要插入?

布尔值 发布于 2016/10/13 19:30
阅读 1K+
收藏 0

mybatis怎么智能判断数据是否需要插入?
前端传了10条数据, Controler转化为一个List<MsgEntity>如下面这样的:

{msg:[{id:1,content:"未修改"},{id:2,content:"未修改"},{id:2,content:"已经修改"}....]}

前2条数据是数据库中存在的,没有改,不插入到数据库;

3-5条数据是改过的,要更新到数据库中,

6-10条数据是新加的,要插入到数据库中

关键是数据对比,我可以手动把数据库中的所有值查出来手动做对比,但是这太累了....完全没有效率呀字段多了我总不能一个一个的对比吧....

况且数据库有成千上万行数据呀,每次更新时都查一遍多没效率呀

用Hibernate完全不用管这类事情....


其实最好是分成3个接口,让前端分别使用.但是前端使用了旧框架,没法重构

加载中
1
szwx855
szwx855

前端数据展现,首先数据都是你查询出来的,除非是他自己加的一行。

你把都揉到一起去做,当然费事了。如果前端是新加入,可以设置type=0(新加入),改过的数据设置为type=1(更新)其它查出来的前端数据,默认是type=2(未修改)。

这样一个提交,Json中已经将每条数据告诉你类型了。你根据类型将List归类如下,该调哪个SQL就哪个SQL呗。

List needInsert = new ArrayList() ; needInsert.insert();

List needUpdate = new ArrayList();needUpdate();

剩下 的就是不需要做任何事的。就不做了,这不就完事了。

我主要意思是,对比工作是前端告诉你。而不是你后端的事。前端经常这么让后端累的一B。艹 。。

布尔值
布尔值
非常赞同你的做法. 还有一种更复杂的情况,是删除了某一条数据,加一个type=-1
0
爱吃荷包蛋i
爱吃荷包蛋i
直接全用insert,主键冲突后,在catch块里尝试update
insights
insights
回复 @布尔值 : insert .....................values() on duplicate key set x=a; ;
布尔值
布尔值
回复 @布尔值 : 比较 replace into 一个道理
布尔值
布尔值
效率不够好....
0
就是个精虫上脑的地方
就是个精虫上脑的地方
别总想着一口吃完一顿饭 拆解下
0
vvtf
vvtf

insert ignore ?

insert .. on duplicate key ?


其实最简单的就是insert replace.

为什么呢?

因为你的数据只有修改或者没修改,没修改再replace一下数据还是没变化,而修改的就替换了,反正就是以插入的数据为准。

0
爱生活-爱美女
爱生活-爱美女
delete 10 条  再insert10条不就行了
返回顶部
顶部