springboot 통합 my batis 페이지 차단기 문제 요약
7393 단어 springbootmybatis페이지 를 나누다차단기
또 물 을 부 는 시간 이 왔 습 니 다.그렇습니다.오늘 개발 할 때 자신 이 작성 한 코드 를 최적화 시 키 고 싶 습 니 다.개발 복 을 만 들 고 싶 지 않 기 때문에 망 가 질 까 봐 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 페이지 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.