Mybatis获得参数值的两种方式:#{}和${}的区别
生活随笔
收集整理的這篇文章主要介紹了
Mybatis获得参数值的两种方式:#{}和${}的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#{}: 底層創建一個PreparedStatement對象.
${}:底層創建一個Statement對象.
preparedStatement和statement的區別:
preparedStatement:
支持通配符賦值,可以預編譯sql語句
statement:
必須使用字符串拼接的方式操作sql語句,不能使用通配符,因為statement對象調用executeQuery(String sql)直接執行sql語句.
因此,在使用#{}傳輸實體類對象時,有字符串的地方不用加單引號’’,而使用${}拼接字符串時需要手動加上單引號’’.
而在傳輸數據的類型不同時也有區別:
在傳輸實體類對象使用#{}時:
< insert> insert into user values (null,#{name},#{age},#{gender}) < /insert>sql執行時轉化為以下:
sql:insert into user values (null,?,?,?);在傳輸實體類對象使用${}時:有字符串的地方使用單引號哦
< insert> insert into user values (null,'${name}',${age},'${gender}') < /insert>執行時轉化為以下:
sql:insert into user values (null,'張三',12,'男');在傳輸單個String類型或基本數據類型時,因為#{}是通配符進行賦值,所以#{}里面的內容無論寫什么,mybatis都可以進行賦值,但是建議與屬性名保持一致
<select id="getUserByUid">select * from user where uid=#{uid}</select>而${}在傳輸單個String類型或者基本數據類型時, $ {}里面只能填寫value或者_parameter
<select id="getUserByUid">select * from user where uid=${value}</select>總結:
傳遞不同參數類型,#{}和${} 的不同取值方式:
1,當傳輸類型為實體類對象時:
#{}和 $ {}都可以通過屬性名直接獲取參數值,但是要注意${}的單引號問題
2,當傳輸類型為單個字符串或者基本數據類型時:
#{} 可以通過屬性名直接獲取參數值
${}里面的值只能是value或者_parameter
3,當傳輸多個參數時:Mybatis會默認將這些參數放在map集合中,鍵為0,1,2…或者param1,param2,param3…
#{}:可以通過#{0},#{1};#{param1},#{param2}來獲取參數值
${}:只能通過 ${param1}, ${param2}來獲取參數值
總結
以上是生活随笔為你收集整理的Mybatis获得参数值的两种方式:#{}和${}的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打开Mybatis核心配置文件SqlMa
- 下一篇: CentOS各个版本国内镜像下载地址,下