結論:#{}會使用PreparedStatement的參數化查詢方式,而${}會直接将參數替換到sql語句中執行(該種方式會有被sql注入的風險)。
測試:
Mapper.xml
<resultMap id="BillList" type="com.demo.bill1.domain.Bill" >
<result column="TX_TYP" property="txTyp" />
<result column="REMARK" property="remark" />
<result column="NO" property="no" />
</resultMap>
<!-- ${}方式}-->
<select id="sfByNo" parameterType="String" resultMap="BillList">
SELECT * FROM bill order by ${no}
</select>
<!-- #{}方式}-->
<select id="sfByTxTyp" parameterType="com.demo.bill1.domain.Bill" resultMap="BillList">
SELECT * FROM bill where TX_TYP=#{txTyp}
</select>
對應的Mapper接口
//使用#{}方式
List<Bill> sfByTxTyp(Bill bill);
//使用${}方式時,要想傳入一個字元串作為參數,必須加上@Param注解
List<Bill> sfByNo(@Param("no")String no);
測試類:
#{}方式:
@Test
public void sfByTxTyp(){
Bill bill=new Bill();
bill.setTxTyp("1");
billMapper.sfByTxTyp(bill);
}
Mybatis日志列印:可以看到是使用參數化查詢的方式。

${}方式:
@Test
public void sfByNo(){
Bill bill=new Bill();
String no="no";
System.out.println(billMapper.sfByNo(no));
}
Mybatis日志列印:可以看到no作為字元串直接替換到了sql中進行執行。
作者:葬瞳飄血
出處:https://www.cnblogs.com/ZTPX/
本文版權歸作者和部落格園共有,歡迎轉載,但必須給出原文連結,并保留此段聲明,否則保留追究法律責任的權利。