日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询

發(fā)布時間:2023/12/3 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

映射文件的sql語句中 #{} 和 ${} 區(qū)別以及實(shí)現(xiàn)模糊查詢

目錄

  • sql 語句中的 #{}
  • #{} 模糊查詢錯誤用法
  • #{} 實(shí)現(xiàn)模糊查詢
  • sql 語句中的 ${}
  • ${} 實(shí)現(xiàn)模糊查詢
  • #{} 與 ${} 對比

?

sql 語句中的 #{}

  • 表示一個占位符號,通過 #{} 可以實(shí)現(xiàn) preparedStatement 向占位符中設(shè)置值。
  • 自動進(jìn)行 java 類型和 jdbc 類型轉(zhuǎn)換。
  • 可以有效防止 sql 注入。
  • 可以接收簡單類型值或 pojo 屬性值。
  • 如果 parameterType 傳輸單個簡單類型值,#{} 括號中可以是任意名稱。

#{} 模糊查詢錯誤用法

在模糊查詢中,#{} 在以下用法是錯誤的,查詢名字中帶有李字的人:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="myTest"><!--根據(jù)用戶名模糊查詢客戶--> <select id="queryCustomerByName" parameterType="String" resultType="com.itlike.domain.Customer">SELECT * FROM customer WHERE cust_name LIKE '%#{cust_name}%'; </select></mapper>

查詢代碼如下:

public void test3(){SqlSession sqlSession = MybatisUtils.openSession();List<Customer> customers = sqlSession.selectList("queryCustomerByName", "李");for (Customer customer : customers) {System.out.println(customer);}sqlSession.close(); }

由執(zhí)行結(jié)果可見,這樣寫的話,運(yùn)行時的 sql 語句如下:

SELECT * FROM customer WHERE cust_name LIKE '%?%'

傳入的參數(shù)為 “李” ,由于 #{} 會自動進(jìn)行類型轉(zhuǎn)換(給 ?添加單引號,替換成 ’ ?’),所以實(shí)際的 sql 語句如下:

SELECT * FROM customer WHERE cust_name LIKE '%'李'%'

很明顯這個是錯誤的 sql 語句,所以模糊查詢時無法這么實(shí)現(xiàn)。

#{} 實(shí)現(xiàn)模糊查詢

如果一定要用 #{} 實(shí)現(xiàn)模糊查詢,必須以下面的方式實(shí)現(xiàn),查詢名字中帶有李字的人:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="myTest"><!--根據(jù)用戶名模糊查詢客戶--> <select id="queryCustomerByName" parameterType="String" resultType="com.itlike.domain.Customer">SELECT * FROM customer WHERE cust_name LIKE #{cust_name} </select></mapper>

查詢代碼如下:

@Testpublic void test3(){SqlSession sqlSession = MybatisUtils.openSession();List<Customer> customers = sqlSession.selectList("queryCustomerByName", "%李%");for (Customer customer : customers) {System.out.println(customer);}sqlSession.close();}

運(yùn)行效果:成功查詢出表中姓名有李的人,并且封裝成對象。

==> Preparing: SELECT * FROM customer WHERE cust_name LIKE ? ==> Parameters: %李%(String) <== Columns: cust_id, cust_name, cust_profession, cust_phone, email <== Row: 2, 李白, 刺客, 18977665521, libai@163.com <== Row: 11, 李信, 戰(zhàn)士, 13728964922, lixin@qq.com <== Total: 2 Customer{cust_id=2, cust_name='李白', cust_profession='刺客', cust_phone='18977665521', email='libai@163.com'} Customer{cust_id=11, cust_name='李信', cust_profession='戰(zhàn)士', cust_phone='13728964922', email='lixin@qq.com'}

sql 語句中的 ${}

  • 表示拼接字符串,不防 sql 注入。
  • 通過 ${} 可以將 parameterType 傳入的內(nèi)容拼接在 sql 中并且不進(jìn)行 jdbc 類型轉(zhuǎn)換。
  • 可以接收簡單類型或 pojo 屬性值。
  • 如果 parameterType 傳輸單個簡單類型值,${} 括號中只能是 value。

${} 實(shí)現(xiàn)模糊查詢

用 ${} 實(shí)現(xiàn)模糊查詢方法如下,查詢名字中帶有李字的人:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="myTest"><!--根據(jù)用戶名模糊查詢客戶--> <select id="queryCustomerByName" parameterType="String" resultType="com.itlike.domain.Customer">SELECT * FROM customer WHERE cust_name LIKE '%${value}%'; </select></mapper>

查詢代碼如下:

public void test3(){SqlSession sqlSession = MybatisUtils.openSession();List<Customer> customers = sqlSession.selectList("queryCustomerByName", "李");for (Customer customer : customers) {System.out.println(customer);}sqlSession.close(); }

運(yùn)行結(jié)果:成功查詢出表中姓名中有李的人,并且封裝成對象?!?/p> ==> Preparing: SELECT * FROM customer WHERE cust_name LIKE '%李%'; ==> Parameters: <== Columns: cust_id, cust_name, cust_profession, cust_phone, email <== Row: 2, 李白, 刺客, 18977665521, libai@163.com <== Row: 11, 李信, 戰(zhàn)士, 13728964922, lixin@qq.com <== Total: 2 Customer{cust_id=2, cust_name='李白', cust_profession='刺客', cust_phone='18977665521', email='libai@163.com'} Customer{cust_id=11, cust_name='李信', cust_profession='戰(zhàn)士', cust_phone='13728964922', email='lixin@qq.com'}

#{} 與 ${} 對比

#{} 不可行方法: 映射文件中的sql:SELECT * FROM customer WHERE cust_name LIKE '%#{name}%'; // 沒有固定參數(shù)名,可以不叫 name 傳入?yún)?shù):"李" 運(yùn)行時顯示的sql:SELECT * FROM customer WHERE cust_name LIKE '%?%'; 實(shí)際的sql:SELECT * FROM customer WHERE cust_name LIKE '%'李'%';#{} 可行方法: 映射文件中的sql:SELECT * FROM customer WHERE cust_name LIKE #{name} // 沒有固定參數(shù)名,可以不叫 name 傳入?yún)?shù):"%李%" 運(yùn)行時顯示的sql:SELECT * FROM customer WHERE cust_name LIKE ? 實(shí)際的sql:SELECT * FROM customer WHERE cust_name LIKE '%李%';${} 可行方法: 映射文件中的sql:SELECT * FROM customer WHERE cust_name LIKE '%${value}%'; // 參數(shù)名必須叫 value 傳入?yún)?shù):"李" 運(yùn)行時顯示的sql:SELECT * FROM customer WHERE cust_name LIKE '%李%';

總結(jié)

以上是生活随笔為你收集整理的03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。