1. 程式人生 > 資料庫 >mybatis 模糊查詢的實現方法

mybatis 模糊查詢的實現方法

mybatis 模糊查詢的實現方法

mybatis的逆向助手確實好用,可以省去很多編寫常規sql語句的時間,但是它沒辦法自動生成模糊查詢語句,但開發中模糊查詢是必不可少的,所以,需要手動對mapper編寫模糊查詢功能。

這裡先明確MyBatis/Ibatis中#和$的區別:

1. #將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by “111”,如果傳入的值是id,則解析成的sql為order by “id”.

2. $將傳入的資料直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那麼解析成sql時的值為order by user_id,如果傳入的值是id,則解析成的sql為order by id.

3. #方式能夠很大程度防止sql注入。

4. $方式無法防止Sql注入。

5. $方式一般用於傳入資料庫物件,例如傳入表名.

6. 一般能用#的就別用$.

ps:在使用mybatis中還遇到<![CDATA[]]>的用法,在該符號內的語句,將不會被當成字串來處理,而是直接當成sql語句,比如要執行一個儲存過程。

我們的需求是對一個User進行模糊查詢,思路是對所有基本欄位(username,gender等)都跟傳入的key(關鍵字)進行比較。

1、對UserMapper.xml編碼

 <select id="queryUserByKey" parameterType="string"
    resultType="com.lqr.pojo.User">
    select * from user where uid like CONCAT('%',#{key},'%')
    or username like CONCAT('%','%')
    or realname like CONCAT('%','%')
    or identification like CONCAT('%','%')
    or email like CONCAT('%','%')
  </select>

2、對UserMapper.java編碼

List<User> queryUserByKey(String key);

以上是本人在開發中遇到的情景,往後有其他mybatis模糊查詢的使用再繼續記錄。

如有疑問請留言或者到本站社群交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支援!