我可以在没有重新部署的情况下更改Mybatis中的SQL查询吗?

时间:2016-09-19 11:43:41

标签: java orm mybatis spring-mybatis

我们要求我们应该能够在没有重新部署的情况下更改我们在运行时使用mybatis运行的sql。我已经浏览了网页以寻找答案,但却无能为力。

我不是指动态sql功能,我们可以根据某些条件添加/删除子句。我应该能够完全改变sql。

我们可以从DB或对象获取mapper sql而不是config xml中提到的mapper xml。如果可以这样做,我们可以通过使用一些REST调用更新数据库或对象,然后运行的下一个sql将获取新的sql。如果需要,我会缓存DB sql,这可以提高性能。

有可能吗?我们能做点什么吗?如果在mybatis中不可能,还有其他框架可以支持吗?

2 个答案:

答案 0 :(得分:1)

如果使用Java Api,您可以使用sql提供程序,只需将@SelectProvider或其他@ ... Provider注释放到mapper接口方法中并创建这些提供程序,从任何地方获取sql查询。 像这样:

@SelectProvider(type = EntitySqlProvider.class, method =  "buildSelectQuery")
List<T> find();

Provider类不需要实现或扩展任何东西。您只需创建一个返回字符串的方法。 但是,这不适用于xml配置

答案 1 :(得分:0)

mybatis-config.xml中,我们通常按如下方式配置Mapper位置:

<mappers>
    <mapper resource="CategoryMapper.xml"/>    
</mappers>

我们可以将映射器存储在文件系统中,并按如下方式配置它们:

<mappers>   
    <mapper url="file:///D:/CategoryMapper.xml"/>
</mappers>

但我认为MyBatis会一次读取这些映射器并准备对象模型并对其进行缓存。因此,即使我们在文件系统上更新它们,我也不认为它会再次读取这些映射器文件。