對《慕課網》分頁教程的感悟一

  金秋十月,國慶中秋佳節之際,或是以觀慕課網而學之。javascript

  分頁:這個之前我無數次所使用過的功能,可是這一次看過以後,才知道是我之前所理解的是如此的稚嫩。html

  簡單的說一下感悟吧,或者說是簡單的將一些本身尚未作到的東西來進行觀摩。固然,得謝謝慕課網的老師進行的分享。前端

   

  對於分頁,做者從 sublist 以及 sql 語句和hibernate框架三個方面進行講解:java

  首先,咱們說一下使用 sublist 方法進行的其中奧義:mysql

  程序整體採用MVC的設計模式,來進行分析。正則表達式

  這是整個目錄的結構sql

    提點:

      1.再程序中使用了filter , 這個功能彷佛看起來是如此的不起眼,可是咱們又有多少人會去主動的使用這個功能呢數據庫

          具體: 實現 Filter 接口,將 請求和響應的編碼進行統一的設置,保證了比較合理的編碼統一性。設計模式

          代碼實現:網絡

          

package com.imooc.page;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

 

       2.其次,再日常咱們所使用jdbc進行連接數據庫的時候,都是直接將代碼進行設置用戶名和密碼,可是這裏咱們使用的jdbc.properties ,而後在連接的工具類中進行設置,就能達到代碼的複用性。還有做者在處理異常方面,也是之前的我並無考慮過的問題,之前都是直接將異常捕捉可是沒有任何的動做,做者在這裏將異常進行處理了。

    

  throw new RuntimeException("讀取數據庫配置文件異常!", e);  //咱們在進行異常處理的時候,就應該是這樣來進行處理的

      jdbc.properties 這個文件是比較好創建的,可是怎麼在程序中將他讀出來呢?

      

       以反射的方式就能以流的方式將這個文件裏面的內容進行傳遞。這一點咱們須要學習。

      另外,想過這個方法在何時加載呢?

      咱們能夠將這個方法放在static代碼塊裏面,在類第一次加載的時候進行加載,而且只會加載一次。靜態方法只能調用靜態方法哦!!!

      另外,複寫過帶參數的構造方法以後必定要記得在重寫一個無參的構造方法。

       在使用sql語句中,使用到了佔位符,這個東西也是咱們之後必備,而且這裏仍是有着怎麼填佔位符裏面的內容。

    另外這裏記錄一個錯誤:

        eclipse報錯:Description Resource Path Location Type Target runtime com.genuitec.runtime.

        這個問題的解決方案網上有一種:打開org.eclipse.wst.common.project.facet.core.xml文件,並刪除裏面的一句<runtime name="" 便可,可是樓主並不清楚這樣作有什麼好處,還望告知。

      完整jdbcutil工具代碼以下:

      

//------------------------------jdbc.properties------------------------------//
jdbc.username=root jdbc.password=123456 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/imooc
//---------------------------------------------------JdbcUtil-------------------------------// 

