鳳九~ 2024-09-11 16:06 采纳率: 50%
浏览 25

mybatis的selectkey标签多数据源这中情况怎么处理啊

前提:我现在有三种数据库 分别是 oracle、mysql、pg
场景:现在使用mybatis操作表,执行insert语句,但是我需要返回当前这次插入的主键,其中mysql的主键已被设置为自增,oracel和pg是通过序列查询的
问题:在执行插入的时候,使用selectkey获取本次插入的主键,但是oracle和pg是通过对应的序列查询的,所以selectkey的order 要被设置为 before 。mysql是通过 LAST_INSERT_ID()这个函数,它的order只能被设置为 after

尝试方式:1、selectkey和useGeneratedKeys="" keyProperty="" 配合使用,这种不行
2、在insert和selectkey标签上设置对应的database,这种在项目启时就被定死了,不能实现切换,然而selectkey标签不能方进任何的判断标签。

  • 写回答

1条回答 默认 最新

  • 码到π退休 Java领域新星创作者 2024-09-11 16:35
    关注

    在处理 MyBatis 的 selectkey 标签多数据源情况时,您可以考虑以下几种方式:

    1. 对于 MySQL 数据库,由于其主键是自增的,您可以使用 LAST_INSERT_ID()函数来获取插入的主键。在 selectkey 标签中,将 order 设置为 after。
    2. 对于 Oracle 和 PG 数据库,您可以通过对应的序列查询来获取主键。在 selectkey 标签中,将 order 设置为 before。
    3. 为了实现数据源的切换,您可以在配置文件中动态设置数据源,并根据不同的数据源选择相应的序列或函数来获取主键。
    4. 另外,您还可以考虑使用 MyBatis 的插件机制,通过自定义插件来处理不同数据源的主键获取逻辑。

    请注意,具体的实现方式可能因项目的具体需求和架构而有所不同。您可以根据实际情况进行调整和优化。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月11日