Unmittelbar nach dem vorherigen Artikel - die Prinzipien der Paging -Technologie sowie die Bedeutung und Methoden des Paging (i). Dieser Artikel analysiert weiterhin die Paging -Technologie. Der vorherige Artikel spricht über die einfachen Prinzipien und die Einführung der Paginationstechnologie. Dieser Artikel analysiert die Codeimplementierung der Paginationstechnologie.
Im letzten Artikel besteht die beste Implementierung von Paging darin, auf der Datenbankschicht zu pagieren, und verschiedene Datenbanken haben unterschiedliche Paging -Implementierungen. Zum Beispiel verwendet Oracle dreischichtige SQL-Nisting, um Paging zu implementieren, und MySQL verwendet das Limit-Schlüsselwort, um die Grenze zu implementieren (im vorherigen Artikel erwähnt).
Dieser Artikel basiert auf Java + Oracle und erläutert die Implementierung der Codeschicht .
Wie wir normalerweise in Paging sehen, enthält das zurückgegebene Abfrageergebnis nicht nur die Abfrageergebnis -Set (Liste), sondern auch die Gesamtzahl der Seiten (Pagenum), die aktuelle Seite (Pageno) und andere Informationen. Daher umfassen wir eine Abfrageergebnis -PageModel -Klasse, der Code ist wie folgt:
Paket Kane; import Java.util.List; Public Class Pagemodel <e> {private list <e> list; privates int pageno; private int pagesize; privat int total; Private int TotalPage; öffentliche Liste <E> getList () {return list; } public void setList (Liste <E> Liste) {this.list = list; } public int getPageno () {return pageno; } public void setpageno (int pageno) {this.pageno = pageno; } public int getPageSize () {return pageSize; } public void setPageSize (int pageSize) {this.pageSize = pageSize; } public int getTotalnum () {return Totalnum; } public void settotalnum (int totalnum) {this.totalnum = totalnum; settotalpage ((gettotalnum () % pageSize) == 0? (GetTotalnum () / pageSize): (GetTotalnum () / pageSize + 1)); } public int getTotalpage () {return TotalPage; } public void setotalpage (int TotalPage) {this.totalPage = TotalPage; } // Erhalten Sie die erste Seite public int getfirstpage () {return 1; } // Erhalten Sie die letzte Seite public int getLastPage () {return TotalPage; } // die vorherige Seite public int getPrepage () {if (pageno> 1) Return Pageno - 1; Rückkehr 1; } // Erhalten Sie die letzte Seite public int getbackpage () {if (pageno <TotalPage) return pageno + 1; Return TotalPage; } // Erhalten Sie die letzte Seite public int getbackpage () {if (pageno <TotalPage) return pageno + 1; Return TotalPage; } // messen Sie, ob 'Homepage' und 'Startseite' verfügbar sind, öffentliche String isPreable () {if (pageno == 1) return "deaktiviert"; zurückkehren ""; } // messen Sie, ob 'letzte Seite' und 'nächste Seite' verfügbar sind, öffentliche String isbackable () {if (pageno == TotalPage) return "deaktiviert"; zurückkehren ""; }} Die Verwendung von Generika besteht darin, die Paging -Klasse wiederverwendet zu werden. Wenn Sie beispielsweise Benutzer abfragen, kann das Benutzerobjekt eingekapselt werden, und bei Abfragen von Flussaufträgen in der Finanzierung kann die FlowCard -Klasse eingekapselt werden.
Wir nehmen den Abfragebenutzer als Beispiel. Der Benutzer wählt die Abfragebedingung aus, rufen Sie zuerst das Servlet auf, um die Abfrageparameter zu erhalten, und fordern Sie dann die Geschäftslogikschicht an, um die paginierte Kapselungsergebnisklasse zu erhalten. Die Geschäftslogik ruft die DAO -Ebene auf, um die Ergebnismenge zu erhalten und die Datensätze im Prozess zu erhalten. Die Anzahl der Datensätze im Prozess wird in die Seitenklasse eingekapselt. Schließlich setzt das Servlet das Ergebnis auf die JSP -Seite, um anzuzeigen.
Lassen Sie uns zunächst den Servlet erklären, der Code lautet wie folgt:
Paket Kane; import Java.io.*; Import Java.util. javax.servlet.http.httpServletResponse; import kane.userinfo; import kane private int pageSize = 0; @Override public void init (servletConfig config) löst ServletException aus {pageSize = Integer.parseInt (config.getInitParameter ("pageSize")); } @Override Protected void dagget (httpServletRequest req, httpServletResponse resp) löscht ServletException, ioException {dopost (req, resp); } @Override Protected void dopost (httpServletRequest req, httpServletResponse resp) löst ServletException aus, ioException {// 1. Seitenparameter abrufen und das Parameterobjekt int pageno = integer.parseInt (req.getParameter ("pageno");); String sex = req.getParameter ("Geschlecht"); String home = req.getParameter ("NewLocation"); String College = req.getParameter ("Kollegen"); String Coming Year = Req.getParameter ("Comingyear"); UserInfo u = new UserInfo (); U.SetSex (Sex); U.Sethome (Zuhause); U.SetColleage (Kollegen); U.Setcy (Comingyear); // 2. Ruf Business Logic auf, um das Ergebnis set userInfomanage userInfomanage = new UserInfomanage (); Pagemodel <userInfo> pagination = userInfomanage.userbasicsarch (u, pageno, pageSize); Liste <Benerfo> userList = pagination.getList (); // 3.. Kapitulieren Sie die Rückgabeergebnis StringBuffer resultxml = new StringBuffer (); try {resultxml.append ("<? xml Version = '1.0' coding = 'gb18030'?>/n"); resultxml.append ("<root>/n"); für (iterator <userInfo> iterator = userList.iterator (); iterator .hasnext ();) {userInfo userInfo = iterator.next (); resultxml.append ("<daten>/n"); resultxml.append ("/t <id>" + userInfo.getId () + "</id>/n"); resultxml.append ("/t <truename>" + userInfo.getTruename () + "</truename>/n"); resultxml.append ("/t <sex>" + userInfo.getSex () + "</sex>/n"); resultxml.append ("/t <home>" + userInfo.gethome () + "</home>/n"); resultxml.append ("/t <home>" + userInfo.gethome () + "</home>/n"); resultxml.append ("</data>/n"); } resultxml.append ("<Pagination>/n"); resultxml.append ("/t <totas>" + pagination.gettotalpage () + "</total>/n"); resultxml.append ("/t <start>" + pagination.getFirstpage () + "</start>/n"); resultxml.append ("/t <end>" + pagination.getLastpage () + "</end>/n"); resultxml.append ("/t <pageno>" + pagination.getPageno () + "</pageno>/n"); resultxml.append ("</pagination>/n"); resultxml.append ("</root>/n"); } catch (Ausnahme e) {e.printstacktrace (); } writerPonse (req, resp, resultxml.toString ()); } public void writersponse (httpServletRequest -Anforderung, httpServletResponse -Antwort, String -Ergebnis) löst IOException aus {response.setContentType ("text/xml"); response.setheader ("cache-control", "no-cache"); response.setheader ("content-type", "text/xml; charset = gb18030"); Printwriter pw = response.getWriter (); PW.Write (Ergebnis); pw.close (); }} Der Benutzerobjektcode lautet wie folgt:
Paket Kane; import Java.util.Date; öffentliche Klasse userInfo {private int id; privater String -Benutzername; privates Zeichenfolgenkennwort; private String -Truename; privater String Sex; Privatdatum Geburtstag; private Stringhaus; privates String College; private Zeichenfolge im kommenden Jahr; public int getid () {return id; } public void setId (int id) {this.id = id; } public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername; } public String getPassword () {Kennwort zurückgeben; } public void setPassword (String -Passwort) {this.password = password; } public String getTruename () {return truename; } public void setTruename (String Truename) {this.Truename = TrueName; } public String getSex () {Return Sex; } public void setsex (String sex) {this.sex = sex; } public date getBirthday () {Return Birthday; } public void setBirthday (Datum Geburtstag) {this.birthday = Geburtstag; } public String gethome () {nach Hause zurückkehren; } public void Sethome (String Home) {this.home = home; } public String getColleage () {return College; } public void setColleage (String -Kollegin) {this.colleage = college; } public String getcy () {return Comingyear; } public void setcy (String cy) {this. Comingyear = Cy; }} Als nächstes kommt der Code für Geschäftslogikschicht, der Code ist wie folgt:
Paket Kane; importieren java.sql.connection; import kane public userInfomanage () {userInfodao = new userInfodao (); } public pagemodel <userInfo> userBasisSearch (userInfo u, int pageno, int pageSize) löst eine Ausnahme aus {Connection Connection = null; Pagemodel <userInfo> pagination = new pagemodel <userInfo> (); try {Connection = dButility.getConnection (); DButility.SetAutoCommit (Verbindung, Falsch); pagination.setList (userInfodao.getUserList (u, pageno, pageSize)); pagination.setpageno (pageno); pagination.setPageSize (pageSize); pagination.settotalnum (userInfodao.gettotalnum (u)); DButility.Commit (Verbindung); } catch (Ausnahme e) {dbutility.rollback (Verbindung); E. printstacktrace (); Neue Ausnahme () werfen; } endlich {dbutility.cleSeconnection (); } Return Pagination; }} Wo DButility die Verbindungskapselungsklasse der Datenbank ist.
Schließlich lautet die Implementierung von DAO Layer Code wie folgt:
Paket Kane; Import Java.sql.Connection; Import Java.Sql.PrepararedStatement; Import Java.SQL.Resultset; Imory Java.sql.sqlexception; importieren Sie Java.util.ArrayList; Imporation Java.util.im.dbutility; UserInfodao {publiclist <Bed UserInfo> getUserList (userInfo userInfo, int pageno, int pageSize) löst eine Ausnahme aus {prepedStatement pstmt = null; ResultSet rs = null; LIST <BENE INFO> userList = null; Versuchen Sie {String sql = "Select * aus (SELECT ROWNUM num, u. * aus (aus select * von user_info wob Rownum <=?) Wo num> =? "; userList = new ArrayList <Benerfo> (); Verbindung conn = dButility.getConnection (); pstmt = conn.preparestatement (SQL); pstmt.setString (1, userInfo.getSex ()); pstmt.setint (2, pageno * pageSize); pstmt.setint (3, (pageno - 1) * pageSize + 1); rs = pstmt.executeQuery (); while (rs.Next ()) {userInfo user = new userInfo (); user.setId (rs.getInt ("id")); user.setTruename (rs.getString ("TrueName")); user.setSex (Rs.GetString ("Sex")); user.sethome (rs.getString ("home")); userList.add (Benutzer); }} catch (sqlexception e) {e.printstacktrace (); Neue Ausnahme (e) werfen; } endlich {dButility.closeresUltSet (Rs); DButility.CLOSEPREPARDSTATEMENT (PSTMT); } userList zurückgeben; } public int getTotAlnum (userInfo userInfo) löst Ausnahme aus {prepedStatement pstmt = null; ResultSet rs = null; int count = 0; Versuchen Sie {String sql = "Wählen Sie Count (*) von user_info wob Verbindung conn = dButility.getConnection (); pstmt = conn.preparestatement (SQL); pstmt.setString (1, userInfo.getSex ()); rs = pstmt.executeQuery (); if (rs.Next ()) {count = rs.getint (1); }} catch (sqlexception e) {e.printstacktrace (); Neue Ausnahme (e) werfen; } endlich {dButility.closeresUltSet (Rs); DButility.CLOSEPREPARDSTATEMENT (PSTMT); } return count; }} Schließlich gibt das Servlet das Ergebnis auf die JSP -Seite zurück, um anzuzeigen.
HINWEIS: Der DButility -Code ist der Code, der den Datenbankverbindungsvorgang wie folgt zusammenfasst:
Paket Kane; import Java.sql.Connection; Import Java.sql.drivermanager; Import Java.SQL.PrepararedStatement; Import Java.SQL.Resultset; Import Java.sql.sqLexception; öffentliche Klasse DButility {private statische Threadlocal <Conbutation> threadlocal <Verbindung> threadlocal <connection> threadlocal <Verbindung> threadlocal <connection> new threadlocal <Verbindung> (). öffentliche statische Verbindung getConnection () {Verbindung conn = null; conn = threadLocal.get (); if (conn == null) {try {class.forname ("oracle.jdbc.driver.oracledriver"); conn = driverManager.getConnection ("JDBC: Oracle: Thin: @LocalHost: 1521: Oracle", "admin", "admin"); threadLocal.set (conn); } catch (classNotFoundException e) {e.printstacktrace (); } catch (sqlexception e) {e.printstacktrace (); }} return conn; } // Einstellungen der Kapselung Einstellungen haben automatisch öffentliche statische void setAutocommit (Verbindung conn, boolean Flag) {try {conn.setAutoCommit (Flag); } catch (sqlexception e) {e.printstacktrace (); }} // Transaktionsbeschwerde öffentlich statisches void commit (Verbindung conn) {try {conn.commit (); } catch (sqlexception e) {e.printstacktrace (); }} // Verkapselung Set Connection Rollback public static void rollback (Verbindung conn) {try {conn.rollback (); } catch (sqlexception e) {e.printstacktrace (); }} // Die Funktion, die die Verbindung, die Vorbereitung und das Ergebnis public static void Closeconnection () {Connection conn = threadLocal.get () schließt, zusammenfassen; try {if (conn! = null) {conn.close (); conn = null; threadLocal.remove (); }} catch (sqlexception e) {e.printstacktrace (); }} public static void closrepreprepreoparedStatement (preparedStatement pstmt) {try {if (pstmt! = null) {pstmt.close (); pstmt = null; }} catch (sqlexception e) {e.printstacktrace (); }} public static void näheresUltset (resultset rs) {try {if (rs! = null) {rs.close (); rs = null; }} catch (sqlexception e) {e.printstacktrace (); }}} ThreadLocal wird verwendet, um die Konsistenz von Transaktionen zu gewährleisten, sodass alle Datenbankvorgänge desselben Threads dieselbe Verbindung verwenden.
Zu diesem Zeitpunkt wird eine einfache Code -Implementierung abgeschlossen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.