그것은 가장 잘 사용되는 것이며, 장난은 아니지만 많은 사람들 이이 플러그인을 사용하는 이유를 이해하지 못합니다. SQL의 필기와 페이지 매김으로 SQL을 사용하는 것이 좋지 않습니까?
그래서 나는 왜 그것이 최고인지 설명하기 위해 이와 같은 예를 특별히 썼습니다.
다음과 같이 Mapper 인터페이스 및 XML을 작성했다고 가정합니다.
public interface sysloginlogmapper { / ** * 쿼리 조건에 따라 로그인 로그를 쿼리하십시오 * @param logip * @param username * @param exitdate * / list <sysloginlog> findsysloginLog ( "logip")) @param ( "logindate") 문자열 logindate, @param ( "exitDate") String exitDate, @param ( "logerr") String Logerr); } <? xml version = "1.0"encoding = "utf-8"?> <! doctype mapper public "-// mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> namespace = "com.easternie.sys.dao.sysloginlogmapper"> <select id = "findsysloginlog"resulttype = "com.easternie.sys.vo.model.sysloginlog"> select * from sys_login_log a <ustername! = null 및 username! = null! a.userid = b.userid </if> <where> <if test = "logip! = null and logip! = ''"> a.logip are '%'||#{logip} || '%'</if> <if test = "username! = '' '"> 및 (b.username | username} 또는 B. '%'||#{username} || '%') </if> <if test = "logindate! = null and logindate! = ''"> 및 to_date (a.logindate, 0,10), 'yyyy-mm-dd') = to_date (#{logindate}, 'yyyy-mm-dd') test = "exitdate! = null and exitdate! = ''"> 및 to_date (substr (a.exitdate, 0,10), 'yyyy-mm-dd') = to_date (#{exitdate}, 'yyyy-mm-dd') </if> < "logerr! = null and logerr! '%'||#{logerr} || '%'</if> </where> logid desc의 주문 </select> </mapper>간단한 예이지만 여기 XML은 그렇게 간단하지 않습니다.
위와 같은 기성품 MyBatis 방법이 이미 있고 지금이 쿼리를 Pagination하려면 어떻게해야합니까?
필기 SQL이라면 두 개의 인터페이스를 추가해야합니다. 하나는 총 카운트를 쿼리하고 다른 하나는 Pagination으로 변경해야합니다. XML로 복사하여 붙여 넣기가 어렵지 않은 것으로 보이며 진술을 변경하십시오. 당신은 이것을 했습니까?
이 플러그인을 사용하는 경우 어떻게해야합니까? ? ?
Mybatis가 쓴 이러한 방법에 대해서는 아무것도 바꿀 필요가 없습니다.
그러나 서비스 계층을 이동해야 할 수도 있습니다. 위의 구체적인 예. 아래 서비스 계층 호출 코드를보십시오.
페이징이 필요하지 않은 경우 코드 :
공개 목록 <SysloginLog> findsysloginLog (문자열 loginip, 문자열 사용자 이름, 문자열 로그인트, 문자열 exitDate, String Logerr)는 BusinessException {return sysloginlogmapper.findsySloginLog (loginip, username, logindate, exitdate, logerr); } 페이징 기능 추가 후 코드 :
public pagehelper.page <SysloginLog> findsySloginLog (문자열 loginip, 문자열 사용자 이름, 문자열 logindate, String exitDate, String logerr, int pagenumber, int pagesize) businessexception {pageHelper.StartPage (pagenumber, pagesize); sysloginlogmapper.findsysloginlog (loginip, username, logindate, exitdate, logerr); return pageHelper.endPage (); } 비교 :
리턴 값은 목록 <sysloginlog>에서 pagehelper.page <sysloginlog>로 변경되었습니다.
PageNumber 및 Pagesize의 두 매개 변수가 추가되었습니다
그런 다음 프로세스 코드에서 먼저 호출됩니다
pageHelper.startPage (pagenumber, pagesize);
StartPage는 인터셉터에게 페이징을 시작할 것이라고 말합니다. PAGED 매개 변수는이 두 가지입니다.
그런 다음 원본 mybatis 코드를 호출하십시오.
sysloginlogmapper.findsysloginlog (loginip, username, logindate, exitdate, logerr);
여기에 수신 된 값이 없다는 것이 이상합니까? 실제로 PageHelper는 자동으로 반환 값을 받았습니다. 반환 값은 다음 코드를 통해 검색 할 수 있습니다.
pageHelper.endPage ();
동시에, 엔드 페이지는 인터셉터에게 내가 페이징을 끝냈다 고 더 이상 당신이 필요하지 않다고 말했다.
그러한 코드가 단순하거나 필기 된 SQL이 간단하다고 생각하십니까?
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.