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

淺談mybatis mapper.xml文件中$和#的區(qū)別

 更新時(shí)間:2020年11月27日 12:34:29   作者:xingxinghann  
這篇文章主要介紹了淺談mybatis mapper.xml文件中$和#的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

#{}表示一個(gè)占位符即?,可以有效防止sql注入。在使用時(shí)不需要關(guān)心參數(shù)值的類型,mybatis會(huì)自動(dòng)進(jìn)行java類型和jdbc類型的轉(zhuǎn)換。

#{}可以接收簡單類型值或pojo屬性值,如果傳入簡單類型值,#{}括號(hào)中可以是任意名稱。

<!-- 根據(jù)名稱模糊查詢用戶信息 -->
 <select id="findUserById" parameterType="String" resultType="user">
  select * from user where username like CONCAT(CONCAT('%', #{name}), '%')
 </select>

${}可以將parameterType 傳入的內(nèi)容拼接在sql中且不進(jìn)行jdbc類型轉(zhuǎn)換。

${}可以接收簡單類型值或pojo屬性值,如果傳入簡單類型值,${}括號(hào)中名稱只能是value。

<!-- 根據(jù)名稱模糊查詢用戶信息 -->
 <select id="selectUserByName" parameterType="string" resultType="user">
  select * from user where username like '%${value}%'
 </select>

對(duì)于order by排序,使用#{}將無法實(shí)現(xiàn)功能,應(yīng)該寫成如下形式:

ORDER BY ${columnName}

另外,對(duì)于mybatis逆向工程生成的代碼中,進(jìn)行模糊查詢調(diào)用andXxxLike()方法時(shí),需要手動(dòng)加%,如下:

CustomerExample customerExample=new CustomerExample();

customerExample.or().andNameLike("%"+name+"%");

補(bǔ)充知識(shí):Mybatis條件if test使用枚舉值

1 正確

package com.weather.weatherexpert.common.utils; 
 
/**
 * <p>Title: </p>
 * <p>Description: </p>
 *
 * @Author 
 * @CreateTime 
 */
public enum City {
 
  XINZHOU(100002,"忻州"),
  DATONG(100003,"大同"),
  TAIYUAN(100001,"太原");
 
  private final Integer code;
  private final String name;
 
 
  City(Integer value, String desc) {
    this.code = value;
    this.name = desc;
  }
 
  public Integer getCode() {
    return code;
  }
 
  public String getName() {
    return name;
  }
}

xml:

<!--<if test="cityName == @com.weather.weatherexpert.common.utils.City.XINZHOU@getName">&lt;!&ndash;wrong,java.lang.ClassNotFoundException: Unable to resolve class: com.weather.weatherexpert.common.utils.City.XINZHOU&ndash;&gt;-->
<!--<if test="cityName == @com.weather.weatherexpert.common.utils.City@XINZHOU@getName">&lt;!&ndash;wrong,[org.apache.ibatis.ognl.ParseException: Encountered " "@" "@ "" at line 1, column 65.&ndash;&gt;-->
<if test="cityName == @com.weather.weatherexpert.common.utils.City@XINZHOU.getName"><!--right-->
 area_table
</if> 
 
where 1=1
<if test="cityName == @com.weather.weatherexpert.common.utils.City@XINZHOU.getName"><!--right-->
 and city_name=#{cityName}
</if> 

2 錯(cuò)誤

package com.weather.weatherexpert.common.utils;
 
/**
 * <p>Title: </p>
 * <p>Description: </p>
 *
 * @Author
 * @CreateTime
 */
public class CityClass {
 
  public static enum CityEnum {
 
    XINZHOU(100002, "忻州"),
    DATONG(100003, "大同"),
    TAIYUAN(100001, "太原");
 
    private final Integer code;
    private final String name; 
 
    CityEnum(Integer value, String desc) {
      this.code = value;
      this.name = desc;
    }
 
    public Integer getCode() {
      return code;
    }
 
    public String getName() {
      return name;
    }
  }
}

xml:

/*   Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression
    'cityName == @com.weather.weatherexpert.common.utils.CityClass@CityEnum.XINZHOU.getName'. Cause: org.apache.ibatis.ognl.OgnlException:
    Could not get static field CityEnum from class com.weather.weatherexpert.common.utils.CityClass [java.lang.NoSuchFieldException: CityEnum]*/
    <if test="cityName == @com.weather.weatherexpert.common.utils.CityClass@CityEnum.XINZHOU.getName"><!--wrong-->
      area_table
    </if>

可見,直接定義的枚舉類可以正常使用,在類中定義的枚舉類這樣使用會(huì)報(bào)錯(cuò),可能方法還沒有找到。

以上這篇淺談mybatis mapper.xml文件中$和#的區(qū)別就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java設(shè)計(jì)模式之淺談適配器模式

    java設(shè)計(jì)模式之淺談適配器模式

    我們現(xiàn)實(shí)生活中的適配器不少.例如,我們使用存儲(chǔ)卡適配器連接存儲(chǔ)卡和一個(gè)計(jì)算機(jī),因?yàn)橛?jì)算機(jī)僅支持一種類型的存儲(chǔ)卡和我們的卡不與計(jì)算機(jī)兼容,適配器是兩種不相容的實(shí)體之間的轉(zhuǎn)換器,適配器模式是一種結(jié)構(gòu)模式.本文就帶大家了解一下java適配器模式,需要的朋友可以參考下
    2021-06-06
  • Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解代理模式

    Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解代理模式

    代理模式是Java常見的設(shè)計(jì)模式之一。所謂代理模式是指客戶端并不直接調(diào)用實(shí)際的對(duì)象,而是通過調(diào)用代理,來間接的調(diào)用實(shí)際的對(duì)象
    2022-04-04
  • Spring與Spring boot的區(qū)別介紹

    Spring與Spring boot的區(qū)別介紹

    Spring Boot框架的核心就是自動(dòng)配置,只要存在相應(yīng)的jar包,Spring就幫我們自動(dòng)配置。接下來通過本文給大家介紹Spring與Spring boot的區(qū)別介紹,非常不錯(cuò),需要的朋友參考下吧
    2017-04-04
  • spring security自定義登錄頁面

    spring security自定義登錄頁面

    在項(xiàng)目中我們肯定不能使用Spring自己生成的登錄頁面,而要用我們自己的登錄頁面,下面通過本文給大家分享spring security自定義登錄頁面的實(shí)現(xiàn)方法,一起看看吧
    2017-09-09
  • SpringBoot解決yml明文密碼問題的方法

    SpringBoot解決yml明文密碼問題的方法

    在現(xiàn)代的軟件開發(fā)中,安全性是一個(gè)重要的考量因素,對(duì)于使用SpringBoot框架開發(fā)的應(yīng)用程序而言,敏感信息如數(shù)據(jù)庫密碼、API密鑰等通常存儲(chǔ)在YAML配置文件中,而這些文件往往是明文存儲(chǔ),存在安全隱患,所以本文介紹了SpringBoot解決yml明文密碼問題的方法
    2024-07-07
  • Java面試題沖刺第九天--MyBatis

    Java面試題沖刺第九天--MyBatis

    這篇文章主要為大家分享了最有價(jià)值的三道MyBatis框架面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • maven下載依賴失敗問題及解決

    maven下載依賴失敗問題及解決

    這篇文章主要介紹了maven下載依賴失敗問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot3集成Kafka的方法詳解

    SpringBoot3集成Kafka的方法詳解

    Kafka是一個(gè)開源的分布式事件流平臺(tái),常被用于高性能數(shù)據(jù)管道、流分析、數(shù)據(jù)集成和關(guān)鍵任務(wù)應(yīng)用,下面我們就來看看SpringBoot3是如何集成Kafka的吧
    2023-08-08
  • IDEA連接MySQL提示serverTimezone的問題及解決方法

    IDEA連接MySQL提示serverTimezone的問題及解決方法

    很多朋友私聊小編,使用IDEA軟件連接MySQL數(shù)據(jù)庫時(shí)總是提示Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.的錯(cuò)誤,小編就不一一回復(fù)大家了,下面小編把我的解決方法分享到腳本之家平臺(tái),需要的朋友參考下吧
    2021-05-05
  • Springmvc處理ajax請(qǐng)求并返回json數(shù)據(jù)

    Springmvc處理ajax請(qǐng)求并返回json數(shù)據(jù)

    這篇文章主要介紹了Springmvc處理ajax請(qǐng)求并返回json數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論