单态模式实现分页
步骤如下
首先,创建一个web项目 例如:2011firstweb
其次,创建包命
创建所需包命 如:
1.cn.csdn.domain(主要封装bean)
2.cn.csdn.util(工具类)
3,cn.csdn.web.dao(主要写dao方法)
4,cn.csdn.web.serivice(主要连接服务)
5.cn.csdn.web.servlet(主要封装请求)
三 ,进入编程阶段
1,创建一个连接数据库类 如:DBConn
package cn.csdn.util;
import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;
import com.mysql.jdbc.Connection;
public class DBConn { private static Connection conn; private DBConn(){} public static Connection getConn(){ if(conn==null){ try { Class.forName("com.mysql.jdbc.Driver"); try { conn=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/db?user=root&password=123&useUnicode=true&characterEncoding=utf8"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return conn; } //关闭 public static void coles(ResultSet rs,PreparedStatement pstmt){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(pstmt!=null){ try { pstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { DBConn.getConn(); }
} 2.封装数据
package cn.csdn.domain;
public class Student { public Student() { }
public Student(String name, int age, String email) { this.name=name; this.age=age; this.email=email; }
private int id; private String name; private String email; private int age; public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
3.写DAO方法
接口类
package cn.csdn.web.dao;
import java.util.List;
import cn.csdn.domain.Student;
public interface StudentDao { int getCountRecord(); int getCountPage(); List<Student> getNowPageInfo(int nowpage);
} 方法
package cn.csdn.web.dao;
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;
import cn.csdn.domain.Student;import cn.csdn.util.DBConn;
public class StudentDaoImpl implements StudentDao { private Connection conn; private PreparedStatement pstmt; private ResultSet rs; private static final int PAGESIZE = 5;
// 获取总页数 public int getCountPage() {
return getCountRecord() % PAGESIZE == 0 ? getCountRecord() / PAGESIZE : getCountRecord() / PAGESIZE + 1; }
// 获取总信息 public int getCountRecord() { // 定义返回变量 int countrecord = 0; // 创建数据库连接 conn = DBConn.getConn(); // String sql = "select count(*) from student"; try { pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); if (rs.next()) { countrecord = rs.getInt(1);
} } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally {
DBConn.coles(rs, pstmt); }
return countrecord; }
public List<Student> getNowPageInfo(int nowpage) { List<Student> allentities = new ArrayList<Student>(); conn = DBConn.getConn(); String sql = "select id,name,age,email from student limit ?,?"; try { pstmt = conn.prepareStatement(sql); int index = 1; pstmt.setInt(index++, (nowpage-1)*PAGESIZE); pstmt.setInt(index++, PAGESIZE); rs = pstmt.executeQuery(); while (rs.next()) { Student entity = new Student(); entity.setId(rs.getInt("id")); entity.setAge(rs.getInt("age")); entity.setName(rs.getString("name")); entity.setEmail(rs.getString("email")); allentities.add(entity);
} } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DBConn.coles(rs, pstmt); } return allentities; } public static void main(String[] args) { StudentDaoImpl sdi = new StudentDaoImpl(); /* int countecord=sdi.getCountRecord(); System.out.println(countecord); System.out.println(sdi.getCountPage());*/ List<Student> allentities=sdi.getNowPageInfo(2); for(Student entity:allentities){ System.out.println(entity.getAge()); } }} 4,连接服务
服务接口
package cn.csdn.web.service;
import java.util.List;
import cn.csdn.domain.Student;
public interface StudentService { int getCountRecord(); //获取总页数 int getCountPage(); //获取当前页的信息 List<Student> getNowPageInfo(int nowpage);} 方法
package cn.csdn.web.service;
import java.util.List;
import cn.csdn.domain.Student;import cn.csdn.web.dao.StudentDaoImpl;
public class StudentServiceImpl implements StudentService { private StudentDaoImpl sdi = new StudentDaoImpl();
public int getCountPage() { // TODO Auto-generated method stub System.out.println("-----"); return sdi.getCountPage(); }
public int getCountRecord() { // TODO Auto-generated method stub return sdi.getCountRecord(); }
public List<Student> getNowPageInfo(int nowpage) { // TODO Auto-generated method stub return sdi.getNowPageInfo(nowpage); }
public static void main(String[] args) { StudentServiceImpl ass=new StudentServiceImpl(); ass.getCountPage(); }}5,封装请求
package cn.csdn.web.servlet;
import java.io.IOException;import java.util.List;
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
import cn.csdn.domain.Student;import cn.csdn.web.service.StudentServiceImpl;
public class ListStudentsServlet extends HttpServlet {
/** * */ private static final long serialVersionUID = 4438133059395214446L;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1、设置编码 req.setCharacterEncoding("UTF-8"); //2、获取当前页 //定义当前页的变量 int nowpage =1; String npage = req.getParameter("nowpage"); if(npage!=null){ nowpage = Integer.parseInt(npage); } //3、创业业务操作的实现类的对象 StudentServiceImpl ssi = new StudentServiceImpl(); int lastpage = ssi.getCountPage(); List<Student> allentities = ssi.getNowPageInfo(nowpage); //存入当前页 最后一页 当前页的记录信息 req.setAttribute("nowpage", nowpage); req.setAttribute("lastpage", lastpage); req.setAttribute("allentities", allentities); req.getRequestDispatcher("fend.jsp").forward(req, resp); }
}
6,创建JSP/HTML
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h1><a href="listStudents.do">查询所有学生信息</a></h1> </body></html>
跳转页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'sc.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> -->
</head> <body> <div align="center"> <h1>显示所有的学员信息</h1> <table border="1px" cellpadding="0" cellspacing="0"> <caption>学员信息</caption> <tr> <th>全选</th> <th>序列</th> <th>姓名</th> <th>年龄</th> <th>邮箱</th> <th>操作</th> </tr> <c:forEach items="${allentities}" var="entity"> <tr> <td><input type="checkbox" name="chk"/></td> <td>${entity.id}</td> <td>${entity.name}</td> <td>${entity.age}</td> <td>${entity.email}</td> <td>编辑|删除</td> </tr> </c:forEach> </table> <div> <span><a href="./listStudents.do?nowpage=1">首页</a></span> <span><a href="./listStudents.do?nowpage=${nowpage-1}">上一页</a></span> <span><a href="./listStudents.do?nowpage=${nowpage+1}">下一页</a></span> <span><a href="./listStudents.do?nowpage=${lastpage}">最后一页</a></span> </div> </div> </body></html>
创建数据库
/*Column Information For - db.student*/---------------------------------------
Field Type Collation Null Key Default Extra Privileges Comment------ ----------- --------------- ------ ------ ------- -------------- ------------------------------- -------id int(11) (NULL) NO PRI (NULL) auto_increment select,insert,update,references name varchar(40) utf8_general_ci YES (NULL) select,insert,update,references age int(11) (NULL) YES (NULL) select,insert,update,references email varchar(50) utf8_general_ci YES (NULL) select,insert,update,references
/*Index Information For - db.student*/--------------------------------------
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment------- ---------- -------- ------------ ----------- --------- ----------- -------- ------ ------ ---------- -------student 0 PRIMARY 1 id A 19 (NULL) (NULL) BTREE
/*DDL Information For - db.student*/------------------------------------
Table Create Table ------- -----------------------------------------student CREATE TABLE `student` ( `id` int(11) NOT NULL auto_increment, `name` varchar(40) default NULL, `age` int(11) default NULL, `email` varchar(50) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
7,发布启动服务
QQ: