ssm+Pagination超容易实现,分页功能

我们实现的效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一,业务逻辑

1,我们的需求是:现有一张用户表(Admin)表,里面包含:
用户昵称(userName),登录用户名(login),邮箱(email)
注册时间(createTime)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Admin {
    private Integer id;
    private String login;
    private String userPswd;
    private String userName;
    private String email;
    private String createTime;
} 

2,@Darta等注解不理解的同学,可以去了解一下lombook插件
3,要求:我们的分页功能不但要对所有数据进行分页,还要对查询的条件进行分页,列如:根据userName(昵称) 和 email(邮箱) 和 id(编号)
4,我们这里借助我们的分页插件(pageHelper),使用Maven导入:

            <!-- MyBatis 分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.2.0</version>
            </dependency>

二,编写AdnubMapper和sql语句

1,编写AdminMapper接口

@Mapper
public interface AdminMapper {
    List<Admin> selectAdminByKeyword(String keyword);//根据关键词进行分页查询
}

2,直接编写查询的Sql语句,至于分页的话,就让我们的分页插件来帮助我们干了。

  <select id="selectAdminByKeyword" resultMap="BaseResultMap">
        select <include refid="Base_Column_List"/> from t_admin
        <where>
          login like CONCAT("%",#{keyword},"%") or
          user_name like CONCAT("%",#{keyword},"%") or
          email like CONCAT("%",#{keyword},"%")
        </where>
  </select>

我们编写的Sql语句,既可以根据邮箱,还可以根据昵称,还有用户名查询

三,Service层实现分页逻辑

@Service
public class AdminServiceImpl implements AdminService {

    @Autowired
    AdminMapper adminMapper;
    /**
     *  关键字分页查询
     * @param keyword 查询的关键词
     * @param pageNum 页码
     * @param pageSize 每页显示的条数
     * @return 分页插件实体类,存储了分页的基本信息,和数据
     */
    @Override
    public PageInfo<Admin> getAdminPage(String keyword, Integer pageNum, Integer pageSize) {
        //开启分页功能
        PageHelper.startPage(pageNum,pageSize);
        //根据关键词查询数据
        List<Admin> adminList = adminMapper.selectAdminByKeyword(keyword);
        /// ※辅助代码:打印 adminList 的全类名
        Logger logger = LoggerFactory.getLogger(AdminService.class);
        logger.debug("adminList 的全类名是:"+adminList.getClass().getName());
        //将我们的adminList封装为PageInfo
        PageInfo<Admin> adminPageInfo = new PageInfo<>(adminList);
        return adminPageInfo;
    }
}

四,Controller层

@Controller
public class AdminHandler {
    @Autowired
    AdminService adminService;

    @RequestMapping("/admin/page.htm")
    public String getAdminPage(
            // 注意:页面上有可能不提供关键词,要进行适配
            // 在@RequestParam注解中设置defaultValue属性为空字符串表示浏览器不提 供关键词时,keyword 变量赋值为空字符串
            @RequestParam(defaultValue = "",value = "keyword")String keyword,
            //浏览器没有提供页数,默认第一页
            @RequestParam(defaultValue = "1",value = "pageNum")Integer pageNum,
            // 浏览器未提供 pageSize 时,默认每页显示 5 条记录
            @RequestParam(value = "pageSize",defaultValue = "5")Integer pageSize,
            ModelMap modelMap
            ){
        //查询分页数据
        PageInfo<Admin> adminPage = adminService.getAdminPage(keyword, pageNum, pageSize);
        //将数据存入模型
        modelMap.addAttribute(CrowdConstant.ATTR_NAME_PAGE_INFO, adminPage);
        return "admin-page";
    }
}

每一行都备注了,就不做过多解释

五,admin_page.jsp页面

页面部分,我们需要导入:利用我们的pagination来实现具体效果

<link rel="stylesheet" href="css/pagination.css">
<script type="text/javascript" src="jquery/jquery.pagination.js"></script>

1.html代码

<div id="Pagination" class="pagination">
		<!-- 这里显示分页 -->
 </div>

2,Js代码

<script>
   $(()=>{
       initPagination();
   })
   //加载分页查插件
   function initPagination() {
        //获取总记录数
       var totalRecord=${requestScope.pageInfo.total};
       
       //声明一个JSON对象来存储pagination要设置的属性
       var properties={
           num_edge_entries:3,                                 // 边缘页数
           num_display_entries:5,                              // 主体页数
           callback:pageSelectCallback,                        // 指定点击分页的时候跳转页面的方法
           items_per_page:${requestScope.pageInfo.pageSize},   // 每次显示页数的数量
           current_page:${requestScope.pageInfo.pageNum-1},   //pagination使用pageIndex来管理页码。pageIndex从0开始,PageNum从1开始,所以要-1
           prev_text:"上一页",                                 // 上一页按钮显示的文本
           next_text:"下一页"                                  // 下一页按钮显示的文本
       }
       
       //生成页码行条
       $("#Pagination").pagination(totalRecord,properties);
   }

   // 回调函数的含义:声明出来之后不是自己调用,而是交给系统或者框架调用
   //用户点击 1,2,3 这样的页码的时候进行跳转
   // pageIndex是pagination传给我们的的那个“从0开始"的页码
   function pageSelectCallback(pageIndex,jQuery) {
        // 根据pageIndex计算pageNum
       var pageNum=pageIndex+1;
        console.log(pageNum);
       // 跳转页码  在这个地方param类死于getParametter("keywork");
       location.href="admin/page.htm?pageNum="+pageNum+"&keyword=${param.keyword}";

       //由于每一个页码都是超链接,所以在这个函数后要取消超链接行为
       return false;
   }
</script>

如果觉得有帮助到你,请留下你的赞,以示鼓励
加粗样式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值