Dao 툴 페이지 넘기 기술의 강점은 무엇입니까?

2803 단어
BeetlSql도 페이지 넘기기 인터페이스를 내놓았는데 전체적으로 다른 Dao 도구와 차이가 많지 않다. PageQuery를 전송하고 조회 매개 변수와 현재 페이지 수를 포함하여 웹 페이지 넘기는 데 여러 가지 출력이 필요하다. 예를 들어
1 총 질의 결과
2 현재 질의 결과
3 모두 몇 페이지입니까
4 현재 페이지
5 첫 페이지인지 마지막 페이지인지 여부
PageQuery query = new PageQuery();
    sqlManager.pageQuery("user.allUser", User.class, query);
    System.out.println(query.getTotalPage());
    System.out.println(query.getTotalRow());
    System.out.println(query.getPageNumber());
    List<User> list = query.getList();

다른 Dao 도구도 비슷한 기능을 가지고 있지만 실현에 있어서는 약간의 차이가 있다. BeetlSql이 더 좋은 페이지 넘기 실현을 제공했다고 할 수 있다.이것은 BeetlSql이 손으로 쓴 sql를 최대한 줄이고 페이지를 넘기는 점에서도 비례가 다르기 때문이다.
BeetlSql에서는 한 개의 ql 문구로 총 두 개의 작업을 조회할 수 있습니다. 다음과 같습니다.
allUser
===
*        
select 
@pageTag(){
id,name,age
@}
from user 
where ....

위의 sql 문장과 같이 조회는 탭 함수 페이지태그에 열거되어 있습니다. 만약에 조회 결과의 총수를 구하면 페이지태그 함수는count(1)로 출력됩니다. 만약에 조회 결과 집합을 구하면 탭 함수 페이지태그는 탭체를 출력합니다. 따라서 페이지를 뒤집은 동작은 실제적으로 두 개의 sql로 변합니다. 다음과 같습니다.
select count(1) from user where ....

select id,name,age from user where ... limit ?, ?

또한 BeetlSql은 함수 페이지를 사용하여 다음과 같이 단순화할 수 있습니다.
select #page("*")# from user where ....

생성된 문은
select count(1) from user where ....

select * from user where ... limit ?, ?

페이지 함수는 문자열을 받아들여 검색 결과 sql에서 그대로 출력하고 검색 총수에서count(1)를 출력합니다
그렇다면 왜 BeetlSql이 다른Dao 프레임워크보다 페이지를 넘기는 것이 좋다고 말합니까? 어떤 프레임워크는 sql문장만 제공하면 페이지를 넘길 수 있습니다. 예를 들어 같은user 조회와 유사하게 다음과 같습니다.
Page page = XXXDaoTool.query("select * from user where",1,10);//   Dao  

이런 프레임워크는 두 개의 ql로 완성할 수 있는데, 각각 다음과 같다
  Dao    
select count(1) from (select * from user where ...) x 

select * from user where ... limit ?,?

만약 당신이 sql 실행 계획에 대해 좀 알고 있다면, 첫 번째 sql는 전체 테이블 스캔 (where가 없고, 보통 웹 페이지가 막 들어와서 아무런 조건도 없음) 을 한 다음에 결과집을 꺼낸 후에 총수를 구하는 것을 발견할 수 있을 것이다. 성능이 매우 낮다.
select count(1)from user where, 인덱스 총수 하나만 구하는 빠른 성능
이를 통해 알 수 있듯이 이런 Dao 도구에 대해서는 조회 총수를 최대한 피해야 한다. 특히 어떠한 조건도 입력하지 않는 조회를 피해야 한다.
BeetlSQL의 PageQuery도 보다 효율적인 페이지 넘기 조회를 제공했다. 왜냐하면 어떤 때는 두 개의 ql로 총수와 조회 결과 집합을 각각 조회하는 것이 더욱 효율적이기 때문이다.예를 들어 하나의 sql로 정렬이 존재할 때 이 문장으로 결과 총수를 조회하면 효율이 떨어지고 두 개의 Sql로 하는 것이 더 좋은 선택이다.아래와 같다
allUser
===
select * from user where .... order by id desc

allUser$count
===
select  count(1) from user where .... 

하면, 만약, 만약...
sqlManager.pageQuery("user.allUser", User.class, query);

BeetlSql은 항상 allUser와 allUser$count를 우선적으로 조회합니다. 만약 allUser$count가 없으면 ql문장에 페이지태그가 있다고 생각할 수 있습니다.
전체적으로 말하면 BeetSql 페이지 넘기는 전통적인Hibernate보다 MyBatis가 더 빨리 개발하고 페이지 넘기는 작업을 완성할 수 있으며 다른 Dao 도구보다 더욱 효율적이다.

좋은 웹페이지 즐겨찾기