springboot + mybatis + jsp 实现 分页
先上图,实现评论分页:
实在话,这猫头鹰有点呆。。。。
好了,进入正题
先看项目目录:
传统的Bean+controller+service+mapper
一、添加maven依赖
在pom.xml中配置以下代码
<!--主要插件依赖pagehelper-spring-boot-starter-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
<!--springboot-mybatis 依赖 mybatis-spring-boot-starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
二、添加相关配置
在 application.properties 配置文件中添加分页插件有关的配置
#配置mysql数据库
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
三、编写分页代码
1、在 Mapper 层添加一个分页查找方法。这个查询方法跟查询全部数据的方法除了名称几乎一样
CommentMapper.java
import com.mouping.book.bean.Comment;
import org.apache.ibatis.annotations.Mapper;
import java.util.ArrayList;
@Mapper
public interface CommentMapper {
ArrayList<Comment> selectByBookId(final long book_id);
}
CommentMapper.xml,根据自己的数据库写,想走捷径的可以使用org.mybatis.generator插件,下面是我自己的代码,也是用generator生成的
<select id="selectByBookId" parameterType="java.lang.Long" resultMap="BaseResultMapadmin">
select r.name, c.* from comment as c inner join reader_info as r on c.reader_id = r.reader_id where book_id = #{
book_id,jdbcType=BIGINT}
</select>
2、服务层通过调用DAO层代码完成分页查询,这里统一封装分页查询的请求和结果类,从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会影响服务层以上的分页接口,起到了解耦的作用
CommentService.java
import java.util.ArrayList;
public interface CommentService {
ArrayList<Comment> selectByBookId(long book_id);
}
CommentServiceImpl.java
import com.mouping.book.service.CommentService;import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
@Service
public class CommentServiceImpl implements CommentService {
@Resource
private CommentMapper commentMapper;
@Override
public ArrayList<Comment> selectByBookId(long book_id){
return commentMapper.selectByBookId(book_id);
}
}
服务实现类通过调用分页插件完成最终的分页查询,关键代码是 PageHelper.startPage(pageNum, pageSize),将前台分页查询参数传入并拦截MyBtis执行实现分页效果
3、在controller中实现PageHelper.startPage(pageNum, pageSize),将前台分页查询参数传入并拦截MyBtis执行实现分页效果