Mybatis分页实现中的几个注意点

来源:互联网 发布:豚丫丫这款软件好吗 编辑:程序博客网 时间:2024/06/07 22:55
前面的话:使用拦截器给Mybatis进行分页的教程在网上有很多,这里记录的主要是我在使用的时候中间走的弯路,记录下来,也好给后面想要学习Mybatis分页拦截的小伙伴们提供点帮助。

1. 拦截器获取参数,判断是否有Page类

  • 1) 使用ThreadLocal 获取
//获取ThreadLocalprivate static ThreadLocal<Page> pageLocal = new ThreadLocal<Page>();private Page getPage() {    return pageLocal.get();}
  • 2) 从boundsql里面获取
BoundSql boundSql = delegate.getBoundSql();Object parameterObject = boundSql.getParameterObject();Page page = this.getPage(parameterObject);private Page getPage(Object parameterObject) {        Page page = null;        if (parameterObject instanceof Page) {            page = (Page) parameterObject;        } else if (parameterObject instanceof Map) {            for (Object val : ((Map<?, ?>) parameterObject).values()) {                if (val instanceof Page) {                   page = (Page) val;                }            }        }        return page;    }

2. 重载plugin方法

@Overridepublic Object plugin(Object target) {    if (target instanceof StatementHandler) {        return Plugin.wrap(target, this);    } else {        return target;    }}

3. DAO层方法传参

当带有Page类作为参数时(同传入多个参数)

  • java 代码
public List<Blog> list(@Param(value="params")Map<String, Object> params,Page page);
  • xml 配置
<select id="list" resultMap="resultMap">    SELECT        *    FROM        t_xxx    WHERE        <if test="params.id != null and params.id != ''">            AND id = #{params.id,jdbcType=VARCHAR}        </if></select>
原创粉丝点击