MyBatis中模糊查詢LIKE的三種方式


在操作數據庫時,查詢是最常用的語句,模糊查詢也是數據庫SQL中使用頻率很高的SQL語句,利用MyBatis框架來進行更加靈活的模糊查詢,有如下三種方式:

(1)直接傳參法
直接傳參法,就是將要查詢的關鍵字keyword,在代碼中拼接好要查詢的格式,如%keyword%,然后直接作為參數傳入mapper.xml的映射文件中。

如下所示:

public void selectBykeyWord(String keyword) {
     String id = "%" + keyword + "%";
     String roleType = "%" + keyword + "%";
     String roleName = "%" + keyword + "%";
     userDao.selectBykeyWord(id,roleName,roleType);
 }

dao層接口如下:

List<RoleEntity> selectBykeyWord(@Param("id") String id,@Param("roleName") String roleName,@Param("roleType") String roleType);
<select id="selectBykeyWord" parameterType="string" resultType="com.why.mybatis.entity.RoleEntity">
    SELECT * FROM t_role WHERE role_name LIKE #{roleName}
    OR id LIKE #{id}
    OR role_type LIKE #{roleType}
</select>

執行時打印的sql如下:

SELECT * FROM t_role WHERE role_name LIKE '%why%'
 OR id LIKE '%why%' 
 OR role_type LIKE '%why%'

注意:此方法可以完成模糊查詢任務,但是不推薦,因為與Java代碼耦合了,不利於維護和修改。


(2)mysql的CONCAT()函數
MySQL的CONCAT()函數用於將多個字符串連接成一個字符串,是最重要的mysql函數之一。用法:CONCAT(str1,str2,...)

dao層接口如下:

List<RoleEntity> selectBykeyWord(@Param("keyword") String keyword);

mapper文件如下所示:

<select id="selectBykeyWord" parameterType="string" resultType="com.why.mybatis.entity.RoleEntity">
    SELECT * FROM t_role WHERE role_name LIKE CONCAT('%',#{keyword},'%')
    OR id LIKE CONCAT('%',#{keyword},'%')
    OR role_type LIKE CONCAT('%',#{keyword},'%')
</select>

注意:執行效果與上面的直接傳參一樣,但比直接傳參法更好,因為與代碼解耦了,但是此方法只針對mysql數據庫所用,如果換成Oracle數據庫則需要修改sql代碼,因此此方法不通用,但可以使用。


(3)mybatis的bind元素
mybatis針對這種情況作出了調整,提供了一個bind元素,此元素可以跨越數據庫限制,也就是說不管是mysql還是Oracle數據庫都可以通用模糊查詢。

dao層接口如下:

List<RoleEntity> selectBykeyWord(@Param("keyword") String keyword);

mapper文件如下:

<select id="selectBykeyWord" parameterType="string" resultType="com.why.mybatis.entity.RoleEntity">
	<!--keyword就是傳入的參數,bind相當於是一個參數,這個參數的值就是value拼接出來的值-->	
    <bind name="pattern" value="'%' + keyword + '%'" />

    SELECT * FROM t_role WHERE role_name LIKE #{pattern}
    OR id LIKE #{pattern}
    OR role_type like #{pattern}
</select>

參考博文:https://blog.csdn.net/why15732625998/article/details/79081146


免責聲明!

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



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