springboot 통합 my batis 페이지 차단기 문제 요약

간단 한 소개
또 물 을 부 는 시간 이 왔 습 니 다.그렇습니다.오늘 개발 할 때 자신 이 작성 한 코드 를 최적화 시 키 고 싶 습 니 다.개발 복 을 만 들 고 싶 지 않 기 때문에 망 가 질 까 봐 GIT 가 생산 복 에 많은 문 제 를 일 으 킨 다음 에 제 바퀴(도구)프로젝트 에 분리 시 키 려 고 했 습 니 다.마지막 으로 운영 한 후에 제 가 List 를 얻 을 때 적어도 10 초 걸 렸 습 니 다.평소에 도 제 정상 버 전이 800 ms 정도 라 서 놀 랐 어 요.전 제 는 저도 느 린 것 을 알 고 있 습 니 다.최적화 가 필요 할 때 저 는 최적화 된 plus 버 전 을 놓 고 10 초 어디로 돌아 가 는 지 알 고 있 습 니 다.처음에 제 가 이 app 프로젝트 를 받 았 을 때 저 는 PageHelper.startPage(page,num)를 사 용 했 습 니 다.(페이지 나 누 기),아직 찾 지 못 한 데이터 패 키 징(PageInfo)은 이미 페이지 를 나 누 었 습 니 다.지금 바퀴 로 바 꾸 면 이 문 제 를 발 견 했 습 니 다.limit 을 sql 뒤에 연결 하지 않 아서 저 는 모든 것 을 얻 었 습 니 다.그리고 PageInfo 페이지 는 데이터 양 이 많아 서 카드 가 많이 걸 렸 습 니 다.마지막 으로...
10 초:
在这里插入图片描述
정상 적 인:
在这里插入图片描述
springboot 통합 my batis 페이지 차단기
페이지 차단 은 실제로 sql 을 가 져 온 후 sql 연결 limit 입 니 다.
pom.xml

   <!--        -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
         <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
yml

spring:
  application:
    name: spring-cloud-dynamic
  datasource:
    #  
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/f2f?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 

    initial-size: 2
    max-idle: 10
    min-idle: 1
    max-wait: 60000
    max-active: 20 #       
    #        ,           
    time-between-eviction-tuns-millis: 60000
MybatisConfig

/**
 * @author lanys
 * @Description:
 * @date 23/7/2021   8:38
 */

@Configuration
@EnableTransactionManagement
@PropertySource(value = "classpath:application.yml", ignoreResourceNotFound = true)
public class MybatisConfig implements TransactionManagementConfigurer {

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

    @Value("${mybatis.type-aliases-package}")
    private String aliases;

    @Autowired
    private DataSource dataSource;

    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        //      
        bean.setDataSource(dataSource);
        //   xml
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapper));
        //     
        bean.setTypeAliasesPackage(aliases);
        //       
        bean.setPlugins(new Interceptor[]{pageInterceptor()});
        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        return bean.getObject();
    }

    /**
     *      
     * @return
     */
    private PageInterceptor pageInterceptor() {
        PageInterceptor pageInterceptor = new PageInterceptor();
        //    com.github.pagehelper.page.PageParams
        Properties p = new Properties();
        // RowBounds    count   -      
        p.setProperty("rowBoundsWithCount", "true");
        //     true   ,  page size   0( RowBounds limit=0),      ,      
        p.setProperty("pageSizeZero", "true");
        //      
        p.setProperty("reasonable", "false");
        //                ,  false
        p.setProperty("supportMethodsArguments", "true");
        //         ,       ,     
        p.setProperty("helperDialect", "mysql");
        pageInterceptor.setProperties(p);
        return pageInterceptor;
    }

    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}
테스트
자기 코드

/**
     *     
     * @param userId
     * @param page
     * @param size
     * @return
     */
    @Override
    public List<DynamicInfo> focusList(Long userId, Integer page, Integer size) {
        PageHelper.startPage(page, size);

        List<DynamicInfo> listByUserId = new ArrayList<>();
        try {
            //        
            listByUserId = this.dynamicReleaseMapper.getListFocusId(userId);
            if (listByUserId == null || listByUserId.size() == 0){
                return listByUserId;
            }
            //List<DynamicInfo> listByUserId = this.dynamicReleaseMapper.getListFocusId(userId).stream().filter(x->(x.getIsPicture()!=2 && x.getIsVideo() !=2)||(x.getIsPicture()==2 && x.getIsVideo() !=2)||(x.getIsPicture()!=2 && x.getIsVideo() ==2)).collect(Collectors.toList());
            publicGetDynamicInfo(userId,listByUserId);
            //}
            log.info("-------      -------");
            return listByUserId;
        } catch (Exception e) {
            log.error("        ",e);
        }
        return listByUserId;
    }
페이지 를 나 누 려 면 PageHelper.startPage(page,size)를 추가 해 야 합 니 다.그렇지 않 으 면 페이지 를 나 누 지 않 고 스스로 limit 을 추가 할 수도 있 습 니 다.
결과(sql 문 구 는 일부분 을 길 게 캡 처 합 니 다):

GROUP BY id ORDER BY create_time desc LIMIT ? 
총결산
이 코드 는 마지막 에 잘못 을 발견 한 후에 회사 의 큰 사람 에 게 물 어 봐 야 알 게 되 었 습 니 다.순간 배 웠 습 니 다.누 군가 이것 이 무슨 좋 은 점 이 있 느 냐 고 물 을 수 있 습 니 다.
장점(자신의 생각):
1.데이터베이스 에 직접 걸 러 내 면 처리 가 많이 줄어든다.왜?만약 당신 이 먼저 모든 봉인 페이지 를 찾 아 낸다 면,아무런 문제 도 찾 아 볼 수 없 기 때문이다.그러나 직접 가 져 온 후에 다른 처리 가 필요 합 니 다.예 를 들 어 하나의 동태,최신 동 태 를 얻 으 려 면 그림,동 영상,태그,주소 등 이 필요 합 니 다.이 일련의 가 져 온 동 태 는 매우 적 고 괜 찮 습 니 다.만약 에 많 으 면 그 속 도 는 자신 도 무 섭 습 니 다(느 립 니 다).
2.운행 속도 가 매우 빠 르 기 때문에 개발 과정 에서 데이터 베 이 스 를 방문 하여 데 이 터 를 얻 는 것 을 최대한 줄인다.
3.편리 함,어떤 것 은 sql 뒤에 스스로 limit 를 추가 하지만 sql 문 구 는 많 을 때 도 번 거 롭 습 니 다.
단점:
개인의 요구 가 맞 는 지 안 맞 는 지 를 보다.
springboot 통합 my batis 차단기 페이지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 springboot 통합 my batis 페이지 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기