
为了兼容 H2 改 SQL 是肯定不可能的吧,项目本来就是准备移植过来的,老的 SQL 有些很长完全不敢改。弃用 H2,直接连远程数据库(因为要在阿里云流水线上跑测试,只能要不 H2 要不连远程数据库),又非常慢,咋办呢?
项目是用 mybatis 的,暂时想到的办法是能不能动态切换下 sql 语句,遇到不支持的语法就换一个数据库来跑,又不知道具体咋实现...而且还不能影响到生产环境,生产环境肯定是一直要跑 mysql 的。
查了好多教程,基本都是基于 xml 的,我不喜欢那种格式,就想着用注解实现
1 linbiaye 2021-06-21 19:02:46 +08:00 profile + 本地 mysql 服务器 |
2 yuk1no 2021-06-21 19:15:57 +08:00 via iPhone testcontainers |
3 coer 2021-06-21 21:41:11 +08:00 via iPhone mariadb4j 啊 |
4 fewok 2021-06-22 01:15:45 +08:00 mybatis 插件 |
5 RichardYyf 2021-06-22 01:27:18 +08:00 via Android testcontainers 真的无敌 |
6 vveexx 2021-06-22 08:58:13 +08:00 |
7 silencil 2021-06-22 08:59:50 +08:00 H2 不是有兼容 MySQL 语法吗? url 尾部接“;MODE=MYSQL”;是不是这个支持的还不行? |
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> |
9 Vegetable 2021-06-22 09:50:16 +08:00 看你们测试怎么跑的吧,方案很多。CI 里起单独的空 mysql 实例,本地可以使用 docker-compose 拉起一个空 mysql |
10 shadowfish0 OP @jorneyr 这样会不会影响到生产的配置?感觉会影响到... |
11 shadowfish0 OP @silencil 还不行,sql 里面用了很多 IF 啥的 Mysql 支持的函数 |
12 shadowfish0 OP @vveexx 这个我试过了,扔在阿里云流水线跑测试比直接远程数据库都慢一倍以上,都不知道为啥了 |
13 shadowfish0 OP @RichardYyf 这个咋配置鸭,我不太懂 docker,这个是一定要 docker 才能运行吗?项目本身没跑在 docker 下..网上方法简单试了下,不行,好像就是 docker 配置的问题 |
14 jorneyr 2021-06-22 12:51:40 +08:00 @shadowfish0 不会 |
15 vveexx 2021-06-22 13:19:03 +08:00 @shadowfish0 初始化的时候会下载个 mysql 然后本地启动。跑流水线的机器如果配置太低,确实会慢... |
16 shadowfish0 OP 感谢,这种方法成功了!好像有些 hxd 收藏了这个回答,我这里给出两个有用的博文 https://blog.csdn.net/qq_31324077/article/details/103387825 https://blog.csdn.net/xuanzhangran/article/details/60329357 |