欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatisplus?@Select注解中拼寫動(dòng)態(tài)sql異常問(wèn)題的解決

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

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

使用mybatisplus后,手寫SQL語(yǔ)句很少了,偶爾使用@Select時(shí),

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

  @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'

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

出現(xiàn)原因

這里出現(xiàn)的問(wèn)題是在mapper方法中定義的參數(shù) 與 實(shí)體中定義的屬性不一致 導(dǎo)致的,不知道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);

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

用script標(biāo)簽包圍

然后像xml語(yǔ)法一樣書寫

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

用Provider去實(shí)現(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有個(gè)隱患就是當(dāng)傳入?yún)?shù)為空的時(shí)候,可能會(huì)造成全表查詢。

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

說(shuō)明

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

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

但是使用<include>元素會(huì)觸發(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

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

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

相關(guān)文章

  • 5個(gè)步驟讓你明白多線程和線程安全

    5個(gè)步驟讓你明白多線程和線程安全

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

    @JsonSerialize不起作用的解決方案

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

    Java中對(duì)象的比較操作實(shí)例分析

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

    JAVA中AES加密方法實(shí)例分析

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

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

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

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

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

    Java獲取線程ID的實(shí)例

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

    java測(cè)試框架的方法

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

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

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

    Spring中的InitializingBean接口源碼解析

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

最新評(píng)論