综合练习之用户信息

综合练习

总体分析:

1. 简单功能

1. 列表查询

列表查询,无非是,把查询到的数据全部给显现出来,通过对数据库里面的信息的拉取,以及传值到前端,然后最后在页面显示出来

重点就是$符的使用,如何进行传值,还有访问路径的问题,都是需要注意的方面。

2. 登录

登录功能呢,则是对输入数据的校验,判断是否存在问题,最重要的一点则是验证码方面
下面附上登录界面图:
在这里插入图片描述
对于这三个信息的校验呢,我是先考虑的去校验验证码的正确性,验证码通过,再对输入的用户名和密码进行判断,这样感觉逻辑上简便一点。
其中还加入了Filter进行限制,不论要进行什么操作,都必须先登录,这里我们就不放代码了。

3. 添加

添加用户信息,则是往数据库新建一条数据,这里我们放上逻辑图
在这里插入图片描述
增加用户信息,相对于比较简单,我们就不放代码了,大家可以自行尝试。

4. 删除

在这里插入图片描述
从上面的逻辑图来看,我们在后台只需要拿到一个名为ID的字段,即可对其信息进行操作,对于删除功能的编写,也不做过多的介绍,我们把重点放在复杂功能里面的选中删除。

5. 修改

在这里插入图片描述
从上面的逻辑图可以看到,存在一个隐藏域ID, 后台则是通过拿到的隐藏域里面的ID,去实现用户信息的修改,该字段一般被加上了hidden修饰。

该功能的后台代码也比较简单,所以就不作过多的解释,但是 上面所说的重点就是 隐藏域真的很重要很重要,必须加以记忆。

2. 复杂功能

1. 分页查询

  • 好处:
    1. 减轻服务器内存的开销
    2. 提升用户体验
    其逻辑图如下:
    在这里插入图片描述

分页查询,是一个重点,首先你得创建一个实体类PageBean,最重要的是里面的变量,如下:
private int totalCount; //总记录数
private int totalPage; //总页码
private List list; //每页
private int currentPage; //当前页码
private int rows; //每页记录数据
然后用Generate生成 set get方法。

前端代码里面最重要的一部分就是:

 <div>
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <c:if test="${pb.currentPage==1}">
                    <li class="disabled">

                </c:if>
                <c:if test="${pb.currentPage!=1}">
                    <li>
                </c:if>
                    <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage-1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>


                <c:forEach begin="1" end="${pb.totalPage}" var="i">
                    <c:if test="${pb.currentPage==i}">
                        <li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a></li>
                    </c:if>
                    <c:if test="${pb.currentPage!=i}">
                        <li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a></li>
                    </c:if>
                </c:forEach>


                    <c:if test="${pb.currentPage==pb.totalPage}">
                    <li class="disabled">
                        </c:if>
                        <c:if test="${pb.currentPage!=pb.totalPage}">
                    <li>
                        </c:if>

                    <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage==pb.totalPage ? pb.totalPage : pb.currentPage+1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}" aria-label="Next">
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
                <span style="font-size: 25px;margin: 5px">
                    共${pb.totalCount}条记录,共${pb.totalPage}页
                </span>

            </ul>
        </nav>
    </div>

UserServiceImpl代码 :

@Override
    public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> condition) {
        int currentPage=Integer.parseInt(_currentPage);
        int rows=Integer.parseInt(_rows);
        if (currentPage<=0){
            currentPage=1;
        }


        //1.创建一个空的PageBean对象
        PageBean<User> pb=new PageBean<User>();

        //2.设置参数
        pb.setCurrentPage(currentPage);
        pb.setRows(rows);

        //3.调用dao查询总记录数
        int totalCount=dao.findTotalCount(condition);
        pb.setTotalCount(totalCount);

        //4.调用dao查询list集合
        // 计算开始的记录索引
        int start =(currentPage-1)*rows;
        List<User> list=dao.findByPage(start,rows,condition);
        pb.setList(list);

        //5.计算总页码
        int totalPage=(totalCount % rows ==0) ? totalCount/rows: (totalCount/rows)+1;

        pb.setTotalPage(totalPage);
        return pb;
    }

FindUserByPageServlet:

request.setCharacterEncoding("utf-8");
        //1.获取参数

        String currentPage=request.getParameter("currentPage");//当前页码
        String rows=request.getParameter("rows");//每页显示条数

        if (currentPage==null || "".equals(currentPage)){
            currentPage="1";
        }
        if (rows==null || "".equals(rows)){
            rows="5";
        }
        //获取条件查询参数
        Map<String,String[]> condition=request.getParameterMap();

        //调用service查询
        UserService service=new UserServiceImpl();
        PageBean<User> pb=service.findUserByPage(currentPage,rows,condition);

        //System.out.println(pb);
        //3.将PageBean存入request
        request.setAttribute("pb",pb);
        //将查询条件存入request域中
        request.setAttribute("condition",condition);
        //转发到list.jsp
        request.getRequestDispatcher("/list.jsp").forward(request,response);

里面的内容就不作过多的描述
实现分页查询,其实换标不换本,只要你掌握了一个分页,就把他当做一个基础一个模板,放到以后的应用中,直接拿来用就可以了。

3. 复杂条件查询

这个就更是重点了,有一个点是最重要的,去拼接sql语句
UserDaoImpl

成功的将我们输入的内容给拼接上了,这里面的一个重点就是:
最初我们需要初始化一个查询语句,然后在对其进行后续的拼接,拼接的关键点则是
在这里插入图片描述
该空格的地方就得空格,以及该加%的地方必须加上,不然则会出现sql语句的错误。
sql=sb.toString();
return template.queryForObject(sql, Integer.class,params.toArray());

最后就是上面这串代码,因为我们需要的是拼接后的sql语句,所以最好是重新给sql赋值一下,因为我就犯了这个错误,该写sb.toString()的地方我写成了sql,导致我的模糊查询一直失败,最初以为是拼接的问题,实际上则是我写错了sql哈哈。

在这里插入图片描述
感谢大佬们的观看,谢谢,我会在今后的学习里面越发努力地,冲冲冲!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值