mybatis 查詢 動態sql語句怎么寫
mybatis的sql和你在數據庫客戶端執行的sql是一樣的,但是在mybatis中調用的sql一般都是動態的,所以用到了參數傳遞。
這個mybatis有對應的標簽以及相應的變量來實現。你可以搜索下mybatis標簽。
同時給你一個參考的你看看,這個是一個查詢用戶的1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950。
如何實現基于注解mybatis動態拼寫sql語句
在spring中配置
<;,-- 通過掃描的模式,掃描目錄在*目錄下,所有的mapper都繼承SqlMapper接口的接口 -->
<bean class="*ScannerConfigurer">
<property name="basePackage" value="*"/>
<property name="markerInterface" value="*per"/>
</bean>
自己寫dao層方法的接口
public interface OrderMapper extends SqlMapper{
@Select("select * from tbl_order where room like #{room} and mydate like #{mydate}")
public List<Order> getbyroom(OrderPara op);
}
這樣整個語句是寫死的,必須有2個參數,在這種模式下,如何能實現根據room和mydate是否為空來動態的拼寫sql語句
比如當mydate=""
Select("select * from tbl_order where room like #{room} ")
public List<Order> getbyroom(OrderPara op);
如果用xml來配置語句的話,可以用<when test="title ,= null">
and mydate= #{mydate}
</when>
如果是用@Select 這種 改如何做呢?
利用自定義注解,通過反射,拼出SQL語句。
如何MyBatis中使用動態SQL查詢與注釋
首先,樓主需了解何為動態sql,何為靜態sql,這是他們的區別: 靜態 SQL:靜態 SQL 語句一般用于嵌入式 SQL 應用中,在程序運行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。
靜態 SQL 語句的編譯是在應用程序運行前進行的,編譯的結果會存儲在數據庫內部。而后程序運行時,數據庫將直接執行編譯好的 SQL 語句,降低運行時的開銷。
靜態SQL在編譯時已經確定了引用的表和列。 宿主變量不改變表和列信息。
可以使用主變量改變查詢參數值, 但是不能用主變量代替表名或列名。 動態 SQL:動態 SQL 語句是在應用程序運行時被編譯和執行的,不在編譯時確定 SQL 的表和列,而是讓程序在運行時提供,并將SQL 語句文本傳給 DBMS 執行。
靜態 SQL 語句在編譯時已經生成執行計劃。 而動態 SQL 語句,只有在執行時才產生執行計劃。
動態 SQL 語句首先執行 PREPARE 語句要求 DBMS 分析、確認和優化語句,并為其生成執行計劃。例如,使用 DB2 的交互式工具 CLP 訪問數據庫時,用戶輸入的 SQL 語句是不確定的,因此 SQL 語句只能被動態地編譯。
動態 SQL 的應用較多,常見的 CLI 和 JDBC 應用程序都使用動態 SQL。 下面是一個典型的在MyBatis中使用動態SQL:
轉載請注明出處華閱文章網 » mybatis動態語句