精华内容
下载资源
问答
  • PageHelper 使用坑
    2021-09-22 16:07:01

    1.问题的发现是因为使用分页插件批量更新数据时候发现的,因为使用多线程,需要将数据分页,分区,进行批量的更新,下面贴出批量更新的部分代码:

    坑1:pageHelper   不能从 pageNo = 0 开始更新,查询的

    PageHelper.startPage(pageNo, pageSize); //pageNo = 0

    分页拦截器 会 默认将 0 替换成 1 ,那么当 pageNo =1 的 时候 ,两次分页查询出来的数据 会有相同的;

    坑2: 当查询分页的页数大于实际的分页条数,还是能够查询出来数据,会将最后一页的数据填充到查询结果中;

    //线程池参数 

    @Bean
    public ExecutorService syncTradeBillExecutorService() {
        long keepAliveTime = 1L;
        int maxQueueNum = 500000;// 队列最大长度为50w
        // core线程和max线程数量均为11
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(20, 20, keepAliveTime, timeUnit, new LinkedBlockingQueue(maxQueueNum));
        //允许同步数据完成后,核心线程超时空闲关闭
        threadPoolExecutor.allowCoreThreadTimeOut(true);
        return threadPoolExecutor;
    }
    public class SyncTradeBillUtil implements Runnable {
    
    
        //分页大小
        private int pageSize;
    
        //当前线程要处理的开始分页
        private int startPageNo;
    
        //当前线程总共要处理的分页数量
        private int totalPage;
    
        private QueryWrapper<TradeBill> queryWrapper;
    
        private TradeBillMapper tradeBillMapper;
    
        private static final String DivideTableNamePre = "t_trade_bill_";
    
    
        public SyncTradeBillUtil(int startPageNo, int totalPage, int pageSize, TradeBillMapper tradeBillMapper, QueryWrapper queryWrapper) {
            this.startPageNo = startPageNo;
            this.totalPage = totalPage;
            this.tradeBillMapper = tradeBillMapper;
            this.pageSize = pageSize;
            this.queryWrapper = queryWrapper;
    
        }
    
        @Override
        public void run() {
            for (int pageNo = startPageNo; pageNo < (totalPage + startPageNo); pageNo++) {
                if (pageNo == 0) {
                    continue;
                }
                PageHelper.startPage(pageNo, pageSize);
                List<TradeBill> billList = tradeBillMapper.selectList(queryWrapper);
                //属性复制
                if (CollectionUtils.isNotEmpty(billList)) {
                    List<TradeBillNew> newTradeBillList = new ArrayList<>();
                    for (TradeBill tradeBill : billList) {
                        TradeBillNew tradeBillNew = new TradeBillNew();
                        

    BeanUtils.copyProperty(tradeBill, tradeBillNew); //开启是否验证是否存在重复插入的情况 if (ApolloDegradeUtil.isOpen("newtradingbill.repeat.check.switch")) { int tabNum = ABTestUtil.calHash(tradeBill.getLongminId(), 32); if (!tradeBillMapper.checkExist(DivideTableNamePre + tabNum, tradeBillNew)) { newTradeBillList.add(tradeBillNew); } } else { newTradeBillList.add(tradeBillNew); } } //按照龙民ID进行分组,后续需要根据龙民ID进行取模运算 Map<String, List<TradeBillNew>> groupByLongmingId = newTradeBillList.stream().collect(Collectors.groupingBy(TradeBillNew::getLongminId)); if (groupByLongmingId.size() != 0) { for (Map.Entry<String, List<TradeBillNew>> entry : groupByLongmingId.entrySet()) { String longminID = entry.getKey(); List<TradeBillNew> tradBills = entry.getValue(); //取模计算龙民ID所在表的序号 int tabNum = ABTestUtil.calHash(longminID, 32); try { tradeBillMapper.batchInsertNewTradeBill(DivideTableNamePre + tabNum, tradBills); }catch (Exception e){ log.info("批量更新账单失败:{}",e.getMessage()); e.printStackTrace(); } } } } } }

    }

    更多相关内容
  • PageHelper分页插件

    千次阅读 2018-02-19 19:00:54
    为了提高开发效率可以使用mybatis的分页插件PageHelper。 分页插件PageHelper Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。 该插件目前支持...

    逆向工程生成的代码是不支持分页处理的,如果想进行分页需要自己编写mapper,这样就失去逆向工程的意义了。为了提高开发效率可以使用mybatis的分页插件PageHelper。

    分页插件PageHelper

    Mybatis分页插件 - PageHelper说明
    如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。
    该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。
    使用方法
    第一步:导入 PageHelper的maven工程,利用maven install 打包成jar包,在项目中进行依赖,这里是父子项目的依赖方式
    父项目中

    <pagehelper.version>3.4.2-fix</pagehelper.version>
    <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>${pagehelper.version}</version>
    </dependency>

    子项目中

    <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
    </dependency>

    第二步:在Mybatis配置xml中配置拦截器插件:

    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->        
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

    第三步:在代码中使用

    1、设置分页信息:
       //获取第1页,10条内容,默认查询总数count
        PageHelper.startPage(1, 10);
        //紧跟着的第一个select方法会被分页
    List<Country> list = countryMapper.selectIf(1);
    2、取分页信息
    //分页后,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,
    Page<Country> listCountry = (Page<Country>)list;
    listCountry.getTotal();
    3、取分页信息的第二种方法
    //获取第1页,10条内容,默认查询总数count
    PageHelper.startPage(1, 10);
    List<Country> list = countryMapper.selectAll();
    //用PageInfo对结果进行包装
    PageInfo page = new PageInfo(list);
    //测试PageInfo全部属性
    //PageInfo包含了非常全面的分页属性
    assertEquals(1, page.getPageNum());
    assertEquals(10, page.getPageSize());
    assertEquals(1, page.getStartRow());
    assertEquals(10, page.getEndRow());
    assertEquals(183, page.getTotal());
    assertEquals(19, page.getPages());
    assertEquals(1, page.getFirstPage());
    assertEquals(8, page.getLastPage());
    assertEquals(true, page.isFirstPage());
    assertEquals(false, page.isLastPage());
    assertEquals(false, page.isHasPreviousPage());
    assertEquals(true, page.isHasNextPage());

    分页测试

    @Test
        public void testPageHelper() throws Exception {
            //初始化spring容器
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
            //获得Mapper的代理对象
            TbItemMapper itemMapper = applicationContext.getBean(TbItemMapper.class);
            //设置分页信息
            PageHelper.startPage(1, 30);
            //执行查询
            TbItemExample example = new TbItemExample();
            List<TbItem> list = itemMapper.selectByExample(example);
            //取分页信息
            PageInfo<TbItem> pageInfo = new PageInfo<>(list);
            System.out.println(pageInfo.getTotal());
            System.out.println(pageInfo.getPages());
            System.out.println(pageInfo.getPageNum());
            System.out.println(pageInfo.getPageSize());
        }
    

    *注意:在表现层也要引入pagehelper的依赖

    <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
    </dependency>

    否则会报异常。

    展开全文
  • pagehelper一次性读取数据库所有数据进行分页,所以无法进行后端修改,只能从前端入手,本人使用的是jsp页面所以直接可以 使用${pageNum+1}进行输出,就会从1开始符合用户的习惯 pagehelper的配置如下: 一定要开启...

    pagehelper一次性读取数据库所有数据进行分页,所以无法进行后端修改,只能从前端入手,本人使用的是jsp页面所以直接可以
    在这里插入图片描述
    使用${pageNum+1}进行输出,就会从1开始符合用户的习惯
    pagehelper的配置如下:
    在这里插入图片描述
    一定要开启reasonable功能,则用户传入的页数已经大于了总页数,则会将自动修改为总页数pages。

    展开全文
  • 只对该语句以后的第一个查询语句得到的数据进行分页。 springboot坏境 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <v

    说明:

    PageHelper.startPage(pageNum,pageSize);只对该语句以后的第一个查询语句得到的数据进行分页。

    springboot坏境

            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.2.0</version>
            </dependency>
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
                <version>1.3.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.3.0</version>
            </dependency>
    此方法会自动注入加载pagehelper插件

    而不是原来的

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>{pagehelper.version}</version>
    </dependency>

     

    因为上面的依赖缺少了

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
    </dependency>

    手动注入加载:

     

    
    /**
     * @author zyc
     * @Description
     * @date 2019/10/25
     * @since v1.0.0
     */
    @Configuration
    @MapperScan(basePackages = TpDb.PACKAGE, sqlSessionFactoryRef = "testSqlSessionFactory")
    public class TpDb {
        protected static final String PACKAGE = "com.cy.test.dao.core.mysql.**.*";
        private static final String MAPPER_LOCATION = "classpath:mapper/**/*.xml";
        private Logger logger = LoggerFactory.getLogger(TpDb.class);
        @Value("${spring.datasource.url}")
        private String dbUrl;
    
        @Value("${spring.datasource.username}")
        private String username;
    
        @Value("${spring.datasource.password}")
        private String password;
    
        @Value("${spring.datasource.driverClassName:'com.mysql.jdbc.Driver'}")
        private String driverClassName;
    
        @Value("${spring.datasource.initialSize:30}")
        private int initialSize;
    
        @Value("${spring.datasource.minIdle:30}")
        private int minIdle;
    
        @Value("${spring.datasource.maxActive:150}")
        private int maxActive;
    
        @Value("${spring.datasource.maxWait:60000}")
        private int maxWait;
    
        @Value("${spring.datasource.timeBetweenEvictionRunsMillis:600000}")
        private int timeBetweenEvictionRunsMillis;
    
        @Value("${spring.datasource.minEvictableIdleTimeMillis:300000}")
        private int minEvictableIdleTimeMillis;
    
        @Value("${spring.datasource.validationQuery:'SELECT 1 FROM DUAL'}")
        private String validationQuery;
    
        @Value("${spring.datasource.testWhileIdle:false}")
        private boolean testWhileIdle;
    
        @Value("${spring.datasource.testOnBorrow:true}")
        private boolean testOnBorrow;
    
        @Value("${spring.datasource.testOnReturn:true}")
        private boolean testOnReturn;
    
        @Value("${spring.datasource.poolPreparedStatements:true}")
        private boolean poolPreparedStatements;
    
        @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize:20}")
        private int maxPoolPreparedStatementPerConnectionSize;
    
        @Value("${spring.datasource.filters:log4j}")
        private String filters;
    
        @Value("${spring.datasource.connectionInitSqls}")
        private String connectionInitSqls;
    
        @Value("${spring.datasource.connectionProperties}")
        private String connectionProperties;
    
        @Bean(name = "testDataSource")
        @Primary
        public DataSource fkDataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(driverClassName);
            dataSource.setUrl(dbUrl);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            //configuration
            dataSource.setInitialSize(initialSize);
            dataSource.setMinIdle(minIdle);
            dataSource.setMaxActive(maxActive);
            dataSource.setMaxWait(maxWait);
            dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
            dataSource.setValidationQuery(validationQuery);
            dataSource.setTestWhileIdle(testWhileIdle);
            dataSource.setTestOnBorrow(testOnBorrow);
            dataSource.setTestOnReturn(testOnReturn);
            dataSource.setPoolPreparedStatements(poolPreparedStatements);
            dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
            StringTokenizer tokenizer = new StringTokenizer(connectionInitSqls, ";");
            //utf-8mb4
            dataSource.setConnectionInitSqls(Collections.list(tokenizer));
            try {
                dataSource.setFilters(filters);
            } catch (SQLException e) {
                logger.error("druid configuration initialization filter", e);
            }
            dataSource.setConnectionProperties(connectionProperties);
    
            try {
                dataSource.init();
            } catch (SQLException e) {
                logger.error("druid init error", e);
            }
            return dataSource;
        }
    
        @Bean(name = "testTransactionManager")
        @Primary
        public DataSourceTransactionManager fkTransactionManager() {
            return new DataSourceTransactionManager(fkDataSource());
        }
    
        @Bean(name = "testSqlSessionFactory")
        @Primary
        public SqlSessionFactory fkSqlSessionFactory(@Qualifier("testDataSource") DataSource fkDataSource)
            throws Exception {
            final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(fkDataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(TpDb.MAPPER_LOCATION));
    
            PageInterceptor pageInterceptor = new PageInterceptor();
            Properties properties = new Properties();
            properties.setProperty("reasonable", "false");
            properties.setProperty("helperDialect", "mysql");
            properties.setProperty("supportMethodsArguments", "true");
            properties.setProperty("returnPageInfo", "check");
            properties.setProperty("params", "count=countSql");
            pageInterceptor.setProperties(properties);
            // 添加插件
            sessionFactory.setPlugins(new Interceptor[] {pageInterceptor});
            return sessionFactory.getObject();
        }
    }

    自定义数据源&加载分页加载

    配置化:

    mybatis-config.xml

    <!--翻页插件-->
        <plugins>
            <plugin interceptor="com.github.pagehelper.PageInterceptor">
                <property name="helperDialect" value="mysql"></property>
                <property name="reasonable" value="true"></property>
            </plugin>
        </plugins>

    示例:

      public PageInfo<Order> findOrderList(int pageNum, int pageSize, OrderVO orderVO) {
            //使用分页插件,核心代码就这一行
            PageHelper.startPage(pageNum, pageSize);
     
            List<Order> list = orderMapper.findOrderList(orderVO);
            PageInfo<Order> pageInfo = new PageInfo<>(list);
            return pageInfo;
        }

     

    参照:

    https://github.com/pagehelper/pagehelper-spring-boot

    https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

    https://github.com/pagehelper/Mybatis-PageHelper

    展开全文
  • 1.首先将下面这句代码放在第一行。 PageHelper.startPage(pageNum, pageSize); 2.查询出list后,通过下面语句获取总条数。这个不是这一页的总条数,而是不分页情况下查询的总条数。 PageInfo<实体类> ...
  • PageHelper是国内非常优秀的款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。 本项目在 github 的项目地址:...
  • 所以如果真正的前后端对接上了的话,每展示3条数据,那么此时的前端页面页码只会到1页,而不会有这个选项,而前端如果靠postman来调试,页码参数能够自定义,那出现以上问题也就不奇怪了,所以之后让前端...
  • 从零基础认识分页插件Pagehelper

    千次阅读 2017-12-02 01:14:48
    pageHelper插件pagehelper个分页插件,其工作原理就是利用mybatis拦截器,在查询数据库的时候拦截下sql,修改sql使其实现分页效果。 在sql执行之前插手,让其有别的附加功能。1.pagehelper使用条件 在parent...
  • 今天在用pagehelper写分页的时候,展示出来的数据没有分页效果,如下图 以下是我controller层的分页代码: @RequestMapping("/empList") public String getAllEmpWithDept(@RequestParam(value="pageNum",default...
  • reasonable: false #开启优化,如果开启优化,在分页页码结果没有数据的时候,会查询最后一页数据 supportMethodsArguments: true #是否支持接口参数来传递分页参数,默认false params: count=countSql 主要是...
  • PageHelper.startPage(pageNum,pageSize); List<Blog> blogs = blogMapper.frontBlogList(); controller中 List<Blog> blogs = blogService.blogList(pageNum,7); PageInfo<Blog> page=new ...
  • Mybatis分页插件-PageHelper的使用

    万次阅读 多人点赞 2016-03-03 20:19:34
    Mybatis分页插件-PageHelper的使用怎样配置mybatis这里就不提了,我来说说我配置这个分页插件的过程吧。下载JAR包分页插件pagehelper.jar:...
  • 新项目使用springBoot框架, 但是发现当页数超出数据库的数量时, mybatis还是返回最后一页的数据, 后面发现是yml配置文件里面设置了合理化参数...1会查询第一页,如果pageNum&gt;pages会查询最后一页 fal...
  • 分页组件如下 < div class = "pagination" ...1 ...这里先让当前页为1,然后再进行查询,不然查询的时候loadData中的currentPage为2,查询...所以查询都是从第一页开始查的,而不是第二页。点击查询后,页码应该回到1
  • 应为十条实际却显示全部 看一下前台js没有问题,去后台controller 发现因修改逻辑忽略startPage在上,被提前消费 修改后正常显示
  • PageHelper分页永远返回第一页数据的处理方式
  • pagehelper 依赖引入之后无需配置默认也可以使用。但不同数据库分页不同,可能会出现问题。但加入配置后问题就没有了 pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true ...
  • 但是在查询最后一页时则需要90s,导致接口调用超时(我们接口超时时间设置是60s),于是开始找原因,通过日志发现在查询最后一页时拼接的sql是从最后一页第一条数据查到最后一页第一条数据+页大小的数据,...
  • pageSize为0无效,修改配置 springboot版本升级后,pagehelper插件由1.2.3版本升级到1.4.1版本;发现升级之后pageSize为0时无法查询全部数据 maven依赖引入 旧版本pom.xml配置1.2.3 <dependency> <groupId&...
  • 文章目录记录Pagehelper的深坑问题由来:问题原因:解决办法: 记录Pagehelper的深坑 问题由来: 在使用pageHelper时候遇到个问题, 在有31条数据,每数为1000 当前为3时,按道理时不反悔数据的,但...
  • PageHelper是什么

    2021-09-25 17:49:16
    PageHelper款好用的开源免费的Mybatis三方物理分页插件 我们将简单介绍PageHelper的基本使用和配置参数的含义,重点分析PageHelper作为Mybatis分页插件的实现原理。 概述 我们明确了分页查询原理,但是自己...
  • pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql page-size-zero: false 或者 pagehelper: helper-dialect: mysql # reasonable: true support...
  • DoubleQuery () { /* * 预期,对返回的DeptInfo集合进行分页, * 但是,结果没有分页 * 原因,在DoubleQueryImpl中DeptInf的查询时是第二次查询,而PageHelper只对第一次查询起作用 */ PageHelper.startPage(1, ...
  • 1.非order by原因 2.分页成功,但是第一页和第二页一样 3.前端用的miniui 4.最后一页总是查满 ...pagehelper: ...经排查,reasonable: true之后,就是说开启了分页合理...=0时,都按1处理,因此造成第一页和第二页相同
  • pagehelper原理 分页

    2022-01-10 16:24:27
    pagehelper原理
  • ## PageHelper中分时,显示全部数据

    千次阅读 2020-06-16 16:19:12
    PageHelper中分时,显示全部数据 代码块2中,对list进行两次赋值,造成pagehelp失效,显示全部数据 代码块(1) PageHelper.startPage(currentPage, pageSize); List<ProcessRecord> processRecordList =null;...
  • 当我通过分页插件去查询数据库时,查询2,每10条记录时,查询的结果竟然有9条数据。结果显然不合理,因为我查询2,按照逻辑应该查询11-20条记录,因此不存在,所以返回为空,但是现在却返回9条记录。 ...
  • -- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 --> <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 --> <!--一般为false--> <!-- 子mapper.xml配置文件...
  • 场景: ...Service(PageHelper ——>调用Dao查询)——>Dao(sql语句写在mybatis的DaoClassNameMapper.xml中)——>DataBase。 问题发现及过程: 1.业务说这个页面排序,所以我首先直接在m...
  • PageHelper

    2020-05-11 22:52:37
    PageHelper——分页工具 成员属性 //当前 private int pageNum; //每的数量 private int pageSize; //当前的数量 private int size;...//当前页面第一个元素在数据库中的行号 private int startRow; //当前

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,659
精华内容 4,263
关键字:

pagehelper第一页是0还是1