品优购商城项目(二)mybatis分页插件

品优购商城项目第二天,使用mybatis分页插件实现分页。

一、引用mybatis分页插件

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <plugins>
        <!-- com.github.pagehelper 为 PageHelper 类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库-->
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>
</configuration>

在配置文件中加载分页插件

<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的全局配置文件,加载分页插件 -->
        <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
    </bean>

二、封装 分页返回结果类,实现业务层分页

首先是 封装 分页返回结果类,当然这个类也可以不要。但是直接返回Page对象数据显得很臃肿,很多数据都是我们不需要的,这样就会造成资源浪费。

一般情况来说,分页需要返回的参数就两个,一个信息总条数,一个页面信息集合。页码和每页显示信息的数量 这个是前端的参数,前端可以控制的。

当然还有钻牛角尖的同学要说,直接返回page.getTotal(), page.getResult()也是可以的。但是有这个封装类操作更统一,代码会更简洁。

import java.io.Serializable;
import java.util.List;

/**
 * @Date: 2019/5/27 0027 10:50
 * @Description:分页返回结果类
 * @statement:
 */
public class PageResult implements Serializable{

    private long total;//总记录数
    private List rows;//当前页结果

    public PageResult(long total, List rows) {
        super();
        this.total = total;
        this.rows = rows;
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public List getRows() {
        return rows;
    }

    public void setRows(List rows) {
        this.rows = rows;
    }
}

业务层实现分页

