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

mybatisplus?@Select注解中拼寫動態(tài)sql異常問題的解決

 更新時間:2021年12月03日 17:07:01   作者:姚華軍  
這篇文章主要介紹了mybatisplus?@Select注解中拼寫動態(tài)sql異常問題的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatisplus @Select注解中拼寫動態(tài)sql異常

使用mybatisplus后,手寫SQL語句很少了,偶爾使用@Select時,

之前一直用實體類傳遞參數(shù),完全能夠正常使用,今天換成了參數(shù)傳遞,報下面的錯誤

  @Select("<script>"
            +"select * from mi_taobao where 1=1"
            +"<if test='status != null'>"
            +"and status = #{status}"
            +"</if>"
            +"</script>")
    public List<Taobao> getTaobao(Integer status);

Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘status' in 'class java.lang.Interger'

納悶了,我就傳個普通參數(shù),和getter方法有啥關(guān)系呢,查找了一下資料

出現(xiàn)原因

這里出現(xiàn)的問題是在mapper方法中定義的參數(shù) 與 實體中定義的屬性不一致 導致的,不知道m(xù)ybatis在想什么。

解決方案

mapper層加@Param(“xxxx”)注解即可,修改如下就可以了

  @Select("<script>"
            +"select * from mi_taobao where 1=1"
            +"<if test='status != null'>"
            +"and status = #{status}"
            +"</if>"
            +"</script>")
    public List<Taobao> getTaobao(@Param("status") Integer status);

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

用script標簽包圍

然后像xml語法一樣書寫

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

用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有個隱患就是當傳入?yún)?shù)為空的時候,可能會造成全表查詢。

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

說明

如果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

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

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

相關(guān)文章

  • 5個步驟讓你明白多線程和線程安全

    5個步驟讓你明白多線程和線程安全

    本文詳細講解了多線程和線程安全的實現(xiàn),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • @JsonSerialize不起作用的解決方案

    @JsonSerialize不起作用的解決方案

    這篇文章主要介紹了@JsonSerialize不起作用的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中對象的比較操作實例分析

    Java中對象的比較操作實例分析

    這篇文章主要介紹了Java中對象的比較操作,結(jié)合實例形式分析了java對象比較操作實現(xiàn)方法與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-08-08
  • JAVA中AES加密方法實例分析

    JAVA中AES加密方法實例分析

    這篇文章主要介紹了JAVA中AES加密方法,實例分析了java中AES加密與解密的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java 的抽象類原理與用法分析

    Java 的抽象類原理與用法分析

    這篇文章主要介紹了Java 的抽象類原理與用法,結(jié)合實例形式分析了java抽象類與接口的相關(guān)概念、原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-12-12
  • Spring框架+jdbcTemplate實現(xiàn)增刪改查功能

    Spring框架+jdbcTemplate實現(xiàn)增刪改查功能

    這篇文章主要介紹了Spring框架+jdbcTemplate實現(xiàn)增刪改查功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java獲取線程ID的實例

    Java獲取線程ID的實例

    以下實例演示了如何使用 getThreadId() 方法獲取線程id,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10
  • java測試框架的方法

    java測試框架的方法

    這篇文章主要介紹了java測試框架的方法,文中代碼非常詳細,供大家學習和參考,感興趣的朋友可以了解下
    2020-06-06
  • SpringBoot在自定義類中調(diào)用service層等Spring其他層操作

    SpringBoot在自定義類中調(diào)用service層等Spring其他層操作

    這篇文章主要介紹了SpringBoot在自定義類中調(diào)用service層等Spring其他層操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring中的InitializingBean接口源碼解析

    Spring中的InitializingBean接口源碼解析

    這篇文章主要介紹了Spring中的InitializingBean接口源碼解析,InitializingBean接口為Bean初始化提供了一種方式,實現(xiàn)InitializingBean接口的Bean,在BeanFactory設(shè)置其所有屬性后會調(diào)用其afterPropertiesSet()方法,需要的朋友可以參考下
    2024-02-02

最新評論