最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決Mybatis-Plus操作分頁后數(shù)據(jù)失效問題

 更新時間:2020年11月30日 09:46:13   作者:李金泉  
這篇文章主要介紹了解決Mybatis-Plus操作分頁后數(shù)據(jù)失效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

業(yè)務(wù)場景

我們知道在使用PageHelper分頁插件時,會對執(zhí)行PageHelper.startPage(pageNum, pageSize);方法后的第一條查詢語句進(jìn)行分頁操作。在開發(fā)中總會遇到這樣的業(yè)務(wù)情景,在進(jìn)行分頁查詢后,需要對獲得的列表數(shù)據(jù)包裝成另一種類型,此時需要對新類型的列表進(jìn)行分頁,然而由于PageInfo<T>因為泛型的原因,導(dǎo)致處理后的列表不能加入到該類中。

如,我在數(shù)據(jù)庫分頁后查詢到的類為PageInfo<User>,此時改類中的list屬性為User,在當(dāng)前的業(yè)務(wù)場景下,我需要將User類型替換為UserVo類型。

當(dāng)我們對list屬性進(jìn)行操作時,會同時導(dǎo)致PageInfo類中的其他屬性發(fā)生改變,如total等。

解決方法

//從數(shù)據(jù)庫獲得的Users分頁列表
//當(dāng)我們打印users時,會發(fā)現(xiàn)打印出來的數(shù)據(jù)除了列表數(shù)據(jù)還有分頁屬性
List<User> users = this.list();
//操作users獲得的需要的列表
List<UserVo> userVos = this.list2(users);
//創(chuàng)建User的info類,此時page中的屬性已生成
PageInfo<User> userPage = new PageInfo<>(users);
//創(chuàng)建UserVo的info類
PageInfo<UserVo> userVoPage= new PageInfo<>(userVos );
//將userPage中除看list外的其他屬性復(fù)制到userVoPage中
PageInfoUtil pageInfoUtil = new PageInfoUtil();
pageInfo = pageInfoUtil.getPageVo(userPage ,userVoPage);
pageInfoUtil
public class PageInfoUtil {
 public PageInfo getPageVo(PageInfo pageInfoPo,PageInfo pageInfoVo){
  pageInfoVo.setTotal(pageInfoPo.getTotal());
  pageInfoVo.setEndRow(pageInfoPo.getEndRow());
  pageInfoVo.setHasNextPage(pageInfoPo.isHasNextPage());
  pageInfoVo.setHasPreviousPage(pageInfoPo.isHasPreviousPage());
  pageInfoVo.setIsFirstPage(pageInfoPo.isIsFirstPage());
  pageInfoVo.setIsLastPage(pageInfoPo.isIsLastPage());
  pageInfoVo.setNavigateFirstPage(pageInfoPo.getNavigateFirstPage());
  pageInfoVo.setNavigateLastPage(pageInfoPo.getNavigateLastPage());
  pageInfoVo.setNavigatePages(pageInfoPo.getNavigatePages());
  pageInfoVo.setNavigatepageNums(pageInfoPo.getNavigatepageNums());
  pageInfoVo.setNextPage(pageInfoPo.getNextPage());
  pageInfoVo.setPageNum(pageInfoPo.getPageNum());
  pageInfoVo.setPages(pageInfoPo.getPages());
  pageInfoVo.setPageSize(pageInfoPo.getPageSize());
  pageInfoVo.setPrePage(pageInfoPo.getPrePage());
  pageInfoVo.setSize(pageInfoPo.getSize());
  pageInfoVo.setStartRow(pageInfoPo.getStartRow());
  pageInfoVo.setFirstPage(pageInfoPo.getFirstPage());
  pageInfoVo.setLastPage(pageInfoPo.getLastPage());
  return pageInfoVo;
 }
}

End

想使用秀一點的方法,結(jié)果能力有限,沒有成功,只能使用這種笨方法,如果有更好的方法,歡迎各位指導(dǎo)。

補充知識:mybatis-plus分頁無效, total=0問題(springmvc)

前言

項目中(springmvc)分頁采用mybatis-plus, 頭一回用, 就遇到了如題問題

pom.xml

<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus</artifactId>
 <version>3.2.0</version>
</dependency>

mapper繼承了BaseMapper

@Repository
public interface UserMapper extends BaseMapper<UserPo>{
  // 這里代碼沒用, 查詢采用的BaseMapper中的 IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
}