    /**
     * 分页获取品牌信息
     * @param pageNum 页码
     * @param pageSize 每页显示的数据条数
     * @return
     */
    @Override
    public PageResult findPage(TbBrand tbBrand,int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        //加入查询条件
        TbBrandExample example=new TbBrandExample();
        Criteria criteria = example.createCriteria();
        if(tbBrand!=null){
            if(tbBrand.getName()!=null&&tbBrand.getName().length()>0){
                criteria.andNameLike("%"+tbBrand.getName()+"%");
            }
            if(tbBrand.getFirstChar()!=null&&tbBrand.getFirstChar().length()>0){
                criteria.andFirstCharEqualTo(tbBrand.getFirstChar());
            }
        }
        Page<TbBrand> page= (Page<TbBrand>)brandMapper.selectByExample(example);
        return new PageResult(page.getTotal(), page.getResult());
    }

三、前端实现分页,这里使用的是AngularJS的分页插件

引用js和样式

<!-- 分页组件开始 -->
    <script src="../plugins/angularjs/pagination.js"></script>
    <link rel="stylesheet" href="../plugins/angularjs/pagination.css">

页面使用 分页元素,这个非常简单省事

<!-- 分页 -->
<tm-pagination conf="paginationConf"></tm-pagination>

js 实现分页请求,前端使用的是AngularJS的MVC模式,其实非常简单就是一个简单的ajax请求,这里只做简单记录。

//分页 service层
    this.findPage=function(page,rows){
        return $http.post(‘../brand/search.do?page=‘+page+‘&rows=‘+rows);
    };
//分页 controller层$scope.findPage=function(page,rows){    brandService.findPage(page,rows).success(        function(response){            $scope.list=response.rows;            $scope.paginationConf.totalItems=response.total;//更新总记录数        }    );};
 

分页效果

分析总结:使用分页插件的必然性

一、mybatis分页插件,下面是该插件执行分页时的sql语句打印。

可以看到,同样是 先查询 信息总条数,再查询分组信息。实现的过程与自己写SQL语句查询没有太大的差别,但是在执行效率上肯定是 原生SQL要快一点。这是依赖注入 和 new 对象的差异,这点可以忽略。当然从代码量上来说,每一个要实现分页的表都要自己写SQL,而使用插件可以无限复用,同时可以弥补HQL语句不是太熟练的同学。所有使用很有必要性,能提高开发效率。当然也有 有待改进的地方,比如count(*)。

二、前端分页插件,一个框架封装好的组件,当然要使用。更能提交效率。

原文地址:https://www.cnblogs.com/zeussbook/p/11100361.html

时间: 2024-09-30 19:54:36

品优购商城项目(二)mybatis分页插件的相关文章

品优购商城项目(三)安全框架SpringSecurity

品优购商城项目第三阶段 1.springSecurity的基本用法与shiro类似. 2.BCrypt加密算法比MD5更加智能和安全,能自动加盐再加密,生成的密码是60位比md5的32位更占空间(可以忽略不计),由于密码长度增加安全系数更高,且盐不是明文由算法自动生成和解析,用户不需要关心. 3.set的使用,在下面这个引用类中用注解@[email protected]报错,后在类中用set方法成功 <!-- 认证类 --> <beans:bean id="userDetail

【project】品优购——01

需求分析与系统设计 品优购网上商城主要分为网站前台.运营商后台.商家管理后台三个子系统. 简介 网站前台:主要包括网站首页.商家首页.商品详细页..搜索页.会员中心.订单与支付相关页面.秒杀频道等 运营商后台:是运营商的运营人员的管理后台. 主要包括商家审核.品牌管理.规格管理.模板管理.商品分类管理.商品审核.广告类型管理.广告管理.订单查询.商家结算等 商家管理后台:入驻的商家进行管理的后台,主要功能是对商品的管理以及订单查询统计.资金结算等功能 系统架构 该项目采用SOA架构,即面向服务的

002 --品优购的系统架构

品优购采用的是SOA系统架构,为什么会采用这种架构风格?当然有他自己的好处! 1.1SOA的概念? 面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互.    SOA系统架构得优点: 1:简单系统的开发:由于SOA具有组合性,可以利用现有的SOA资源,根据同样的开放标准,不

MVC4商城项目二:用户身份验证的实现

用户身份验证,依赖于 forms 身份验证类:FormsAuthentication,它是一串加密的cookie 来实现对控制器访问限制和登陆页面的访问控制.它在浏览器端是这样子的: 需求:我们要实现对用户中心只有登录的用户才能访问,如果没登录就跳转到登录页面,其它页面都可以访问: 首先来看登录控制器的代码: UserDto user = UserService.GetUserById(Convert.ToInt32(msg.Msg)); //为提供的用户名提供一个身份验证的票据 FormsAu

Mybatis分页插件

Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页. 点击提交BUG 版本说明 最新版本为3.7.5 PageInfo中的judgePageBoudary方法修改: isLastPage = pageNum == pages && pageNum != 1; //改为 isLastPage

MyBatis学习总结(17)——Mybatis分页插件PageHelper

如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该插件目前支持以下数据库的物理分页: Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL DB2 SqlServer(2005,2008) Informix H2 SqlServer2012 配置dialect属性时,可以使用小写形式: oracle,mysql

springboot +mybatis分页插件PageHelper

1.问题描述 JAVA界ORM的两位大佬Hibernate和Mybatis,hb自带分页(上手挺快,以前用了好几年hb,后期运维及优化快疯了),mybatis没有分页功能,需要借助第三方插件来完成,比较流行的三方框架:PageHelper,今天结合springboot做下介绍,直接贴线上配置,保证可用(如有遗漏,朋友们可以指正下). 2. 解决方案 2.1 配置项目pom.xml <!--分页--> <dependency> <groupId>com.github.pa

Mybatis分页插件PageHelper的学习与使用

目录 中文教程 PageHelper使用 后端程序员都知道,在Web系统中,分页是一种常见的功能,我之前写的分页方法都比较麻烦,移植性也不高,这就很不乐观了.作为一个积极开朗的程序员,怎么能不去了解PageHelper分页插件呢?PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,一致支持mysql.oracle.mariaDB.DB2.SQLite.Hsqldb等.OK接下来就一起来了解了解PageHelper分页插件! @ 中文教程 首先,推荐

Mybatis分页插件2.0版本发布

项目地址:http://git.oschina.net/free/Mybatis_PageHelper 分页插件示例: http://blog.csdn.net/isea533/article/details/24700339 v2.0更新内容: 支持Mybatis缓存,count和分页同时支持(二者同步) 修改拦截器签名,拦截Executor,签名如下: @Intercepts(@Signature(type = Executor.class, method = "query", a