1. 程式人生 > >在mybatis中實現oracle分頁和模糊查詢

在mybatis中實現oracle分頁和模糊查詢

        今天在工作中,遇到一個業務需求,就是需要在oracle裡進行模糊查詢並分頁,SQL語句如下:

        select m.label,m.building_loc_id,m.shape.minx x,m.shape.miny y from 
             (select rownum rnm ,t.* from table_test  t  where rownum <=10 and t.label like '%茂名%') m

         where rnm>5

        可以用rownum實現分頁,但是由於rownum是建立在查詢結果上的,所以必須有了查詢結果,才能使用“>”號

所以需要用巢狀語句,而在mybatis中,則需要注意,不能直接用“<”“>”,要用轉義符,也不能直接在引號中使用“#”

<select id="queryNameByKey" resultType="java.util.HashMap" parameterType="java.util.HashMap">
   select m.label name,m.building_loc_id,m.shape.minx x,m.shape.miny y from 
(select ROWNUM rum,t.* from table_test t where  ROWNUM &lt;
= #{endIndex} and t.label like                     '%${queryKey}%' )m
where rum  &gt;   #{beginIndex}
</select>

<select id="queryRecordsCount" resultType="Integer" parameterType="java.util.HashMap">
   select count(*) from table_test t where t.label like '%${queryKey}%'

</select> 

        在引號中除了使用“$”,還可以使用concat,但是效率可能會降低,“$”效率較高,但是不安全,可以SQL注入

        例如:t.lable like concat('%',  concat(#{queryKey},  '%'))