亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis在注解上使用動態(tài)SQL方式(@select使用if)

 更新時間:2022年07月06日 16:55:45   作者:EasonJim  
這篇文章主要介紹了MyBatis在注解上使用動態(tài)SQL方式(@select使用if),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

MyBatis在注解上使用動態(tài)SQL

1、用script標(biāo)簽包圍

然后像xml語法一樣書寫

@Select({"<script>",
? ? ? ? ? ? ? ? "SELECT * FROM tbl_order",
? ? ? ? ? ? ? ? "WHERE 1=1",
? ? ? ? ? ? ? ? "<when test='title!=null'>",
? ? ? ? ? ? ? ? "AND mydate = #{mydate}",
? ? ? ? ? ? ? ? "</when>",
? ? ? ? ? ? ? ? "</script>"})

2、用Provider去實現(xiàn)SQL拼接

例如:

public class OrderProvider {
? ? private final String TBL_ORDER = "tbl_order";?
? ? public String queryOrderByParam(OrderPara param) {
? ? ? ? SQL sql = new SQL().SELECT("*").FROM(TBL_ORDER);
? ? ? ? String room = param.getRoom();
? ? ? ? if (StringUtils.hasText(room)) {
? ? ? ? ? ? sql.WHERE("room LIKE #{room}");
? ? ? ? }
? ? ? ? Date myDate = param.getMyDate();
? ? ? ? if (myDate != null) {
? ? ? ? ? ? sql.WHERE("mydate LIKE #{mydate}");
? ? ? ? }
? ? ? ? return sql.toString();
? ? }
}
?
public interface OrderDAO {? ??
? ? @SelectProvider(type = OrderProvider.class, method = "queryOrderByParam")
? ? List<Order> queryOrderByParam(OrderParam param);?
}

注意:方式1有個隱患就是當(dāng)傳入?yún)?shù)為空的時候,可能會造成全表查詢。

復(fù)雜SQL用方式2會比較靈活(當(dāng)然,并不建議寫復(fù)雜SQL),而且可以抽象成通用的基類,使每個DAO都可以通過這個基類實現(xiàn)基本的通用查詢,原理類似Spring JDBC Template。

3、說明

如果XML元素嵌入在<script>XML元素中,則可以在注釋值中為動態(tài)SQL使用XML元素:

@Select("<script>SELECT ...</script>")

但是使用<include>元素會觸發(fā)SQL Mapper配置解析異常,由以下原因引起:

org.apache.ibatis.builder.BuilderException: Unknown element in SQL statement. at org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseDynamicTags

如果nodeHandlers在課堂中檢查方法org.apache.ibatis.builder.BuilderException,將注意到支持的元素有:

  • trim
  • where
  • set
  • foreach
  • if
  • choose
  • when
  • otherwise
  • bind

然而,包括基于注釋的查詢中的片段是不可能的。

MyBatis xml注釋SQL的注意事項

說明:在mybatis 的sql里不是不能寫注釋,而是注釋不能有#{},mybatis仍舊會把#{}算成一個帶注入的參數(shù)

如代碼段2所示,mysql數(shù)據(jù)庫更換為oracle數(shù)據(jù)庫時,#{date}需要明確jdbcType,而該代碼段中僅將適用于mysql的sql注釋,依舊會報同樣的錯,最好是將注釋的sql刪除。

?<select id="slectSlagsteelRatioByDate" resultType="java.lang.Double">
?
-- ? ? ? ? select slagsteel_ratio FROM process_history WHERE r furnace_num = #{furnaceNum}
-- ? ? ? ? ORDER BY real_time DESC limit 0,1
?
select slagsteel_ratio FROM(
?select slagsteel_ratio FROM process_history WHERE real_time &lt;= #{date,jdbcType=TIMESTAMP}
?ORDER BY real_time DESC ) WHERE ROWNUM = 1
</select>

注意事項

1、where語句等用到大于小于等符號時候,需要使用 <![CDATA[ > ]]>或者 <![CDATA[ < ]]>進行識別。

2、如果sql文中有動態(tài)sql文標(biāo)簽,比如sql文,此時wwww為傳遞的參數(shù),不需用#{wwww }取值,直接使用即可。

3、如果超過一個參數(shù),需要在接口方法的每個參數(shù)定義時候使用@Param注解。

4、order by語句可以使用動態(tài)sql

ORDER BY eeee ORDER BY rrrrrr

5、SELECT

? ? ? ? ? ?CASE
? ? ? ? ? ?WHEN ?條件1 THEN 字段1

WHEN 條件2 THEN 字段2

? ? ? ? ? ?ELSE ? ?字段3
? ? ? ? ? ?END
? FROM.....

只要滿足一個WHEN,后面的WHEN就不會執(zhí)行了,跳出CASE WHEN 語句

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解APP微信支付(java后臺_統(tǒng)一下單和回調(diào))

    詳解APP微信支付(java后臺_統(tǒng)一下單和回調(diào))

    這篇文章主要介紹了APP微信支付(java后臺_統(tǒng)一下單和回調(diào)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Java實現(xiàn)窗體程序顯示日歷

    Java實現(xiàn)窗體程序顯示日歷

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)窗體程序顯示日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Spring Aware源碼設(shè)計示例解析

    Spring Aware源碼設(shè)計示例解析

    這篇文章主要為大家介紹了Spring Aware源碼設(shè)計示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Java使用JDBC或MyBatis框架向Oracle中插入XMLType數(shù)據(jù)

    Java使用JDBC或MyBatis框架向Oracle中插入XMLType數(shù)據(jù)

    XMLType是Oracle支持的一種基于XML格式存儲的數(shù)據(jù)類型,這里我們共同來探究Java使用JDBC或MyBatis框架向Oracle中插入XMLType數(shù)據(jù)的方法:
    2016-07-07
  • Java實現(xiàn)根據(jù)前端所要格式返回樹形3級層級數(shù)據(jù)

    Java實現(xiàn)根據(jù)前端所要格式返回樹形3級層級數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Java如何實現(xiàn)根據(jù)前端所要格式返回樹形3級層級數(shù)據(jù),文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下
    2024-02-02
  • Presto支持Elasticsearch數(shù)據(jù)源配置詳解

    Presto支持Elasticsearch數(shù)據(jù)源配置詳解

    這篇文章主要為大家介紹了Presto支持Elasticsearch數(shù)據(jù)源配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Java語言中finally是否一定會執(zhí)行你知道嗎

    Java語言中finally是否一定會執(zhí)行你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java finally是否一定會執(zhí)行,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 深入IDEA Debug問題透析詳解

    深入IDEA Debug問題透析詳解

    這篇文章主要為大家介紹了深入IDEA Debug問題透析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Java創(chuàng)建刪除文件和目錄的方法(推薦)

    Java創(chuàng)建刪除文件和目錄的方法(推薦)

    這篇文章主要介紹了java創(chuàng)建刪除文件和目錄的方法,創(chuàng)建和刪除文件目錄常用的是file類的方法,具體內(nèi)容詳情大家參考下本文
    2018-05-05
  • 淺談Java的兩種多線程實現(xiàn)方式

    淺談Java的兩種多線程實現(xiàn)方式

    本篇文章主要介紹了淺談Java的兩種多線程實現(xiàn)方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論