service層

 @Override
 public SysUserVo list(UserQo qo) {
  QueryWrapper<UserPo> queryWrapper = new QueryWrapper<>();
  queryWrapper.like("name", qo.getKeyword())
    .or().
    like("code", qo.getKeyword());
  Page<UserPo> page = new Page<>(qo.getPageNo(), qo.getPageSize());
  IPage<UserPo> userPoIPage = userMapper.selectPage(page, queryWrapper);
  List<UserPo> records = userPoIPage.getRecords();
  long total = userPoIPage.getTotal();// 總記錄數(shù)
  long pages = userPoIPage.getPages();// 查詢結(jié)果數(shù)
  long pageNo = userPoIPage.getCurrent();// 當(dāng)前頁
  long pageSize = userPoIPage.getSize();// 每頁條數(shù)
  List<UserVo> userVos = Lists.newArrayList();
  for (UserPo userPo : records) {
   Integer userId = userPo.getId();
   List<RolePo> roles = userMapper.selectRoles(userId);
   UserVo userVo = UserVo.builder().code(userPo.getCode())
     .name(userPo.getName())
     .rolePo(roles)
     .status(userPo.getStatus())
     .build();
   userVos.add(userVo);
  }
  SysUserVo sysUserVo = SysUserVo.builder()
    .list(userVos)
    .total(total)
    .build();
  return sysUserVo;
 }

結(jié)果分頁并沒有生效, 于是添加攔截器

package com.cebbank.api.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
@MapperScan("com.cebbank.api.mapper")
public class MybatisPlusConfig {
 @Bean
 public PaginationInterceptor paginationInterceptor() {
  PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  // 設(shè)置請求的頁面大于最大頁后操作, true調(diào)回到首頁,false 繼續(xù)請求 默認(rèn)false
  paginationInterceptor.setOverflow(true);
  // 設(shè)置最大單頁限制數(shù)量,默認(rèn) 500 條,-1 不受限制
  paginationInterceptor.setLimit(100);
  // 開啟 count 的 join 優(yōu)化,只針對部分 left join
  paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
  paginationInterceptor.setDialectType("mysql");
  return paginationInterceptor;
 }
}

還是沒生效

最后找到解決方案, 在數(shù)據(jù)源配置中顯式添加分頁插件

 @Bean
 public SqlSessionFactory sqlSessionFactory() throws Exception {
  MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
  sqlSessionFactoryBean.setDataSource(dataSource());
  MybatisConfiguration configuration = new MybatisConfiguration();
  configuration.setMapUnderscoreToCamelCase(true);
  configuration.setDefaultEnumTypeHandler(EnumOrdinalTypeHandler.class);
  sqlSessionFactoryBean.setConfiguration(configuration);
//  sqlSessionFactoryBean.setMapperLocations(resolveMapperLocations());
  sqlSessionFactoryBean.setPlugins(new Interceptor[]{new PaginationInterceptor()});

  return sqlSessionFactoryBean.getObject();
 }

完整配置

package com.cebbank.api.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.EnumOrdinalTypeHandler;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;


/**
 * @author linyong
 * @date 2020/7/30 16:38
 * @description 數(shù)據(jù)源配置
 **/
@Configuration
@EnableAspectJAutoProxy
@MapperScan("com.cebbank.api.mapper")
public class DBConfig {

 @Value("${spring.datasource.url}")
 private String url;

 @Value("${spring.datasource.driver-class-name}")
 private String driverClassName;

 @Value("${spring.datasource.username}")
 private String username;

 @Value("${spring.datasource.password}")
 private String password;

 @Value("${spring.datasource.initialSize:5}")
 private Integer initialSize;

 @Value("${spring.datasource.maxActive:50}")
 private Integer maxActive;

 @Value("${spring.datasource.maxWait:60000}")
 private Integer maxWait;

 @Value("${spring.datasource.minIdle:5}")
 private Integer minIdle;

 @Value("${spring.datasource.testWhileIdle:true}")
 private Boolean testWhileIdle;

 @Value("${spring.datasource.testOnBorrow:true}")
 private Boolean testOnBorrow;

 @Value("${spring.datasource.testOnReturn:true}")
 private Boolean testOnReturn;

 @Value("${spring.datasource.validationQuery:select 1}")
 private String validationQuery;

// @Value("${mybatis.mapper-locations}")
// private String mapperLocations;


 @Bean
 public DataSource dataSource(){
  DruidDataSource druidDataSource = new DruidDataSource();
  druidDataSource.setUrl(url);
  druidDataSource.setDriverClassName(driverClassName);
  druidDataSource.setUsername(username);
  druidDataSource.setPassword(password);
  druidDataSource.setInitialSize(initialSize);
  druidDataSource.setMaxActive(maxActive);
  druidDataSource.setMaxWait(maxWait);
  druidDataSource.setMinIdle(minIdle);
  druidDataSource.setTestWhileIdle(testWhileIdle);
  druidDataSource.setTestOnBorrow(testOnBorrow);
  druidDataSource.setTestOnReturn(testOnReturn);
  druidDataSource.setValidationQuery(validationQuery);
  return druidDataSource;
 }

// private Resource[] resolveMapperLocations() {
//  ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
//  String[] arr = mapperLocations.split(",");
//  List<String> locations = Arrays.asList(arr);
//  List<Resource> resources = new ArrayList();
//  if (locations != null) {
//   for (String mapperLocation : locations) {
//    try {
//     Resource[] mappers = resourceResolver.getResources(mapperLocation);
//     resources.addAll(Arrays.asList(mappers));
//    } catch (IOException e) {
//     // ignore
//    }
//   }
//  }
//  return resources.toArray(new Resource[resources.size()]);
// }

