MyBatis 这小子是怎样拿到 insert 时生成的主键的?
SQL 语句执行insert,这谁都会,执行之后,返回结果是影响行数。但是在我们应用开发场景中,有些表的主键采用自增生成。这个时候,你怎么能把这个自增的主键值拿到呢? 你说这还不简单,马上再执行一下select,就都查出来啦。 你的where是什么才限定刚好是新增的那一条呢? 你说,那我查主键值最大的那一条呢? 也不灵。毕竟insert和select之间是有时间差的,此时可能有其他写入操作。 一些常用的 ORM 框架在执行完save操作之后,一般都会把新生成的主键自动回填到PO对象中。那它们是怎么做到的呢? 带着这个疑问,咱们一起来看一下,时下活跃在各大应用中的明星MyBatis。 MyBatis 是如何取到自增主键值的 我们知道, MyBatis 无论通过注解,还是XML配置的形式,将待执行的SQL包装起来,在执行时通过代理进行解析。 我们分析过MyBatis的大致执行原理,为何只写一个接口就能映射到一个XML或者注解中对应的SQL逻辑上 其中有个类MappedStatement,我们在XML里配置的各类SQL 都会转成这样一个实例。这个类中包含了大量配置相关的信息。 我们摘一段代码...