一场不期而遇的面试杀局
故事要从我那位程序员朋友老杜讲起。
那天,他刚面完一家中型互联网公司,跟我在楼下的奶茶店见面,手里还拎着一杯没喝几口的多肉葡萄,坐下就开始诉苦:“小米啊,MyBatis 的主键回填,面试官怎么能问得这么细?”
我好奇地挑了挑眉:“就主键那点事,问出花来了吗?”
“花不花我不知道,反正我答得是稀碎。”老杜一脸郁闷,“我以为 useGeneratedKeys=true 就完事了,结果他让我说出几种方式,还要说出适用场景,还要知道什么数据库支持……”
我一听,这不正好就是你找我喝奶茶的理由吗?于是,我轻轻掀起奶茶盖,一边搅拌冰块,一边给他讲起了“主键回填”的那些事儿。
主键回填,到底是什么?
在说“怎么获取”之前,我们得搞清楚“为什么要获取”。
在我们插入一条数据,比如一条用户记录时,往往这个用户的主键 ID 是数据库自动生成的(通常是自增的)。这时候,我们插完数据之后,业务层还得用这个主键去干点别的事,比如:
- 插完用户,还得插他的角色,需要用这个用户 ID;
- 插完订单,还得插订单明细;
- 插完文章,还得记录日志。
所以我们必须得知道:刚才插入的那条数据的主键,到底是个啥?
这就到了 MyBatis 回填主键 的核心问题。
方法一:useGeneratedKeys + keyProperty(推荐用法)
这是最常见、最“自动化”的方式,配置简单,效率也高。
只需要在 insert 标签里加上: