首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以在不重新部署的情况下在Mybatis中更改sql查询吗?

我可以在不重新部署的情况下在Mybatis中更改sql查询吗?
EN

Stack Overflow用户
提问于 2016-09-19 19:43:41
回答 2查看 1.1K关注 0票数 2

我们有一个要求,我们应该能够在运行时使用mybatis更改我们运行的sql,这是没有redploying的。我在网上寻找答案,但什么也找不到。

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

我们能否从DB或object中获得映射器sql,而不是配置xml中提到的映射器xml。如果可以做到这一点,我们可以通过使用一些REST调用来更新DB或对象,然后运行的下一个sql将获取新的sql。如果需要,我会缓存DB sql,这可以提高性能。

有可能吗?我们能做这样的事情吗?如果在mybatis中不可能,有没有其他框架可以支持它?

EN

回答 2

Stack Overflow用户

发布于 2016-09-22 17:30:28

如果您使用Java Api,您可以使用sql提供程序,只需将@SelectProvider或其他@...Provider注释放到您的映射器接口方法中并创建这些提供程序,就可以从您想要的任何地方获得sql查询。如下所示:

代码语言:javascript
运行
复制
@SelectProvider(type = EntitySqlProvider.class, method =  "buildSelectQuery")
List<T> find();

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

票数 1
EN

Stack Overflow用户

发布于 2016-09-23 18:48:35

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

代码语言:javascript
运行
复制
<mappers>
    <mapper resource="CategoryMapper.xml"/>    
</mappers>

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

代码语言:javascript
运行
复制
<mappers>   
    <mapper url="file:///D:/CategoryMapper.xml"/>
</mappers>

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39572367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档