继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

SpringBoot项目实战(5):集成分页插件

慕冬雪
关注TA
已关注
手记 78
粉丝 9131
获赞 5502

集成分页插件就比较简单了,我是用的Github上某位大神写的分页插件。具体使用在这先记录下。

添加依赖

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

注:官网已经更新到5.x版本,更新了好多功能,由于分页插件 5.0 版本和 4.x 实现完全不同,这儿我还是用刚开始用的那个版本进行记录,不过建议各位同学去用最新版本(链接在上边哈)。
图片描述

sb程序入口类Applaction.java

package com.blog;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.util.Properties;
/**
 * blog
 * Created by yadong.zhang on com.blog.application
 * User:yadong.zhang
 * Date:2016/10/20
 * Time:18:15
 */
/**
 * 1).@SpringBootApplication标注启动配置入口,run()方法会创建一个Spring应用上下文(Application Context)。
 * SpringBoot通过启动内嵌的Servlet容器(默认tomcat)用来处理Http请求。
 * 2).@RestController是特殊的Controller,他的返回值直接作为Http Response的Body部分返回给浏览器
 * 3).Spring WebMvc框架会将Servlet容器里收到的Http请求根据路径分发到对应的@Controller下进行处理。
 */
@SpringBootApplication
@EnableAspectJAutoProxy
@EnableAutoConfiguration
@ComponentScan
//指定扫描的mapper接口所在的包
@MapperScan("com.blog.mapper")
//启动注解事务管理
@EnableTransactionManagement
//@RestController
public class Applaction {
    //    private static final String MAPPER_SCAN_BASE_PACKAGE = "com.blog.mapper";
    private static final String TYPE_ALIASES_PACKAGE = "com.blog.model";
    private static final String MAPPER_LOCATION = "classpath:/mybatis/*.xml";
    @Bean
    @Autowired
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        // 分页插件
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        properties.setProperty("reasonable", "true");
        properties.setProperty("supportMethodsArguments", "true");
        properties.setProperty("returnPageInfo", "check");
        properties.setProperty("params", "count=countSql");
        pageHelper.setProperties(properties);
        //添加插件
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper});
        //mybatis.typeAliasesPackage:指定domain类的基包,即指定其在*Mapper.xml文件中可以使用简名来代替全类名(看后边的UserMapper.xml介绍)
        sqlSessionFactoryBean.setTypeAliasesPackage(TYPE_ALIASES_PACKAGE);
        /*
            mybatis.mapperLocations:指定*Mapper.xml的位置
            如果不加会报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.blog.mapper.MessageMapper.findMessageInfo异常
            因为找不到*Mapper.xml,也就无法映射mapper中的接口方法。
         */
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
        return sqlSessionFactoryBean.getObject();
    }

    public static void main(String[] args) {
        SpringApplication.run(Applaction.class, args);
    }
}

分页插件使用测试

 @RequestMapping("/message/{currentPage}")
 public String message(@PathVariable("currentPage") Integer currentPage, Model model){
     if(currentPage!= null){
         PageHelper.startPage(currentPage, 10);
     }
     List<Message> messages = messageService.list();
     model.addAttribute("messages", messages);
     return "message";
 }

OK,完事。关于

关于分页插件的其他参数详细说明, 去文档上找哈。

最后的最后,在呼吁一下:
图片描述

下一节准备整理:整合log4j/logback和aop,实现简单的日志记录

晚安。。。

Github源码 - SpringBoot多模块项目

我可以对一个人无限的好,前提是值得。 ——慕冬雪

打开App,阅读手记
22人推荐
发表评论
随时随地看视频慕课网APP

热门评论

你可以先看下PageHelper的源码就知道了。PageHelper是Interceptor接口的实现类。

@SuppressWarnings("rawtypes")
@Intercepts(@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}))
public class PageHelper implements Interceptor {
...
}

基于接口实现的多态

//添加插件
sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper});

指向接口的引用(pageHelper)必须是实现了该接口的一个类的实例程序(implements Interceptor),在运行时,根据对象引用的实际类型来执行对应的方法。

也就是说,你可以根据这个特性,对SpringBoot定制特殊功能。

有点老了,已经出了start的pagehelper

看不懂你的插件怎么添加的进去。这类型就不一样了

sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper});

查看全部评论