CRUD

1 删除学生的JSP实现:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>学生列表</title>
<script type="text/javascript">
   function doDelete(sid){
//        如果这里弹出的对话框,用户点击的是确定,就删除
//   如何知道确定,如何调用Servlet
     var flag = confirm("是否确定删除?");
     if(flag){
         //表明确定,访问Servlet,
         window.location.href="DeleteServlet?sid="+sid;
     }
   }
</script>

</head>
<body>
    <table border="1px">
    <tr >
       <td colspan="8">
             <a href="add.jsp">添加</a>
       </td>
    </tr>
    <tr align="center">
        <td>编号</td>
        <td>姓名</td>
        <td>性别</td>
        <td>电话</td>
        <td>生日</td>
        <td>爱好</td>
        <td>简介</td>
        <td>操作</td>
    </tr>
  <c:forEach var="stu" items="${list }" >
    <tr align="center">
        <td>${stu.sid }</td>
        <td>${stu.sname }</td>
        <td>${stu.gender }</td>
        <td>${stu.phone }</td>
        <td>${stu.birthday }</td>
        <td>${stu.hobby }</td>
        <td>${stu.info }</td>
        <td><a href="#">更新</a> <a href="#" onclick="doDelete(${stu.sid})">删除</a></td>
    </tr>
  </c:forEach>
    </table>
</body>
</html>

2 更新学生保留单选框复选框的JSP实现:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>  
<%@taglib uri="http://java.sun.com/jsp/jstl/functions"  prefix="fn"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>更新</title>
</head>
<body>
<h3>更新学生</h3>
  <form action="UpdateServlet" method="post" >
    <table border="1px" width="600px">
        <tr >
            <td>姓名</td>
            <td><input type="text" name="sname"  value="${stu.sname }"></td>
        </tr>
        <tr>
            <td>性别</td>
<!--             如果是男的,就在男的input里面加上checked,否则在女的里面加上checked -->
            <td>
        <input type="radio" name="gender" value="男" <c:if test="${stu.gender == '男' }">checked</c:if>>男
        <input type="radio" name="gender" value="女" <c:if test="${stu.gender == '女' }">checked</c:if>>女
            </td> 

        </tr>
        <tr>
            <td>电话</td>
            <td><input type="text" name="phone" value="${stu.phone }"></td>
        </tr>
        <tr>
            <td>生日</td>
            <td><input type="text" name="birthday" value="${stu.birthday }"></td>
        </tr>
        <tr>
            <td>爱好</td>
            <td>
<!--             判断是否包含 -->
            <input type="checkbox" name="hobby" value="游泳"  <c:if test="${fn:contains(stu.hobby,'游泳') }">checked</c:if>>游泳
            <input type="checkbox" name="hobby" value="篮球" <c:if test="${fn:contains(stu.hobby,'篮球') }">checked</c:if>>篮球
            <input type="checkbox" name="hobby" value="足球" <c:if test="${fn:contains(stu.hobby,'足球') }">checked</c:if>>足球
            <input type="checkbox" name="hobby" value="看书" <c:if test="${fn:contains(stu.hobby,'看书') }">checked</c:if>>看书
            <input type="checkbox" name="hobby" value="写字" <c:if test="${fn:contains(stu.hobby,'写字') }">checked</c:if>>写字    
            </td>
        </tr>
        <tr>
            <td>简介</td>
            <td>
            <textarea name="info" rows="7" cols="40">
            ${ stu.info}
            </textarea>
            </td>
        </tr>
        <tr>
            <td colspan="2">
            <input type="submit" value="更新">
            </td>
        </tr>
    </table>
 </form>
</body>
</html>

 

3 模糊查询的DAO层实现

   /**
     * 模糊查询的DAO层实现
     */
    @Override
    public List<Student> SearchStident(String sname, String sgender) throws SQLException {
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
        /*
         * select * from stu where sname like ? and gender = ?
         * 
         * 如果两个都没有就查询所有
         */
        List<String> l = new ArrayList<String>();
        String sql = "select * from students where 1 = 1";
        if(!TextUtils.isEmpty(sname)){
            sql = sql + "and sname like ?";
            l.add("%"+sname+"%");
        }
        if(!TextUtils.isEmpty(sgender)){
            sql = sql + "and gender = ?";
            l.add(sgender);
        }
         return runner.query(sql, new BeanListHandler<Student>(Student.class),l.toArray());        
    }

 

4 分页查询

