簡體   English   中英

我可以在不重新部署的情況下更改 Mybatis 中的 sql 查詢嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM