MyBatis兩種多條件查詢 和 四種模糊查詢


多條件查詢

// 多條件查詢,方式一 
public List<User> findByIdAndUsername1(@Param("id") Integer id, @Param("username") String username); 
// 多條件查詢,方式二 
public List<User> findByIdAndUsername2(User user);
<!-- 多條件查詢方式一 如果傳遞多個參數 parameterType屬性省略不寫... --> 
<select id="findByIdAndUsername1" resultType="cn.itcast.domain.User">
  select * from user where id = #{id} and username = #{username}
</select>

<!-- 多條件查詢方式二 其實mybatis這哥們傳遞一個參數 parameterType也可以省略【不太建議...】 -->
<select id="findByIdAndUsername2" parameterType="cn.itcast.domain.User" resultType="cn.itcast.domain.User">
  select * from user where id = #{id} and username = #{username}
</select>

模糊查詢

// 模糊查詢,方式一 
public List<User> findByUsername1(String username); 
// 模糊查詢,方式二 
public List<User> findByUsername2(String username);
 // 模糊查詢,方式三 
public List<User> findByUsername3(String username);
 // 模糊查詢,方式四 
public List<User> findByUsername4(String username);
<!--模糊查詢,方式一 java代碼與sql語句有耦合 --> 
<select id="findByUsername1" parameterType="string" resultType="User">
  select * from user where username like #{username}
</select>

<!--模糊查詢,方式二【了解】 mysql5.5版本之前,此拼接不支持多個單引號 oracle數據庫,除了別名的位置,其余位置都不能使用雙引號 -->
<select id="findByUsername2" parameterType="string" resultType="User">
  select * from user where username like "%" #{username} "%"
</select>

<!--模糊查詢,方式三【此方式,會出現sql注入...】 ${} 字符串拼接,如果接收的簡單數據類型,表達式名稱必須是value -->
<select id="findByUsername3" parameterType="string" resultType="User">
  select * from user where username like '%${value}%'
</select>

<!--模糊查詢,方式四【掌握】 使用concat()函數拼接 注意:oracle數據庫 concat()函數只能傳遞二個參數... 可以使用函數嵌套來解決 -->
<select id="findByUsername4" parameterType="string" resultType="User">
  select * from user where username like concat(concat('%',#{username}),'%')
</select>

 注意:

從四種like查詢中引出問題,${}和#{}的不同

${} :底層 Statement
  1. sql與參數拼接在一起,會出現sql注入問題
  2. 每次執行sql語句都會編譯一次
  3. 接收簡單數據類型,命名:${value}
  4. 接收引用數據類型,命名: ${屬性名}
  5. 字符串類型需要加 '${value}'

#{} :底層 PreparedStatement
  1. sql與參數分離,不會出現sql注入問題
  2. sql只需要編譯一次
  3. 接收簡單數據類型,命名:#{隨便寫}
  4. 接收引用數據類型,命名:#{屬性名}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM