您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何正確的使用Mybatis模糊查詢,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Mybatis 模糊查詢和動態sql語句
模糊查詢
對數據庫最常用的操作就是查詢了,但是如何使用Mybatis進行模糊查詢呢?下面先看一個簡單的模糊查詢
<select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee WHERE emp_name LIKE #{asd} </select>
這是一條偽模糊查詢, 因為沒有實現真正的模糊 “%”。參數為字符串,所以#{}中內容不被限制。但是應該如何插入 % 字符呢。 我們首先想到的是傳遞字符串參數時將%插入到字符串中 “張%”,但是這種方法操作略微繁瑣了一些。 下面提供了使用sql方法的策略
<select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee WHERE emp_name LIKE CONCAT( #{asd} ,'%') </select>
另外一種不推薦的寫法給大家
<select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee WHERE emp_name LIKE '${emp_name}%' </select>
#{} 是采用預編譯的寫法,也就是JDBC中的PerpareStatement,這種寫法可以防止sql注入,但${}這種寫法是不采用預編譯,其中的參數寫成類中的屬性或者map的key值或者為接口中注解的參數名。
mybatis 提供了bind 標簽。下面舉個例子
<select id="select01" resultMap="BasicResultMap"> <bind name="emp_name" value="'%'+ _parameter.getEmp_name() +'%'"/> SELECT * FROM oa_employee WHERE emp_name LIKE #{emp_name} </select>
他是在#{}表達式自動填入value值,值得注意的是“_parameter.getEmp_name()
” 調用的方法是對象中作為查詢參數的屬性的get方法
多條件查詢
多種條件查詢的要點是判斷查詢條件是否為空,拼接sql語句。在mybatis中提供了if標簽和where 標簽。 下面來介紹兩種標簽的用法。
if標簽
<select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee WHERE 1=1 <if test="emp_name != null and emp_name != ''"> and emp_name = #{emp_name } </if> <if test="emp_sex != null and emp_sex != ''"> and sex = #{emp_sex} </if> </select>
mybatis 中的if標簽有些類似于EL表達式的使用,test中可以直接寫入類中的屬性或者key值。
where標簽
<select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee <where> <if test="emp_name != null and emp_name != ''"> and emp_name = #{emp_name } </if> <if test="emp_sex != null and emp_sex != ''"> and sex = #{emp_sex} </if> </where> </select>
這里的where標簽 替換了前一段代碼的 where 1=1 。 mybatis中的where 標簽會判斷標簽內是否有內容, 如果有內容就自動生成where 并把 where 后面的第一個and +一個空格,or+一個空格 去掉。
choose , when 和 otherwise 標簽
<select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee <where> <choose> <when test="emp_name != null and emp_name != ''"> and emp_name = #{emp_name } </when> <when test="emp_sex != null and emp_sex != ''"> and sex = #{emp_sex} </when> <otherwise> emp_id = 50 </otherwise> </choose> </where> </select>
當所有條件不滿足時,執行otherwise標簽的內容。
trim標簽
<select id="select01" resultMap="BasicResultMap"> SELECT * FROM oa_employee <trim prefix="where" prefixOverrides="and |or "> <if test="emp_name != null and emp_name != ''"> and emp_name = #{emp_name } </if> <if test="emp_sex != null and emp_sex != ''"> and sex = #{emp_sex} </if> </trim>
trim標簽的屬性及其含義
- prefix : 標簽之間有內容在最前面加入
- prefixOverrides: 檢查內容的最前面是否匹配,匹配就刪除
- suffix: 標簽之間有內容在最后面加入
- suffixOverrides:檢查內容的最后面是否匹配,匹配就刪除
set標簽
set標簽常用于update操作,并且會自動抹掉無關的,
<update id="update01" > UPDATE oa_employee <set> <if test="emp_name != null and emp_name != ''"> emp_name = #{emp_name} </if> <if test="emp_sex != null and emp_sex != ''"> ,sex = #{emp_sex} </if> </set> WHERE emp_id = 50 </update>
foreach標簽
foreach 用于處理數組或者list集合,下面是一個批量添加的例子
<insert id="insert01"> INSERT INTO oa_employee ( emp_name, sex, fk_dept_id) VALUES <foreach collection="list" item="employee" separator=","> (#{employee.emp_name},#{employee.emp_sex},#{employee.fk_dept_id}) </foreach> </insert>
其中 如果參數為數組 則collection只能為“array” 參數為List集合則collection只能為 “list” item類似JSTL 中的var的作用, 指代容器中的每一個對象。separator=”,”的含義是每條數據以 , 分割。 未注明的屬性有 open 和 close 他們的含義是在遍歷開始和結束時分別添加其內容。
上述就是小編為大家分享的如何正確的使用Mybatis模糊查詢了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。