Mybatis分页插件-PageHelper的使用

Mybatis分页插件-PageHelper的使用Mybatis分页插件-PageHelper的使用怎样配置mybatis这里就不提了,我来说说我配置这个分页插件的过程吧。下载JAR包分页插件pagehelper.jar:https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/http://repo1.maven.org/ma

大家好,又见面了,我是你们的朋友全栈君。

#Mybatis分页插件-PageHelper的使用

怎样配置mybatis这里就不提了,我来说说我配置这个分页插件的过程吧。

下载JAR包

分页插件pagehelper.jar:

https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/
http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
由于使用了sql解析工具,你还需要下载jsqlparser.jar

4.1.0及以后版本需要0.9.4版本

http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.4/
4.1.0以前版本需要0.9.1版本

http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.1/

一、首先,在spring-mybatis.xml中是这样配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mapperLocations" value="classpath:com/sinyat/api/weather/mapping/*.xml" />
		<property name="typeAliasesPackage" value="com.sinyat.api.weather.model" />
		<property name="plugins">
			<array>
				<bean class="com.github.pagehelper.PageHelper">
					<property name="properties">
						<value>
							dialect=mysql
						</value>
					</property>
				</bean>
			</array>
		</property>
	</bean>

我是在spring里配置的,还可以在mybatis-config.xml里配置,有兴趣的话可以百度下。

二、需要分页,自然就还要一个查询了。用了PageHelper之后,查询语句就可以很简单了。

<select id="selectAll" resultMap="BaseResultMap">
  	select
  	<include refid="Base_Column_List" />
  	from citylist
  </select>

这是我的查询语句,查询城市列表。没有其他条件,就是查所有。当然,我这只是一个小的demo,没做那么麻烦,真正的使用,是需要条件查询的。
现在来讲讲用了PageHelper之后的好处:
那就是查询语句可以不用limit,但是就一点好处吗?自然不是。请接着往下看。

三、接口、实现类我就不再贴代码了,该怎么写还是怎么写,不需要传分页参数。然后是Controller:

@RequestMapping("showcity")
	public ModelAndView showCityList(ModelAndView mv,
			@RequestParam(required=true,defaultValue="1") Integer page,
			@RequestParam(required=false,defaultValue="10") Integer pageSize){
		
		PageHelper.startPage(page, pageSize);
		List<CityList> list = cityListService.selectAll();
		
		PageInfo<CityList> p=new PageInfo<CityList>(list);
		//System.out.println(p.getList());
		
		mv.addObject("citylist", list);
		mv.addObject("page", p);
		mv.setViewName("weather/showCityList");
		
		return mv;
	}

可以看到,方法里有两个参数,前面也说了,这是一个demo,仅仅只是一个非常简单的分页效果。

PageHelper.startPage(page, pageSize);

这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。

PageInfo这个类是插件里的类,这个类里面的属性还是值得看一看:

	//当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;
    //排序
    private String orderBy;

    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"

    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;

    //第一页
    private int firstPage;
    //前一页
    private int prePage;
    //下一页
    private int nextPage;
    //最后一页
    private int lastPage;

    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;

使用PageInfo这个类,你需要将查询出来的list放进去:

PageInfo<CityList> p=new PageInfo<CityList>(list);

然后mv.addObject("page", p);
这样在页面中就可以通过${page.nextPage}翻到下一页,
${page.prePage}翻到上一页,
列表

下面这个是因为我没有进行判断,所以,第0页自然是什么都没有的。
这里写图片描述
判断的话,在PageInfo里有对应的属性,比如:

	//是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;

好了,demo就是这些了。

下一个是通用Mapper,据说也是很不错的东西。

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143077.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月22日 下午12:00
下一篇 2022年5月22日 下午12:00


相关推荐

  • 概率论中的PDF,PMF,CDF是什么?

    概率论中的PDF,PMF,CDF是什么?http://blog.csdn.net/wzgbm/article/details/51680540

    2022年5月23日
    67
  • ETL的开发过程[通俗易懂]

    ETL的开发过程[通俗易懂]在生产环境中,使用shell脚本完成一次etl操作1.定义一个etl函数,里面传入json行数据,用json.loads加载行数据,并对行数据进行判断,如果没有行数据,或data字段没有在行数据里,就直接返回空的结果,否则就继续往下执行2.接着获取行里的数据,用for循环判断,如果包含某个值,我就将变量赋值取出,装在集合容器里3.设置sparksession会话,并ena…

    2022年5月23日
    37
  • Pytest(13)命令行参数–tb的使用「建议收藏」

    Pytest(13)命令行参数–tb的使用「建议收藏」前言pytest使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败。–tb=style参数可以设置报错的时候回溯打印内容,可以设置参

    2022年7月29日
    6
  • php工厂模式使用场景[通俗易懂]

    php工厂模式使用场景[通俗易懂]场景:使用工厂模式接入:阿里短信验证、腾讯短信验证、百度短信验证创建类文件BaseSMS.php–基础短信服务接口类AliSMS.php–阿里短信服务类BaiduSMS.php–百度短信服务类TencentSMS.php–腾讯短信服务类SmsBusiness.php–短信业务逻辑类具体代码BaseSMS.php–基础短信服务接口类interfaceBaseSMS{publicstaticfunctionsendCode($phone,$co

    2022年7月25日
    25
  • 对接文心一言(ERNIE-Bot)的微信聊天机器人源码V2

    对接文心一言(ERNIE-Bot)的微信聊天机器人源码V2

    2026年3月12日
    3
  • KNN 回归算法_DTW算法

    KNN 回归算法_DTW算法KNN算法也能够用于回归预测。KNN算法用于分类的方法如下:首先,对于一个新来的预测实例,我们在训练集上寻找它的最相近的K个近邻;然后,采用投票法将它分到这K个邻居中的最多的那个类。但是,怎么将KNN算法用于回归呢?其实大致的步骤是一样的,也是对新来的预测实例寻找K近邻,然后对这K个样本的目标值取均值即可作为新样本的预测值。…

    2022年8月21日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号