我们的系统中还没有数据库模式版本控制,只是想知道是否有办法检查我们系统中可用的所有sql查询的模式正确性(不是语法正确性)。
要求检查查询中提到的表/列是否在当前数据库版本中可用,以便在启动服务时找到错误。
我们正在使用mysql和mybatis。
答案 0 :(得分:0)
在映射器文件中,在定义所有 SQL 语句时,您可以使用验证创建一个具有相同名称的等效语句(或者类似的)附加到检查information_schema
以确定当前列的名称。然后,您可以在启动期间调用所有这些验证查询,以查看它们是否完成。
另一种方法(我认为最终可能更干净,可能更彻底)将使用 TestNG 或 Spock 或类似方法设置一系列测试(我更喜欢 Spock ,虽然它使用 Groovy ,因此可能不适合您的情况)运行所有 mapper 语句。
如果由于一个或多个列不存在而在测试中出现异常,则 JDBC 驱动程序会出现异常,因此测试将失败。此外,如果作为测试的一部分添加了查询的预期结果,您还将测试查询的准确性/行为,以便您能够注意到以后是否更改(并导致测试失败)代码变化。