物理分页:来数据库查询的时候,只查一页的数据就返回了

好处:内存中的数据量不会太大(域内存)

缺点:对数据库的访问比较频繁

 

 逻辑分页:

一口气把所有的数据全部查询出来,然后放在内存中

优点:访问速度快

缺点:数据量大,内存可能溢出

 

步骤:

1. index.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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>

<h3><a href="StuListServlet">显示所有学生列表</a></h3>

<h3><a href="StuListPageServlet?currentPage=1">分页显示所有学生</a></h3>


</body>
</html>

 

2   PageBean实体类封装分页需要的对象

/*
 * 这是一个用于封装分页的数据
 * 里面包含:
 *    该页的学生集合数据
 *    总的记录数
 *    总的页数
 *    当前页
 *    每页显示的记录数
 */
public class PageBean<T> {
    
   private int currentPage;//当前页
   private int pageSize;//每页显示的记录数
   private int totalPage;//总的页数
   private int totalSize;//总的记录数
   private List<T> list; //该页的学生集合数据

  //此处省略getset方法以及构造

3 DaoImpl交互数据库,通过limit和offset偏移量实现查询当前页的学生数据功能,拿到当前页的学生List集合; 通过查询数据库获得总记录数count

    @Override
    /**
     * 分页查询,查询当前页的学生数据并封装成集合
     */
    public List<Student> findStudentByPage(int currentPage) throws SQLException {
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
        //第一个?返回记录数量,第二个?偏移量
        //第n页 :  5,5*n-1
        return runner.query("select * from students limit ? offset ?",new BeanListHandler<Student>(Student.class),PAGE_SIZE,PAGE_SIZE*(currentPage-1));    
    }

    @Override
    /**
     * 查询学生记录数
     */
    public int findCount() throws SQLException {
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
        //用于处理平均值,总个数
        Long result = (Long)runner.query("select count(*) from students", new ScalarHandler());    
        return result.intValue();
    }

 

4 ServiceImpl业务层处理分页业务,拿到所有的分页业务对象,封装到PageBean,交给Servlet

@Override
    public PageBean findStudentByPage(int currentPage) throws SQLException {
        int pageSize = StudentDao.PAGE_SIZE;
        //封装分页的该页数据
        PageBean<Student> pageBean = new PageBean<>();
        pageBean.setCurrentPage(currentPage);//当前页数
        pageBean.setPageSize(pageSize);//每页记录数
        pageBean.setList(new StudentDaoImpl().findStudentByPage(currentPage));//学生集合
        //总记录数
        int count = new StudentDaoImpl().findCount();
        pageBean.setTotalSize(count);
        //总页数,不能整除则页数+1
        pageBean.setTotalPage(count % pageSize == 0 ? count/pageSize : count/pageSize + 1 );
        return pageBean;
    }

5 Servlet将PageBean里面的交互给页面;获取页面的分页数据

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        try {
            request.setCharacterEncoding("utf-8");
            //1 获取需要显示的页面数
            int currentPage = Integer.parseInt(request.getParameter("currentPage"));
            //2 根据指定的页数获取该页的数据
            StudentService service = new StudentServiceImpl();
            PageBean pageBean = service.findStudentByPage(currentPage);
            request.setAttribute("pageBean", pageBean);
            //3 跳转页面
            request.getRequestDispatcher("list_page.jsp").forward(request, response);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 

6 前端JSP实现分页功能,通过currentPage的更换达到动态分页效果:

<tr>
   <td colspan="8">
       第${pageBean.currentPage }/${pageBean.totalPage }
       每页显示${pageBean.pageSize }条 &nbsp;&nbsp;&nbsp;
       总记录数${pageBean.totalSize }&nbsp;&nbsp;&nbsp;
   <c:if test="${pageBean.currentPage !=1 }">
        <a href="StuListPageServlet?currentPage=1">首页</a>|<a href="StuListPageServlet?currentPage=${pageBean.currentPage-1}">上一页</a>
   </c:if>  
   
   <c:if test="${pageBean.currentPage != pageBean.totalPage }">
   <a href="StuListPageServlet?currentPage=${pageBean.currentPage+1 }">下一页</a>|<a href="StuListPageServlet?currentPage=${pageBean.totalPage}">尾页</a>
   </c:if>  
   </td>
  </tr>

 

posted @ 2019-01-09 20:26  IslandZzzz  阅读(245)  评论(0编辑  收藏  举报