mybatis的分页实现

多条件分页查询,需要两个sql,一个多条件分页查询,一个带条件的分页查询返回总页数。

我们需要准备一个vo类,用来保存多条件的‘多’,这里的例子是:商品名称,最大,最小价格。

	private String goodsName;
	private String minPrice;
	private String maxPrice;

接下来我们的controller层,需要接收的参数(商品vo类,第几页,每页展示多少条)

GoodsQueryVo vo,Integer pageNo,Integer pageSize,HttpServletRequest request

初始化分页条件

看第几页的商品
pageNo如果等于null就看第一页,不等于就是他本身

pageNo=pageNo==null?1:pageNo;

同理

pageSize=pageSize==null?10:pageSize;

mybatis提供了分页插件,底层是通过动态代理和aop来实现的,pagehelper分页助手。

需要在pom.xml中

<!-- mybatis的分页助手 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>4.1.6</version>
		</dependency>

然后在spring-mybatis中

		<!-- 配置分页插件 -->
		<property name="plugins">
			<array>
				<bean class="com.github.pagehelper.PageHelper">
					<property name="properties">
						<value>
							dialect=mysql
							reasonable=true
						</value>
					</property>
				</bean>
			</array>
		</property>

好了配置完了就可以使用了

PageHelper.startPage(第几页,每页多少条)

接下来在mybatis(分页和总条数不用管)

mybatis中,写查询语句,参数为 VO类,返回 resultMap

 <resultMap id="GoodsMap" type="com.oracle.ssm.vo.GoodsVo" >
  <result property="avaliableCount" column="avaliable_count"/>
   <association property="goods" javaType="goods">
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="good_name" property="goodName" jdbcType="VARCHAR" />
    <result column="good_price" property="goodPrice" jdbcType="VARCHAR" />
    <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
    <result column="img_url" property="imgUrl" jdbcType="VARCHAR" />
    <result column="good_desc" property="goodDesc" jdbcType="VARCHAR" />
    </association>
    
  </resultMap>
  <select id="findGoodsByQueryVo" parameterType="goodsQueryVo" resultMap="GoodsMap">
  select goods.*,goods_store.avaliable_count from goods,goods_store
  <where>
  goods.id = goods_store.goods_id
  <if test="goodsName!=null and goodsName!=''">
  and good_name like '%${goodsName}%'
  
  </if>
  
  <if test="minPrice!=null and minPrice!=''">
  and good_price &gt;= ${minPrice}  
  </if>
  
  <if test="maxPrice!=null and maxPrice!=''">
  and good_price &lt;= ${maxPrice}  
  </if>
  </where>
  order by update_time desc
  
  </select>

使用pageInfo对象,封装一下上面的sql

pageInfo(goodsList);

pageinfo底层会进行动态代理,会进行两次查询保存当前的查询信息用request

放demo

		//初始化分页条件
		pageNo=pageNo==null?1:pageNo;
		pageSize=pageSize==null?10:pageSize;
		//怎么分页? select * from goods where ..... limit index,pagesize 
		//select count(*) from goods where....
		//mybatis提供了分页插件,底层原理是通过动态代理和aop来实现的
		PageHelper.startPage(pageNo, pageSize);
		//只需要写一条查询全部的sql就可以了  select * from goods where ...
		List<GoodsVo> goodsList=goodsService.findGoodsByQueryVo(vo);
		//使用pageInfo对象,封装一下上面这条sql
		PageInfo<GoodsVo> page=new PageInfo<GoodsVo>(goodsList);
		//page对象底层会进行动态代理,去进行两次查询
		request.setAttribute("page", page);
		byte[] bytes=(byte[]) jedis.boundValueOps("session:"+request.getRemoteAddr()).get();
		User user=(User)jedis.getHashValueSerializer().deserialize(bytes);
		//回填查询条件
		request.setAttribute("vo", vo);
		request.setAttribute("user", user);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值