mybatis實現分頁

實現分頁實質上就是截取查詢結果,仍是先貼代碼,再來分析sql

下面是mapper.xml裏面的配置數據庫

<select id="queryRoleByPage" resultMap="roleCustomeMap">
        select
            a.role_id,a.role_name,a.available ,
            b.permission_id,
            c.permission_name
            from sys_role a, sys_role_permission b, sys_permission c
            where a.role_id = b.role_id and b.permission_id = c.permission_id and a.role_id in (
            select top ${rows} role_id from sys_role where role_id in(
            select top ${pagebegin} role_id from sys_role order by role_id asc
              )order by role_id desc
)order by a.role_id asc </select>

在mapper中接口的配置apache

  public List<SysRoleCustome> queryRoleByPage(@Param("pagebegin")int pagebegin,@Param("rows")int rows);

先說說mapper接口的配置,這裏須要加上@Param這個制定參數名稱,不然會出現,當使用多個參數時,必須制定,一個參數能夠不指定mybatis

nested exception is org.apache.ibatis.binding.BindingException: Parameter 'rows' not found

這樣的錯誤app

接着看mapper.xml的配置,咱們知道,獲取mapper接口給的值的時候,咱們用的是#{value},可是在這裏,我先使用了這個,而後就出現這樣的錯誤:sqlserver

 Cause: com.microsoft.sqlserver.jdbc.SQLServerException: '$@P0' 附近有語法錯誤。

致使這個錯誤的緣由是什麼呢?spa

錯誤解釋以下: 
在Java中對數據庫查詢時常常使用「Select Top ? * From 表名 Where 列名 = ?」的SQL語句,此時的問號是PreparedStatement預編譯對象的參數佔位符,須要使用setXX()系列方法對其賦值後再執行。可是,Top後面是不容許使用問號佔位符的,此處的錯誤就是由此引發的。

按照上面的解釋,若是咱們用#來賦值的話,那就是預編譯爲「?」的,而這個致使了上面的錯誤,那麼怎麼解決呢?有兩種方式.net

1,用$來賦值,其實就是將值寫入語句中,並無預編譯,如最上面用紅色加粗的那樣code

2,直接拼接字符串,效果和上面是同樣的,原理是同樣的,這個能夠用在存儲過程當中server

我是按照下面的文章找的第四種方法,關鍵就是結合mybatis來實現的一些細節,不注意,則會出現錯誤

高效的SQLSERVER分頁查詢(推薦)

相關文章
相關標籤/搜索