我们有一个要求,我们应该能够在运行时使用mybatis更改我们运行的sql,这是没有redploying的。我在网上寻找答案,但什么也找不到。
我指的不是动态sql特性,我们可以根据某些条件添加/删除子句。我应该能够完全改变sql。
我们能否从DB或object中获得映射器sql,而不是配置xml中提到的映射器xml。如果可以做到这一点,我们可以通过使用一些REST调用来更新DB或对象,然后运行的下一个sql将获取新的sql。如果需要,我会缓存DB sql,这可以提高性能。
有可能吗?我们能做这样的事情吗?如果在mybatis中不可能,有没有其他框架可以支持它?
发布于 2016-09-22 17:30:28
如果您使用Java Api,您可以使用sql提供程序,只需将@SelectProvider或其他@...Provider注释放到您的映射器接口方法中并创建这些提供程序,就可以从您想要的任何地方获得sql查询。如下所示:
@SelectProvider(type = EntitySqlProvider.class, method = "buildSelectQuery")
List<T> find();Provider类不需要实现或扩展任何东西。您只需创建一个返回字符串的方法。但是,这不适用于xml配置
发布于 2016-09-23 18:48:35
在mybatis-config.xml中,我们通常按如下方式配置映射器位置:
<mappers>
<mapper resource="CategoryMapper.xml"/>
</mappers>我们可以将映射器存储在文件系统中,并按如下方式配置它们:
<mappers>
<mapper url="file:///D:/CategoryMapper.xml"/>
</mappers>但我认为MyBatis读取这些映射器一次,然后准备对象模型并缓存它。因此,我认为即使我们在文件系统上更新这些映射器文件,它也不会再次读取它们。
https://stackoverflow.com/questions/39572367
复制相似问题