Mybatis分页搜索与PageHelper

分页搜索

分页就是利用sql的limit语法,只截取数据表的一段并传至前端显示。

PageInfo

public class PageInfo<T> {
    private List<T> list;
    private int size;
    private int totalPage;
    private int totalCount;
    private int currentPage;

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    @Override
    public String toString() {
        return "PageInfo{" +
               "list=" + list +
               ", size=" + size +
               ", totalPage=" + totalPage +
               ", totalCount=" + totalCount +
               ", currentPage=" + currentPage +
               '}';
    }
}

DAO

UserDao.java

List<User> findAllByName(@Param("start") int start,@Param("name") String name);

int getCountByName(@Param("name")String name);

user.xml

<select id="findAllByName" resultType="user">
    select * from user
    <if test="name != null and name != ''">
        where name like concat('%',#{name},'%')
    </if>
    limit #{start},5;
</select>
<select id="getCountByName" parameterType="String" resultType="int">
    select count(*) from user
    <if test="name != null and name != ''">
        where name = #{name}
    </if>
</select>

Service

    @Override
    public PageInfo<User> findAllByName(int currentPage, String name)
    {
        PageInfo<User> pageInfo = new PageInfo<>();
        int count = userDao.getCountByName(name);
        int realCurrentPage = currentPage < 0 ? 0 : currentPage > count / 5 ? count / 5 : currentPage;
        pageInfo.setSize(5);
        pageInfo.setTotalPage(count / 5);
        pageInfo.setCurrentPage(realCurrentPage);
        pageInfo.setTotalCount(count);
        pageInfo.setList(userDao.findAllByName(realCurrentPage * 5, name));
        return pageInfo;
    }

Controller

@RequestMapping(path = "findAll.do")
public ModelAndView listUser(@RequestParam(defaultValue = "0") int currentPage, @RequestParam(defaultValue = "") String name)
{
    PageInfo<User> pageInfo = userService.findAllByName(currentPage, name);
    PageInfo<User> pageInfo = new PageInfo<>(users);
    ModelAndView mv = new ModelAndView();
    mv.addObject("users", pageInfo.getList());
    mv.addObject("currentPage",pageInfo.getCurrentPage());
    mv.addObject("totalPage",pageInfo.getTotalPage());
    mv.setViewName("user-list");
    return mv;
}

JSP

<c:forEach items="${users}" var="user">
<tr>
	<td><input id="ids" name="ids" type="checkbox" value="${user.id}"></td>
	<td>${user.id}</td>
	<td>${user.name}</td>
	<td>${user.password}</td>
	<td>${user.age}</td>
	<td class="text-center">
		<a href="/user/toUpdate.do?id=${user.id}" class="btn bg-olive btn-xs">更新</a>
		<a href="/user/deleteById.do?id=${user.id}" class="btn bg-olive btn-xs">删除</a>
	</td>
</tr>
</c:forEach>

PageHelper

PageHelper是一个分页插件,使用十分简单。支持十几个数据库,并且可以与Spring集成。

pom.xml

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>最新版本</version>
</dependency>

spring配置文件

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <!-- 其他配置 -->
  <property name="plugins">
    <array>
      <bean class="com.github.pagehelper.PageInterceptor">
        <property name="properties">
          <!--使用下面的方式配置参数,一行配置一个 -->
          <value>
              rowBoundsWithCount=true
              offsetAsPageNum=true
              pageSizeZero=true
              reasonable=true
          </value>
        </property>
      </bean>
    </array>
  </property>
</bean>

使用

Mapper

<select id="selectAll" parameterType="String" resultType="user">
    select * from user
    <if test="name != null and name != ''">
        where name = #{name}
    </if>
</select>

Service

@Override
public List<User> listUser(int currentPage, String name)
{
    PageHelper.startPage(currentPage, 5, true, true, false);
    List<User> users = userDao.selectAll(name);
    return users;
}

Controller

@RequestMapping(path = "findAll.do")
public ModelAndView listUser(@RequestParam(defaultValue = "0") int currentPage, @RequestParam(defaultValue = "") String name)
{
    List<User> users = userService.listUser(currentPage, name);
    PageInfo<User> pageInfo = new PageInfo<>(users);
    ModelAndView mv = new ModelAndView();
    mv.addObject("users", pageInfo.getList());
    mv.addObject("currentPage",pageInfo.getPageNum());
    mv.addObject("totalPage",pageInfo.getPages());
    mv.setViewName("user-list");
    return mv;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值