 @Bean
 public SqlSessionFactory sqlSessionFactory() throws Exception {
  MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
  sqlSessionFactoryBean.setDataSource(dataSource());
  MybatisConfiguration configuration = new MybatisConfiguration();
  configuration.setMapUnderscoreToCamelCase(true);
  configuration.setDefaultEnumTypeHandler(EnumOrdinalTypeHandler.class);
  sqlSessionFactoryBean.setConfiguration(configuration);
//  sqlSessionFactoryBean.setMapperLocations(resolveMapperLocations());
  sqlSessionFactoryBean.setPlugins(new Interceptor[]{new PaginationInterceptor()});

  return sqlSessionFactoryBean.getObject();
 }


 @Bean
 public DataSourceTransactionManager transactionManager(){
  DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
  transactionManager.setDataSource(dataSource());
  return transactionManager;
 }

}

問題解決!

以上這篇解決Mybatis-Plus操作分頁后數(shù)據(jù)失效問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例

    java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例,需要的朋友可以參考下
    2014-03-03
  • Spring的初始化前中后詳細(xì)解讀

    Spring的初始化前中后詳細(xì)解讀

    這篇文章主要介紹了Spring的初始化前中后詳細(xì)解讀,Spring?框架是一個非常流行的?Java?框架,它提供了一種輕量級的、可擴展的方式來構(gòu)建企業(yè)級應(yīng)用程序,在?Spring?的生命周期中,有三個重要的階段,即初始化前、初始化、初始化后,需要的朋友可以參考下
    2023-09-09
  • java向es中寫入數(shù)據(jù)報錯org.elasticsearch.action.ActionReque問題

    java向es中寫入數(shù)據(jù)報錯org.elasticsearch.action.ActionReque問題

    這篇文章主要介紹了java向es中寫入數(shù)據(jù)報錯org.elasticsearch.action.ActionReque問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解Java設(shè)計模式編程中的里氏替換原則

    詳解Java設(shè)計模式編程中的里氏替換原則

    這篇文章主要介紹了Java設(shè)計模式編程中的里氏替換原則,有這個名字是因為這是由麻省理工學(xué)院的一位姓里的女士Barbara Liskov提出來的(嗯...),需要的朋友可以參考下
    2016-02-02
  • Java實現(xiàn)UDP多線程在線咨詢

    Java實現(xiàn)UDP多線程在線咨詢

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)UDP多線程在線咨詢,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Spring項目里將SQL語句寫在.sql文件中的方法

    Spring項目里將SQL語句寫在.sql文件中的方法

    這篇文章主要介紹了Spring項目里如何將SQL語句寫在.sql文件中的方法,文中給出了詳細(xì)的介紹和示例代碼,相信對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • Java中的序列化(Serializable)和反序列化

    Java中的序列化(Serializable)和反序列化

    這篇文章主要介紹了Java中的序列化(Serializable)和反序列化,?JAVA序列化與反序列化就是JAVA對象與一串字節(jié)流之間的相互轉(zhuǎn)換,?我們在程序中創(chuàng)建的JAVA對象只存在于JVM中,需要的朋友可以參考下
    2023-09-09
  • JavaCV實現(xiàn)照片馬賽克效果

    JavaCV實現(xiàn)照片馬賽克效果

    這篇文章主要介紹了如何通過JavaCV實現(xiàn)照片馬賽克效果,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)JavaCV有一定的幫助,感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-01-01
  • 深入淺析SSH的三個組件ssh、sftp、scp

    深入淺析SSH的三個組件ssh、sftp、scp

    SSH 包含3個組件,文中給大家詳細(xì)提到。這篇文章主要介紹了SSH的三個組件ssh、sftp、scp ,需要的朋友可以參考下
    2018-10-10
  • java如何對map進(jìn)行排序詳解(map集合的使用)

    java如何對map進(jìn)行排序詳解(map集合的使用)

    這篇文章主要介紹了java如何對map進(jìn)行排序,java map集合的使用詳解,大家可以參考使用
    2013-12-12

最新評論

巢湖市| 宜良县| 三门县| 汽车| 尼勒克县| 成安县| 松溪县| 榆中县| 莒南县| 抚州市| 桐柏县| 巨鹿县| 陇西县| 彭山县| 九龙坡区| 汶川县| 郸城县| 长兴县| 五台县| 扎囊县| 河南省| 门源| 贵州省| 望江县| 海淀区| 大竹县| 静乐县| 永定县| 红安县| 察雅县| 新建县| 神农架林区| 义马市| 城固县| 洛川县| 渭源县| 青铜峡市| 宿迁市| 德保县| 浦北县| 黄陵县|