package
com.imooc.page.util; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; public class JdbcUtil { // 表示定義數據庫的用戶名 private static String USERNAME; // 定義數據庫的密碼 private static String PASSWORD; // 定義數據庫的驅動信息 private static String DRIVER; // 定義訪問數據庫的地址 private static String URL; // 定義數據庫的連接 private Connection connection; // 定義sql語句的執行對象 private PreparedStatement pstmt; // 定義查詢返回的結果集合 private ResultSet resultSet; static { // 加載數據庫配置信息,並給相關的屬性賦值 loadConfig(); } /** * 加載數據庫配置信息,並給相關的屬性賦值 */ public static void loadConfig() { try { InputStream inStream = JdbcUtil.class.getResourceAsStream("/jdbc.properties"); Properties prop = new Properties(); prop.load(inStream); USERNAME = prop.getProperty("jdbc.username"); PASSWORD = prop.getProperty("jdbc.password"); DRIVER = prop.getProperty("jdbc.driver"); URL = prop.getProperty("jdbc.url"); } catch (Exception e) { throw new RuntimeException("讀取數據庫配置文件異常!", e); } } public JdbcUtil() { } /** * 獲取數據庫鏈接 * * @return 數據庫鏈接 */ public Connection getConnection() { try { Class.forName(DRIVER); // 註冊驅動 connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); // 獲取鏈接 } catch (Exception e) { throw new RuntimeException("get connection error!", e); } return connection; } /** * 執行更新操做 * * @param sql * sql語句 * @param params * 執行參數 * @return 執行結果 * @throws SQLException */ public boolean updateByPreparedStatement(String sql, List<?> params) throws SQLException { boolean flag = false; int result = -1;// 表示當用戶執行添加刪除和修改的時候所影響數據庫的行數 pstmt = connection.prepareStatement(sql); int index = 1; // 填充sql語句中的佔位符 // 遍歷一個list集合 if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { pstmt.setObject(index++, params.get(i)); } } result = pstmt.executeUpdate(); flag = result > 0 ? true : false; return flag; } /** * 執行查詢操做 * * @param sql * sql語句 * @param params * 執行參數 * @return * @throws SQLException */ public List<Map<String, Object>> findResult(String sql, List<?> params) throws SQLException { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); int index = 1; pstmt = connection.prepareStatement(sql); if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { pstmt.setObject(index++, params.get(i)); } } resultSet = pstmt.executeQuery(); ResultSetMetaData metaData = resultSet.getMetaData(); int cols_len = metaData.getColumnCount(); while (resultSet.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < cols_len; i++) { String cols_name = metaData.getColumnName(i + 1); Object cols_value = resultSet.getObject(cols_name); if (cols_value == null) { cols_value = ""; } map.put(cols_name, cols_value); } list.add(map); } return list; } /** * 釋放資源 */ public void releaseConn() { if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { throw new RuntimeException("釋放資源失敗", e); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { throw new RuntimeException("釋放資源失敗", e); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { throw new RuntimeException("釋放資源失敗", e); } } } public static void main(String[] args) { JdbcUtil jdbcUtil = new JdbcUtil(); jdbcUtil.getConnection(); try { List<Map<String, Object>> result = jdbcUtil.findResult("select * from t_student", null); for (Map<String, Object> m : result) { System.out.println(m); } } catch (SQLException e) { throw new RuntimeException("查詢數據失敗", e); } finally { jdbcUtil.releaseConn(); } } }

另外數據庫附上:

  

DROP TABLE IF EXISTS `t_student`;
CREATE TABLE `t_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `stu_name` varchar(16) NOT NULL,
  `gender` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `address` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

INSERT INTO `t_student` VALUES ('1', '王小軍', '1', '17', '北京市東城區');
INSERT INTO `t_student` VALUES ('2', '李雷雷', '1', '16', '北京市朝陽區');
INSERT INTO `t_student` VALUES ('3', '張靜', '2', '16', '北京市昌平區');
INSERT INTO `t_student` VALUES ('4', '王曉萌', '2', '17', '北京市順義區');
INSERT INTO `t_student` VALUES ('5', '韓梅梅', '2', '16', '北京市朝陽區');
INSERT INTO `t_student` VALUES ('6', '李小軍', '1', '17', '北京市海淀區');
INSERT INTO `t_student` VALUES ('7', '成龍', '1', '16', '北京市石景山區');
INSERT INTO `t_student` VALUES ('8', '李海飛', '2', '16', '北京市海淀區');
INSERT INTO `t_student` VALUES ('9', '羅紅', '2', '16', '北京市朝陽區');
INSERT INTO `t_student` VALUES ('10', '孫海傑', '1', '16', '北京市石景山區');
INSERT INTO `t_student` VALUES ('11', '王海龍', '1', '16', '北京市東城區');

 

  -----------------------------------------------------------------------以上就是對裏面的一些基礎內容和jdbc的鏈接方式產生的優異點----------------------------------------------------------------

 

  -----------------------------------------------------------------------下面咱們開始步入正題--------------------------------------------------------------------------

  首先,咱們先看modal層:

      modal層和我平時最大的不一樣點就是,他用了極多的構造方法。

  這是兩個構造方法,第一個能夠理解爲賦值,後者呢?應該也是賦值的方法,只是這樣多寫一個構造方法或許有些得不償失,固然,多是有其餘的功能, 具體咱們在接着往下看。

  

 ------------------------------------------------------------Student.java-------------------------------------------


package
com.imooc.page.model; import java.io.Serializable; import java.util.Map; public class Student implements Serializable {
  
  
  //能夠看到這裏使用了序列化,可是序列化有什麼做用呢?何時進行序列化呢?
  //序列化應該是和流有關係的,方便數據在網絡中進行存儲,那麼在這裏有什麼做用呢?
private static final long serialVersionUID = -7476381137287496245L; private int id; //學生記錄id private String stuName;//學生姓名 private int age; //學生年齡 private int gender; //學生性別 private String address;//學生住址 public Student() { super(); } public Student(int id, String stuName, int age, int gender, String address) { super(); this.id = id; this.stuName = stuName; this.age = age; this.gender = gender; this.address = address; } public Student(Map<String, Object> map){ this.id = (int)map.get("id"); this.stuName = (String)map.get("stu_name"); this.age = (int)map.get("age"); this.gender = (int)map.get("gender"); this.address = (String)map.get("address"); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Student [id=" + id + ", stuName=" + stuName + ", age=" + age + ", gender=" + gender + ", address=" + address + "]"; } }

 

 咱們的主要功能是分頁,那麼就確定有分頁的一個對象類。

-----------------------------------------------------------------Pager<T>.java-------------------------------------------------
package
com.imooc.page.model; import java.io.Serializable; import java.util.List; public class Pager<T> implements Serializable { private static final long serialVersionUID = -8741766802354222579L; private int pageSize; // 每頁顯示多少條記錄 private int currentPage; // 當前第幾頁數據 private int totalRecord; // 一共多少條記錄 private int totalPage; // 一共多少頁記錄 private List<T> dataList; // 要顯示的數據 /** * * @param pageNum * 就是所點擊的頁數 * @param pageSize * 每頁顯示多少條記錄 * @param sourceList * 要顯示的數據 對於其餘的一些數據咱們在程序中就能知道里面的具體參數數據 */ public Pager(int pageNum, int pageSize, List<T> sourceList) { if (sourceList == null || sourceList.isEmpty()) { return; } // 總記錄條數 this.totalRecord = sourceList.size(); // 每頁顯示多少條記錄 this.pageSize = pageSize; // 獲取總頁數 this.totalPage = this.totalRecord / this.pageSize; if (this.totalRecord % this.pageSize != 0) { this.totalPage = this.totalPage + 1; } // 當前第幾頁數據 this.currentPage = this.totalPage < pageNum ? this.totalPage : pageNum; // 起始索引 int fromIndex = this.pageSize * (this.currentPage - 1); // 結束索引 int toIndex = this.pageSize * this.currentPage > this.totalRecord ? this.totalRecord : this.pageSize * this.currentPage; this.dataList = sourceList.subList(fromIndex, toIndex); } public Pager() { } public Pager(int pageSize, int currentPage, int totalRecord, int totalPage, List<T> dataList) { super(); this.pageSize = pageSize; this.currentPage = currentPage; this.totalRecord = totalRecord; this.totalPage = totalPage; this.dataList = dataList; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getTotalRecord() { return totalRecord; } public void setTotalRecord(int totalRecord) { this.totalRecord = totalRecord; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public List<T> getDataList() { return dataList; } public void setDataList(List<T> dataList) { this.dataList = dataList; } }

  這裏還有一個常量類,能夠將程序的複用性大大的增長:

  

package com.imooc.page;

public class Constant {

    /**
     * 男性
     */
    public static final int GENDER_MALE = 1;
    
    /**
     * 女性
     */
    public static final int GENDER_FEMALE = 2;
    
    /**
     * 默認每頁顯示多少條記錄
     */
    public static final int DEFAULT_PAGE_SIZE = 5;
    
    /**
     * 默認顯示第幾頁記錄
     */
    public static final int DEFAULT_PAGE_NUM = 1;
    
    /**
     * 默認學生性別
     */
    public static final int DEFAULT_GENDER = 0;
}

 

 看完了咱們有的modal層,咱們就來看一下控制層,servlet

  判斷從前端獲取的數據是否是空的:

  

    另外還有如何校驗參數是否是一個大於0的數字:

    

----------------------------------------------StringUtil.java-----------------------------------------------
package
com.imooc.page.util; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringUtil { /** * 校驗字符串是不是大於0的數字 * @param string * @return */ public static boolean isNum(String string){
    //這是在java中對正則表達式的匹配方法,java中提供了專門的類來進行使用 Pattern Pattern pattern
= Pattern.compile("[1-9]{1}\\d*"); Matcher matcher = pattern.matcher(string); return matcher.matches(); } }

  

----------------------------------------------------------------SublistServlet.java-------------------------------------------------
package
com.imooc.page.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.imooc.page.Constant; import com.imooc.page.model.Pager; import com.imooc.page.model.Student; import com.imooc.page.service.StudentService; import com.imooc.page.service.SublistStudentServiceImpl; import com.imooc.page.util.StringUtil; public class SublistServlet extends HttpServlet { private static final long serialVersionUID = -3658128508633145268L; private StudentService studentService = new SublistStudentServiceImpl(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接收request裏的參數 String stuName = request.getParameter("stuName"); //學生姓名 // 獲取學生性別 //在這個類中,咱們就是用到了咱們的常量類,學生默認性別爲0 int gender = Constant.DEFAULT_GENDER; String genderStr = request.getParameter("gender"); if(genderStr!=null && !"".equals(genderStr.trim())){ gender = Integer.parseInt(genderStr); } // 校驗pageNum參數輸入合法性 String pageNumStr = request.getParameter("pageNum"); if(pageNumStr !=null && !StringUtil.isNum(pageNumStr)){ request.setAttribute("errorMsg", "參數傳輸錯誤"); request.getRequestDispatcher("sublistStudent.jsp").forward(request, response); return; } int pageNum = Constant.DEFAULT_PAGE_NUM; //顯示第幾頁數據 if(pageNumStr!=null && !"".equals(pageNumStr.trim())){ pageNum = Integer.parseInt(pageNumStr); } int pageSize = Constant.DEFAULT_PAGE_SIZE; // 每頁顯示多少條記錄 String pageSizeStr = request.getParameter("pageSize"); if(pageSizeStr!=null && !"".equals(pageSizeStr.trim())){ pageSize = Integer.parseInt(pageSizeStr); } // 組裝查詢條件 Student searchModel = new Student(); searchModel.setStuName(stuName); searchModel.setGender(gender); //調用service 獲取查詢結果 Pager<Student> result = studentService.findStudent(searchModel, pageNum, pageSize); // 返回結果到頁面 request.setAttribute("result", result); request.setAttribute("stuName", stuName); request.setAttribute("gender", gender); request.getRequestDispatcher("sublistStudent.jsp").forward(request, response); } }
-----------------------------------------------------------------sublistStudent.jsp--------------------------------------------------

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>學生信息</title> </head> <% // 獲取請求的上下文 String context = request.getContextPath(); %> <script type="text/javascript"> // 當前第幾頁數據 var currentPage = ${result.currentPage}; // 總頁數 var totalPage = ${result.totalPage}; //這種方法能夠把表單數據和非表單數據一塊兒傳動給後臺 function submitForm(actionUrl){ var formElement = document.getElementById("stuForm"); formElement.action = actionUrl; formElement.submit(); } // 第一頁 function firstPage(){ if(currentPage == 1){ alert("已是第一頁數據"); return false; }else{ submitForm("<%=context%>/sublist/SublistServlet?pageNum=1"); return true; } } // 下一頁 function nextPage(){ if(currentPage == totalPage){ alert("已是最後一頁數據"); return false; }else{ submitForm("<%=context%>/sublist/SublistServlet?pageNum=" + (currentPage+1)); return true; } } // 上一頁 function previousPage(){ if(currentPage == 1){ alert("已是第一頁數據"); return false; }else{ submitForm("<%=context%>/sublist/SublistServlet?pageNum=" + (currentPage-1)); return true; } } // 尾頁 function lastPage(){ if(currentPage == totalPage){ alert("已是最後一頁數據"); return false; }else{ submitForm("<%=context%>/sublist/SublistServlet?pageNum=${result.totalPage}"); return true; } } function initPage() { //這裏加不加引號都是一致的。 var genderRequest = ${gender}; var genderVal = 0; var genderElement = document.getElementById("gender"); if (genderRequest != "") { genderVal = parseInt(genderRequest); } var options = genderElement.options; var i = 0; for (i = 0; i < options.length; i++) { if (options[i].value == genderVal) { options[i].selected = true; break; } } } </script> <body onload="initPage();"> <div style="margin-left: 100px; margin-top: 100px;"> <div> <font color="red">${errorMsg }</font> </div> <div> <form action="<%=context%>/sublist/SublistServlet" id="stuForm" method="post"> 姓名 <input type="text" name="stuName" id="stu_name" style="width: 120px" value="${stuName }"> &nbsp; 性別 <select name="gender" id="gender" style="width: 80px"> <option value="0">所有</option> <option value="1">男</option> <option value="2">女</option> </select> &nbsp;&nbsp; <input type="submit" value="查詢"> </form> </div> <br> 學生信息列表:<br> <br> <!-- 後臺返回結果爲空 --> <c:if test="${fn:length(result.dataList) eq 0 }"> <span>查詢的結果不存在</span> </c:if> <!-- 後臺返回結果不爲空 --> <c:if test="${fn:length(result.dataList) gt 0 }"> <table border="1px" cellspacing="0px" style="border-collapse: collapse"> <thead> <tr height="30"> <th width="130">姓名</th> <th width="130">性別</th> <th width="130">年齡</th> <th width="190">家庭地址</th> </tr> </thead> <c:forEach items="${result.dataList }" var="student"> <tr> <td><c:out value="${student.stuName }"></c:out></td> <td><c:if test="${ student.gender eq 1}">男</c:if> <c:if test="${ student.gender eq 2}">女</c:if></td> <td><c:out value="${student.age }"></c:out></td> <td><c:out value="${student.address }"></c:out></td> </tr> </c:forEach> </table> <br> 共${result.totalRecord }條記錄共${result.totalPage }頁&nbsp;&nbsp;當前第${result.currentPage }頁&nbsp;&nbsp; <a href="#" onclick="firstPage();">首頁</a>&nbsp;&nbsp; <a href="#" onclick="nextPage();">下一頁</a>&nbsp;&nbsp; <a href="#" onclick="previousPage();">上一頁</a>&nbsp;&nbsp; <a href="#" onblur="lastPage();">尾頁</a> </c:if> </div> </body> </html>

在這個jsp中,我所看重的最重要的一點是點擊後程序直接使用js來進行分頁使用。

----------------------------------------------------接口:StudentService--------------------------------------------------
package
com.imooc.page.service; import com.imooc.page.model.Pager; import com.imooc.page.model.Student; public interface StudentService { /** * 根據查詢條件,查詢學生分頁信息 * * @param searchModel * 封裝查詢條件 * @param pageNum * 查詢第幾頁數據 * @param pageSize * 每頁顯示多少條記錄 * @return 查詢結果 */ public Pager<Student> findStudent(Student searchModel, int pageNum, int pageSize); }

 

 

------------------------------------------------------------SublistStudentServiceImpl.java-----------------------------------------
package
com.imooc.page.service; import com.imooc.page.dao.StudentDao; import com.imooc.page.dao.SublistStudentDaoImpl; import com.imooc.page.model.Pager; import com.imooc.page.model.Student; public class SublistStudentServiceImpl implements StudentService { private StudentDao studentDao; public SublistStudentServiceImpl() { // 建立servivce實現類時,初始化dao對象。 studentDao = new SublistStudentDaoImpl(); } @Override public Pager<Student> findStudent(Student searchModel, int pageNum, int pageSize) { Pager<Student> result = studentDao.findStudent(searchModel, pageNum, pageSize); return result; } public StudentDao getStudentDao() { return studentDao; } public void setStudentDao(StudentDao studentDao) { this.studentDao = studentDao; } }

這個方法中,能夠看到在實例化Dao層接口的時候,使用了構造方法進行實例,這樣能夠保證只有在使用這個類的時候咱們纔去進行實例化。

-----------------------------------------------------------StudentDao.java---------------------------------------------
package
com.imooc.page.dao; import com.imooc.page.model.Pager; import com.imooc.page.model.Student; public interface StudentDao { /** * 根據查詢條件,查詢學生分頁信息 * * @param searchModel * 封裝查詢條件 * @param pageNum * 查詢第幾頁數據 * @param pageSize * 每頁顯示多少條記錄 * @return 查詢結果 */ public Pager<Student> findStudent(Student searchModel, int pageNum, int pageSize); }
---------------------------------------------------------SublistStudentDaoImpl.java------------------------------------------------
package com.imooc.page.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.imooc.page.Constant;
import com.imooc.page.model.Pager;
import com.imooc.page.model.Student;
import com.imooc.page.util.JdbcUtil;

public class SublistStudentDaoImpl implements StudentDao {

    @Override
    public Pager<Student> findStudent(Student searchModel, int pageNum,
            int pageSize) {
        List<Student> allStudenList = getAllStudent(searchModel);

        Pager<Student> pager = new Pager<Student>(pageNum, pageSize,
                allStudenList);
        
        return pager;
    }

    /**
     * 模仿獲取全部數據
     *
     * @param searchModel
     *            查詢參數
     * @return 查詢結果
     */
    private static List<Student> getAllStudent(Student searchModel) {
        List<Student> result = new ArrayList<Student>();
        List<Object> paramList = new ArrayList<Object>();

        String stuName = searchModel.getStuName();
        int gender = searchModel.getGender();

        StringBuilder sql = new StringBuilder(
                "select * from t_student where 1=1");

        if (stuName != null && !stuName.equals("")) {
            sql.append(" and stu_name like ?");
            paramList.add("%" + stuName + "%");
        }

        if (gender == Constant.GENDER_FEMALE || gender == Constant.GENDER_MALE) {
            sql.append(" and gender = ?");
            paramList.add(gender);
        }

        JdbcUtil jdbcUtil = null;
        try {
            jdbcUtil = new JdbcUtil();
            jdbcUtil.getConnection(); // 獲取數據庫連接
            List<Map<String, Object>> mapList = jdbcUtil.findResult(
                    sql.toString(), paramList);
            if (mapList != null) {
                for (Map<String, Object> map : mapList) {
                    Student s = new Student(map);
                    result.add(s);
                }
            }
        } catch (SQLException e) {
            throw new RuntimeException("查詢全部數據異常!", e);
        } finally {
            if (jdbcUtil != null) {
                jdbcUtil.releaseConn(); // 必定要釋放資源
            }
        }

        return result;
    }

    public static void main(String[] args) {
        List<Student> lst = getAllStudent(new Student());
        for (Student s : lst) {
            System.out.println(s);
        }
    }
}

String、StringBuffer、StringBuilder 的區別以及使用

  

這是比較基礎的list.sublist的用法,下一次咱們將介紹sql以及hibernate中的用法

相關文章
相關標籤/搜索