[英]Can I change a sql query in Mybatis without redeploying?
我们有一个要求,即我们应该能够在无需重新部署的情况下更改我们在运行时使用 mybatis 运行的 sql。 我在网上寻找答案,但一无所获。
我不是指我们可以根据某些条件添加/删除子句的动态 sql 功能。 我应该能够完全改变sql。
我们可以从DB或对象中获取mapper sql而不是config xml中提到的mapper xml。 如果可以做到,我们可以通过使用一些 REST 调用来更新数据库或对象,并且下一个运行的 sql 会选择新的 sql。 如果需要,我会缓存 DB sql,这可以提高性能。
是否可以? 我们可以做这样的事情吗? 如果在 mybatis 中不可能,有没有其他框架可以支持这个?
如果您使用 Java Api,您可以使用 sql 提供程序,只需将 @SelectProvider 或其他 @...Provider 注释放入您的映射器接口方法并创建这些提供程序,从您想要的任何地方获取 sql 查询。 像这样的东西:
@SelectProvider(type = EntitySqlProvider.class, method = "buildSelectQuery")
List<T> find();
Provider 类不需要实现或扩展任何东西。 您只需创建一个返回字符串的方法。 但是,好吧,这不适用于 xml 配置
在mybatis-config.xml
我们通常配置Mapper位置如下:
<mappers>
<mapper resource="CategoryMapper.xml"/>
</mappers>
我们可以将映射器存储在文件系统中并按如下方式配置它们:
<mappers>
<mapper url="file:///D:/CategoryMapper.xml"/>
</mappers>
但我认为 MyBatis 读取这些映射器一次并准备对象模型并缓存它。 所以,我认为即使我们在文件系统上更新它们,它也不会再次读取这些映射器文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.