V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
shadowfish0
V2EX  ›  程序员

基于 mysql 数据库的 spring 项目, sql 有 H2 不支持的语法,怎么高效搞连接数据库的功能测试?

  •  
  •   shadowfish0 · 2021-06-21 19:01:02 +08:00 · 2222 次点击
    这是一个创建于 1277 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了兼容 H2 改 SQL 是肯定不可能的吧,项目本来就是准备移植过来的,老的 SQL 有些很长完全不敢改。弃用 H2,直接连远程数据库(因为要在阿里云流水线上跑测试,只能要不 H2 要不连远程数据库),又非常慢,咋办呢?

    项目是用 mybatis 的,暂时想到的办法是能不能动态切换下 sql 语句,遇到不支持的语法就换一个数据库来跑,又不知道具体咋实现...而且还不能影响到生产环境,生产环境肯定是一直要跑 mysql 的。

    查了好多教程,基本都是基于 xml 的,我不喜欢那种格式,就想着用注解实现

    16 条回复    2021-06-22 23:04:44 +08:00
    linbiaye
        1
    linbiaye  
       2021-06-21 19:02:46 +08:00
    profile + 本地 mysql 服务器
    yuk1no
        2
    yuk1no  
       2021-06-21 19:15:57 +08:00 via iPhone
    testcontainers
    coer
        3
    coer  
       2021-06-21 21:41:11 +08:00 via iPhone   ❤️ 1
    mariadb4j 啊
    fewok
        4
    fewok  
       2021-06-22 01:15:45 +08:00
    mybatis 插件
    RichardYyf
        5
    RichardYyf  
       2021-06-22 01:27:18 +08:00 via Android
    testcontainers 真的无敌
    vveexx
        6
    vveexx  
       2021-06-22 08:58:13 +08:00
    silencil
        7
    silencil  
       2021-06-22 08:59:50 +08:00
    H2 不是有兼容 MySQL 语法吗? url 尾部接“;MODE=MYSQL”;是不是这个支持的还不行?
    jorneyr
        8
    jorneyr  
       2021-06-22 09:17:04 +08:00
    使用 databaseId 标记 Mapper 中的 SQL 语句,有问题的那条语句提供 MySQL 和 H2 的版本,参考下面这种样式:

    <select id="getAllProduct" resultType="product" databaseId="pg">
    SELECT * FROM product
    </select>
    Vegetable
        9
    Vegetable  
       2021-06-22 09:50:16 +08:00
    看你们测试怎么跑的吧,方案很多。CI 里起单独的空 mysql 实例,本地可以使用 docker-compose 拉起一个空 mysql
    shadowfish0
        10
    shadowfish0  
    OP
       2021-06-22 10:35:19 +08:00
    @jorneyr 这样会不会影响到生产的配置?感觉会影响到...
    shadowfish0
        11
    shadowfish0  
    OP
       2021-06-22 10:36:03 +08:00
    @silencil 还不行,sql 里面用了很多 IF 啥的 Mysql 支持的函数
    shadowfish0
        12
    shadowfish0  
    OP
       2021-06-22 10:36:53 +08:00
    @vveexx 这个我试过了,扔在阿里云流水线跑测试比直接远程数据库都慢一倍以上,都不知道为啥了
    shadowfish0
        13
    shadowfish0  
    OP
       2021-06-22 10:38:12 +08:00
    @RichardYyf 这个咋配置鸭,我不太懂 docker,这个是一定要 docker 才能运行吗?项目本身没跑在 docker 下..网上方法简单试了下,不行,好像就是 docker 配置的问题
    jorneyr
        14
    jorneyr  
       2021-06-22 12:51:40 +08:00
    @shadowfish0 不会
    vveexx
        15
    vveexx  
       2021-06-22 13:19:03 +08:00
    @shadowfish0 初始化的时候会下载个 mysql 然后本地启动。跑流水线的机器如果配置太低,确实会慢...
    shadowfish0
        16
    shadowfish0  
    OP
       2021-06-22 23:04:44 +08:00
    感谢,这种方法成功了!好像有些 hxd 收藏了这个回答,我这里给出两个有用的博文
    https://blog.csdn.net/qq_31324077/article/details/103387825
    https://blog.csdn.net/xuanzhangran/article/details/60329357
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1287 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:51 · PVG 01:51 · LAX 09:51 · JFK 12:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.