下边看一下mybatis的映射文件。

<insert >
insert into teacher(teacher_id,teacher_name) values (#{teacherId},#{teacherName})
</if>
</insert>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
可以看到mybatis的实现思路也是先查询Id是否存在,在根据count判断是insert还是update。

说明
1.实现原理是selectKey做第一次查询,然后根据结果进行判断,所以这里的order="BEFORE"是必须的,也是因BEFORE,所以没法通过<bind>标签来临时存储中间的值,只能在入参中增加属性来存放。

2.就上面这个例子而言,就要求实体类中包含count属性(可以是别的名字)。否则selectKey的结果没法保存,如果入参是个Map类型,就没有这个限制。

3.这种方式只是利用了selectKey会多执行一次查询来实现的,但是如果你同时还需要通过selectKey获取序列或者自增的id,就会麻烦很多(oracle麻烦,其他支持自增的还是很容易),例如我在上一篇中利用selectKey 获取主键Id。

4.建议单独查看学习一下selectKey的用法。
————————————————
版权声明:本文为CSDN博主「老贼大魔王」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36637705/article/details/78530442

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-09
  • 2021-08-28
  • 2022-01-17
  • 2021-11-25
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-15
  • 2021-05-16
相关资源
相似解决方案