JAVA WEB从入门到精通 day20 分页技术&小项目:客户管理系统

分页

什么是分页?

我们用网站查询信息时,经常会看到

    第N页/总M页  首页 1 2 3 4 5 6 7 8 9 尾页 下一页 

分页就是将数据分页数来显示

这里写图片描述

为什么要分页?

1.我们查询数据时如果数据量太多,一次全部传输,会影响性能和效率。 

2.用户在一页上看到成千上万行数据也会影响用户体验,所以我们一次只查询一页的数据。

进行分页所需要的数据

-当前页码:我们点击页码,数据库就要查询当前页码对应的数据。 

-总页数:可以通过全部数据的总数除以每页显示的数据数来得到。

-当前页的数据:当前页的数据。 

-全部数据数:数据库里总共有多少数据 

-每页显示的数据(自己规定):一页显示的数据数

分页Bean的设计

这些分页数据总要在各层之间来回的传递  

例如 : 
需要从jsp页面将当前点击的页码传递 
servlet需要向service层传递页码和我们规定的每页显示的数据数 
service层要调用dao层完成对数据的操作。 

所以我们把这些分页数据封装到一个javabean中,以方便传递,它就叫分页Bean,例如:PageBean 
分页Bean 

public class PageBean<T> {
    private int currentPage;    // 当前的页码
    private int totalData;      //全部数据的总数量
    private int pageData;       //每页显示的数据数
    private List<T> beanList;   //当前页的数据
    private String url;         //用来存放查询的条件 
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public int getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public int getTotalPages() {            //获取总页数
        int totalpages=totalData/pageData; //总页数可以通过数据数除以每页的数据数得到
        return totalData%pageData==0?totalpages:totalpages+1;
    }
    public void setTotalData(int totalData){
        this.totalData=totalData;
    }
    public int getTotalData() {
        return totalData;
    }

    public int getPageData() {
        return pageData;
    }
    public void setPageData(int pageData) {
        this.pageData = pageData;
    }
    public List<T> getBeanList() {
        return beanList;
    }
    public void setBeanList(List<T> beanList) {
        this.beanList = beanList;
    }

}

各层的分工

jsp页面:显示分页的链接,传递当前的页码  例如:第N页/总M页  首页 1 2 3 4 5 6 7 8 9 尾页 下一页

servlet层:获取当前页码,指定每页显示的数据数,传递给service层,得到pageBean对象,把pageBean对象保存到request域,转发给页面

service层:获取当前页码和每页显示的数据数,调用DAO层方法   

DAO层:获取当前页码和每页数据数,查询数据库得到全部数据数和当前页面要显示的数据,封装到pageBean中,返回pageBean对象。 

解决jsp页面中页码列表的显示

页码列表 :1 2 3 4 5 6 7 8 9 10

    -首先我们定为每页最多显示十个页码。
    -当前页码在页码列表的位置。 

        其实定下来页码列表需要开始位置begin和结束位置end。
        例如:1 2 3 4 5 6 7 8 9 10
            我们参照百度发现,我们点击1到6时,页码列表不变。
            当我们点击7时,begin=7-5,end=7+4
            页码列表:2 3 4 5 6 7 8 9 10 11

            当我们点击8时,begin=8-5,end=8+4
            页码列表:3 4 5 6 7 8 9 10 11 12     


通过我们的测试得到开始位置和结束位置的计算方法 

    -如果总页数<=10,那么begin=1,end=总页数
    -大于10时,begin=当前页数-5,end=当前页数+4
    -当点击的当前页数<5时,因为begin=当前页数-5,会出错,所以begin<1时,让begin=1
    -当当前页数>总页数时会出错,因为end=当前页数+5,所以end>总页数时,就让end=总页数 

    然后我们循环遍历begin到end,就可以得出页码列表。 

解决超链接保存参数问题

当使用多条件查询后,我们第一次查出来的是正确结果,然后当我们点击第2 页时,这个第2页超链接没有条件了,所以会丢失条件,所以我们需要在页面上的所有链接都要保留条件! 

我们要把条件以一个字符串的形式保存到PageBean的url中!这个任务交给Servlet!

好了,分页中所有该了解的问题都已经解决,我们现在来做一个练习项目

客户管理系统

功能需求

   添加客户
   查看所有客户
   编辑客户
   删除客户
   多条件组合查询 

第一步,先创建客户数据表

CREATE TABLE customer(
    cid     CHAR(32) PRIMARY KEY,             //id
    cname       VARCHAR(40) NOT NULL,         //名字
    gender      VARCHAR(6) NOT NULL,          //性别
    birthday    DATE,                         //生日
    cellphone   VARCHAR(15) NOT NULL,         //电话 
    email       VARCHAR(40),                  //email邮箱
    description VARCHAR(500)                  //描述
);

第二步:创建项目,导入jar包

    需要导入数据库驱动,c3p0连接池,dbutils等jar包  

第三步:创建包

    我们使用MVC模式进行编写,所以我们需要分为三层。
       domain:Customer :JavaBean,用来将客户数据封装成一个对象
       dao:CustomerDao :dao层,对数据的操作
       service:CustomerService:service层,业务逻辑的操作
       servlet:CustomerServlet:web层

第四步:编写jsp页面

       top.jsp:
        包含
        一个标题
        链接1:添加客户,请求add.jsp;
        链接2:查看客户,请求list.jsp;
        链接3:高级搜索,请求query.jsp;
       add.jsp:一个添加客户的表单;
       list.jsp:一个<table>用来显示所有客户;
       query.jsp:一个高级搜索的表单;
       edit.jsp:一个修改客户的表单;
       msg.jsp:用来显示信息(添加客户成功) 

top.jsp


一个标题
三个链接:添加用户,查询客户,高级搜索 

  <body style="text-align: center;">
    <h1>客户关系管理系统</h1>
    <a href="<c:url value='/add.jsp'/>">添加客户</a>  | 
    <a href="<c:url value='/CustomerServlet?m=findAll'/>">查询客户</a> | 
    <a href="<c:url value='/query.jsp'/>">高级搜索</a>  
  </body> 

这里写图片描述

add.jsp

包含一个添加用户的表单

<h3 align="center">添加客户</h3>
<form action="<c:url value='/CustomerServlet'/>" method="post">
    <input type="hidden" name="m" value="add" />
<table border="0" align="center" width="40%" style="margin-left: 100px;">
    <tr>
        <td width="100px">客户名称</td>
        <td width="40%">
            <input type="text" name="cname"/>
        </td>
        <td align="left">
            <label id="cnameError" class="error">&nbsp;</label>
        </td>
    </tr>
    <tr>
        <td>客户性别</td>
        <td>
            <input type="radio" name="gender" value="男" id="male"/>
            <label for="male"></label>
            <input type="radio" name="gender" value="女" id="female"/>
            <label for="female"></label>
        </td>
        <td>
            <label id="genderError" class="error">&nbsp;</label>
        </td>
    </tr>
    <tr>
        <td>客户生日</td>
        <td>
            <input type="text" name="birthday" id="birthday" readonly="readonly"/>
        </td>
        <td>
            <label id="birthdayError" class="error">&nbsp;</label>
        </td>
    </tr>
    <tr>
        <td>手机</td>
        <td>
            <input type="text" name="cellphone"/>
        </td>
        <td>
            <label id="cellphoneError" class="error">&nbsp;</label>
        </td>       
    </tr>
    <tr>
        <td>邮箱</td>
        <td>
            <input type="text" name="email"/>
        </td>
        <td>
            <label id="emailError" class="error">&nbsp;</label>
        </td>   
    </tr>
    <tr>
        <td>描述</td>
        <td>
            <textarea rows="5" cols="30" name="description"></textarea>
        </td>
        <td>
            <label id="descriptionError" class="error">&nbsp;</label>
        </td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td>
            <input type="button" value="添加客户" onclick="add()"/>
            <input type="reset" value="重置"/>
        </td>
        <td>&nbsp;</td>
    </tr>
</table>
</form>
</body>

这里写图片描述

list.jsp

用来显示所有的客户。 

 <body>
<h3 align="center">客户列表</h3>
<table border="1" width="70%" align="center">
    <tr>
        <th>客户姓名</th>
        <th>性别</th>
        <th>生日</th>
        <th>手机</th>
        <th>邮箱</th>
        <th>描述</th>
        <th>操作</th>
    </tr>
    <c:forEach items="${pb.beanList}" var="cstm">           //获取servlet中保存的分页Bean中的当前页数据
    <tr>
        <td>${cstm.cname}</td>               //显示名字等信息
        <td>${cstm.gender}</td>
        <td>${cstm.birthday}</td>
        <td>${cstm.cellphone}</td>
        <td>${cstm.email}</td>
        <td>${cstm.description}</td>
        <td>
            <a href="<c:url value='/CustomerServlet?m=load&cid=${cstm.cid }'/>">编辑</a>
            <a href="<c:url value='/CustomerServlet?m=delete&cid=${cstm.cid }'/>">删除</a>
        </td>
    </tr>
    </c:forEach>

</table> 
<!--分页-->
<center>
    <!--显示当前第几页/共几页-->
    第${pb.currentPage }页/共${pb.totalPages }页

    <!--设置首页连接,获取PageBean中保存的url并传递页码为1-->
    <a href="${pb.url}&currentpage=1">首页</a>  

    <!--判断当前页是否是第一页,如果是第一页,就没有上一页的链接-->
    <c:if test="${pb.currentPage>1 }">
    <a href="${pb.url}&currentpage=${pb.currentPage-1 }">上一页</a>
    </c:if> 


    <c:choose>
        <!--判断总页数是否小于10,如果小于10,begin=1,end=总页数-->   
        <c:when test="${pb.totalPages<=10 }">
            <c:set var="begin" value="1"></c:set>
            <c:set var="end" value="${pb.totalPages }"></c:set>
        </c:when>

        <!--如果不小于10,则使用我们总结的分页计算公式来计算begin和end-->
        <c:otherwise>
            <c:set var="begin" value="${pb.currentPage-5}"></c:set>
            <c:set var="end"  value="${pb.currentPage+4 }"></c:set> 
            <!--如果begin(当前页数-5)<1,则将begin设置为1,end设置为10,要不然会出错-->
            <c:if test="${begin<1}">
                <c:set var="begin" value="1"></c:set>
                <c:set var="end" value="10"></c:set>
            </c:if>

            <!--如果end(当前页数+4)>总页数,则将end设置为总页数,begin设置为end-9-->
            <c:if test="${end>pb.totalPages}">
                <c:set var="end" value="${pb.totalPages }"></c:set>
                <c:set var="begin" value="${pb.totalPages-9 }"></c:set>
            </c:if>
        </c:otherwise>
    </c:choose>

    <!--从begin到end进行遍历即可显示页码列表-->
    <c:forEach var="v" begin="${begin }" end="${end }">
        <a href="${pb.url }&currentpage=${v }">${v}</a>
    </c:forEach>

    <c:if test="${pb.currentPage<pb.totalPages }">
    <a href="${pb.url }&currentpage=${pb.currentPage+1 }">下一页</a>
    </c:if>
    <a href="${pb.url }&currentpage=${pb.totalPages}">尾页</a>
</center>
</body>

这里写图片描述

query.jsp

用来进行条件搜索的表单。
 <body>
<h3 align="center">高级搜索</h3>
<form action="<c:url value='/CustomerServlet'/>" method="get">
    <input type="hidden" name="m" value="query">
<table border="0" align="center" width="40%" style="margin-left: 100px;">
    <tr>
        <td width="100px">客户名称</td>
        <td width="40%">
            <input type="text" name="cname"/>
        </td>
    </tr>
    <tr>
        <td>客户性别</td>
        <td>
            <select name="gender">
                <option value="">==请选择性别==</option>
                <option value="男"></option>
                <option value="女"></option>
            </select>
        </td>
    </tr>
    <tr>
        <td>手机</td>
        <td>
            <input type="text" name="cellphone"/>
        </td>
        <td>
            <label id="cellphoneError" class="error">&nbsp;</label>
        </td>       
    </tr>
    <tr>
        <td>邮箱</td>
        <td>
            <input type="text" name="email"/>
        </td>
        <td>
            <label id="emailError" class="error">&nbsp;</label>
        </td>   
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td>
            <input type="submit" value="搜索"/>
            <input type="reset" value="重置"/>
        </td>
        <td>&nbsp;</td>
    </tr>
</table>
</form>
</body>

这里写图片描述

edit.jsp

用来修改客户的表单。 
修改客户要先获取客户以前的值,然后再修改提交。

<body>
<h3 align="center">编辑客户</h3>
<form action="<c:url value='/CustomerServlet'/>" method="post">
    <input type="hidden" name="m" value="edit"> 
    <input type="hidden" name="cid" value="${cst.cid }">
<table border="0" align="center" width="40%" style="margin-left: 100px;">
    <tr>
        <td width="100px">客户名称</td>
        <td width="40%">
            <input type="text" name="cname" value="${cst.cname }"/>
        </td>
        <td align="left">
            <label id="cnameError" class="error">&nbsp;</label>
        </td>
    </tr>
    <tr>
        <td>客户性别</td>
        <td>
            <input type="radio" name="gender" value="男" id="male" <c:if test="${cst.gender eq '男' }">checked="checked"</c:if>   />
            <label for="male"></label>
            <input type="radio" name="gender" value="女" id="female" <c:if test="${cst.gender eq '女' }">checked="checked"</c:if> />
            <label for="female"></label>
        </td>
        <td>
            <label id="genderError" class="error">&nbsp;</label>
        </td>
    </tr>
    <tr>
        <td>客户生日</td>
        <td>
            <input type="text" name="birthday" id="birthday" readonly="readonly" value="${cst.birthday }"/>
        </td>
        <td>
            <label id="birthdayError" class="error">&nbsp;</label>
        </td>
    </tr>
    <tr>
        <td>手机</td>
        <td>
            <input type="text" name="cellphone" value="${cst.cellphone }"/>
        </td>
        <td>
            <label id="cellphoneError" class="error">&nbsp;</label>
        </td>       
    </tr>
    <tr>
        <td>邮箱</td>
        <td>
            <input type="text" name="email" value="${cst.email }"/>
        </td>
        <td>
            <label id="emailError" class="error">&nbsp;</label>
        </td>   
    </tr>
    <tr>
        <td>描述</td>
        <td>
            <textarea rows="5" cols="30" name="description">${cst.description }</textarea>
        </td>
        <td>
            <label id="descriptionError" class="error">&nbsp;</label>
        </td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td>
            <input type="button" value="编辑客户" onclick="add()"/>
            <input type="reset" value="重置"/>
        </td>
        <td>&nbsp;</td>
    </tr>
</table>
</form>
</body>

这里写图片描述

msg.jsp

用来显示成功信息的页面。
<body>
    <h1 style="color:green;" align="center">恭喜,${msg }</h1>
</body>

第五步:在domain层创建PageBean和 Customer两个javaBean,用来封装数据

Customer.java 封装用户数据 

public class Customer {
    private String cid;               //id
    private String cname;             //名字
    private String gender;            //性别
    private String birthday;          //生日
    private String cellphone;         //电话
    private String email;             //邮箱
    private String description;       //描述 
    public String getCellphone() {
        return cellphone;
    }
    public void setCellphone(String cellphone) {
        this.cellphone = cellphone;
    }
    public String getCid() {
        return cid;
    }
    public void setCid(String cid) {
        this.cid = cid;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getBirthday() {
        return birthday;
    }
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    @Override
    public String toString() {
        return "Customer [cid=" + cid + ", cname=" + cname + ", gender=" + gender + ", birthday=" + birthday
                + ", cellphone=" + cellphone + ", email=" + email + ", description=" + description + "]";
    }

}

第六步:编写Servlet

我们的Servlet继承我们曾经写过的工具类,可以通过传递的参数来调用不同的方法。 

public class CustomerServlet extends BaseServlet {
    private CustomerService cs=new CustomerService();  //创建service层对象

    //添加用户方法
    public String add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");  

        //先获取表单提交的数据并将其封装成Customer对象
        String name=request.getParameter("cname");
        String gender=request.getParameter("gender");
        String birthday=request.getParameter("birthday");
        String phone=request.getParameter("cellphone");
        String email=request.getParameter("email");
        String description=request.getParameter("description");
        Customer c=new Customer();
        c.setCid(UUID.randomUUID().toString().replaceAll("-", ""));
        c.setCname(name);
        c.setBirthday(birthday);
        c.setGender(gender);
        c.setEmail(email);
        c.setCellphone(phone);
        c.setDescription(description); 

        //调用service层处理添加功能的业务逻辑
        cs.add(c); 
        //如果添加成功,则将成功信息保存在request域,转发到显示信息的msg页面
        request.setAttribute("msg", "恭喜,添加成功");
        return "forward:/msg.jsp";
    } 



    //查询所有数据的方法
    public String findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        //先获取传递的当前页码,设置每页最多显示多少数据
        int currentpage=getCurrentpage(request);
        int pagedata=10;

        //调用service层的findAll方法,返回一个PageBean对象
        PageBean<Customer> pb=cs.findAll(currentpage,pagedata);
        //获取当前页面的URL,并设置,因为查询的条件我们要保存起来
        pb.setUrl(getUrl(request));  

        //将pagebean对象放入request域中,转发到list页面
        request.setAttribute("pb", pb);
        return "forward:/list.jsp";
    } 

    //获取页面url的方法
    public String getUrl(HttpServletRequest request)
    {
        String contextpath=request.getContextPath();//获取项目名
        String servletpath=request.getServletPath();//获取servlet路径
        String querystring=request.getQueryString();//获取参数  

        //我们决定当前页码的参数由我们自己设置,所以如果我们点击的链接发送了该参数,我们需要将其去掉
        if(querystring.contains("&currentpage="))
        {
            int index=querystring.indexOf("&currentpage=");
            querystring=querystring.substring(0, index);
        }

        return contextpath+servletpath+"?"+querystring;
    } 

    //获取提交的当前的页码,如果当前页码为null,则默认为第一页
    public int getCurrentpage(HttpServletRequest request)
    {
        String currentpage=request.getParameter("currentpage");
        if(currentpage==null) return 1;
        return Integer.parseInt(currentpage);

    } 

    //通过cid查询的方法
    public String load(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Customer c=cs.load(request.getParameter("cid"));
        request.setAttribute("cst", c);
        return "forward:/edit.jsp";
    } 

    //编辑的方法
    public String edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

        //先获取表单提交的数据,封装在Customer对象中
        String cid=request.getParameter("cid");
        String name=request.getParameter("cname");
        String gender=request.getParameter("gender");
        String birthday=request.getParameter("birthday");
        String phone=request.getParameter("cellphone");
        String email=request.getParameter("email");
        String description=request.getParameter("description");
        Customer c=new Customer();
        c.setCid(cid);
        c.setCname(name);
        c.setBirthday(birthday);
        c.setGender(gender);
        c.setEmail(email);
        c.setCellphone(phone);
        c.setDescription(description); 
        //调用service层的编辑方法
        cs.edit(c); 
        //将成功信息保存在request域中,并转发到msg页面
        request.setAttribute("msg", "恭喜,修改成功");
        return "forward:/msg.jsp";
    }  

    //删除功能
    public String delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        //获取cid,调用service层删除方法
        cs.delete(request.getParameter("cid")); 

        //将成功信息保存在request域,并转发
        request.setAttribute("msg", "删除成功");
        return "forward:/msg.jsp";
    } 

    //条件查询功能    
    public String query(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

        //先获取表单提交的条件,全部封装在Customer对象中
        String name=request.getParameter("cname");
        String gender=request.getParameter("gender");
        String phone=request.getParameter("cellphone");
        String email=request.getParameter("email");
        Customer c=new Customer();
        c.setCname(name);
        c.setGender(gender);
        c.setEmail(email);
        c.setCellphone(phone); 

        //获取页面的url,也就同时获取了查询条件
        String url=getUrl(request); 
        //获取当前页码,设置每页最大显示数
        int currentpage=getCurrentpage(request); 
        int pagedata=10;

        //调用service层的条件查询方法,获取PageBean对象
        PageBean<Customer> pb=cs.query(c,currentpage,pagedata); 
        //将url封装在pagebean对象中,并将pagebean对象保存在request域,转发到list页面
        pb.setUrl(url);
        request.setAttribute("pb", pb);

        return "forward:/list.jsp";
    }

}

第七步:编写service层方法


public class CustomerService { 
    //创建DAO层对象
    private CustomerDao cd=new CustomerDao(); 

    //添加用户方法,需要Customer对象参数,调用dao层完成数据操作
    public void add(Customer c) {
            cd.add(c);
    } 

    //查询所有方法,需要当前页码,每页最大显示数
    public PageBean<Customer> findAll(int currentpage,int pagedata) {
        return cd.findAll(currentpage,pagedata);
    }  

    //通过cid进行查询的方法
    public Customer load(String cid)
    {
        return cd.finByCid(cid);
    } 
    //编辑方法,需要Customer对象
    public void edit(Customer c)
    {
        cd.edit(c);
    } 
    //删除方法,需要cid
    public void delete(String cid)
    {
        cd.delete(cid);
    } 

    //条件查询方法,需要Customer对象(里面封装了条件),当前页码,页面最大显示数
    public PageBean<Customer> query(Customer c,int currentpage,int pagedata)
    {
        return cd.query(c,currentpage,pagedata);
    }

}

第八步,编写dao层方法对数据进行处理

public class CustomerDao { 
    //获取QueryRunner对象,是dbutils包提供,用来简化对数据库的操作
    private  QueryRunner qr=new QueryRunner(JdbcUtils.getDataSource());

    //添加用户方法
    public  void add(Customer c) 
    {
        try { 
        //设置sql模板和参数
        String sql="insert into customer values(?,?,?,?,?,?,?)";
        Object[] params=                       {c.getCid(),c.getCname(),c.getGender(),c.getBirthday(),c.getCellphone(),c.getEmail(),c.getDescription()};

        //执行添加操作
        qr.update(sql, params);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    } 

    //查询所有的方法
    public  PageBean<Customer> findAll(int currentpage,int pagedata) 
    {
        /*
         * 1.创建pageBean对象,设置currentpage和pagedata
         * 2.获取全部数据的数量totalData和当前页的数据
         * 3.设置到pagebean对象中,返回
         */
        try {
            PageBean<Customer> pb=new PageBean<Customer>();
            pb.setCurrentPage(currentpage);
            pb.setPageData(pagedata);

            //获取全部数据的数量
            String sql="select count(*) from customer";
            Number num=(Number) qr.query( sql, new ScalarHandler());
            int totaldata=num.intValue();
            pb.setTotalData(totaldata);

            //获取当前页面的数据
            sql="select * from customer limit ?,?";
            List<Customer> beanlist=qr.query(sql, new BeanListHandler<Customer>(Customer.class), (currentpage-1)*pagedata,pagedata);
            pb.setBeanList(beanlist);

            //返回PageBean对象
            return pb;

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    } 

    //用cid查找用户的方法
    public Customer finByCid(String cid)
    {
        try { 
            String sql="select * from customer where cid=?";

            return qr.query( sql, new BeanHandler<Customer>(Customer.class),cid);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
    } 



    //编辑用户的方法
    public void edit(Customer c)
    {
        try {
            //设置sql模板和参数
            String sql="update customer set cname=?,gender=?,birthday=?,cellphone=?,email=?,description=? where cid=?";

            Object[] params={c.getCname(),c.getGender(),c.getBirthday(),c.getCellphone(),c.getEmail(),c.getDescription(),c.getCid()};
             qr.update( sql, params);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
    } 

    //删除用户的方法
    public void delete(String cid)
    {
        try {
            String sql="delete from customer where cid=?";

            qr.update( sql,cid);
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
    } 


    //条件查询的方法
    public  PageBean<Customer> query(Customer c,int currentpage,int pagedata) 
    {
        /*
         * 1.创建一个pagebean对象
         * 2.设置传递过来的属性
         * 3.获取全部数据的数量和当前页面的数据、
         * 4.返回pagebean对象
         */
        try { 
            PageBean <Customer> pb=new PageBean<Customer>();
            pb.setCurrentPage(currentpage);
            pb.setPageData(pagedata);

            //获取全部数据的数量,因为我们呢的条件到后面查询数据时还要用到,所以我们将其分开
            StringBuilder sql=new StringBuilder("select count(*) from customer");
            StringBuilder wheresql=new StringBuilder(" where 1=1");
            List<Object> params=new ArrayList<Object>(); 

            //判断条件是否为null,不为空就将其加入到where的后面
            if(c.getCname()!=null&&!c.getCname().trim().isEmpty())
            {
                wheresql.append(" and cname like ?");
                params.add("%"+c.getCname()+"%");
            }
            if(c.getGender()!=null&&!c.getGender().trim().isEmpty())
            {
                wheresql.append(" and gender=?");
                params.add(c.getGender());
            }
            if(c.getCellphone()!=null&&!c.getCellphone().trim().isEmpty())
            {
                wheresql.append(" and cellphone like ?");
                params.add("%"+c.getCellphone()+"%");
            }
            if(c.getEmail()!=null&&!c.getEmail().trim().isEmpty())
            {
                wheresql.append(" and email like ?");
                params.add("%"+c.getEmail()+"%");
            }
            Number num= (Number)qr.query( sql.append(wheresql).toString(), new ScalarHandler(),params.toArray());
            int totaldata=num.intValue();
            pb.setTotalData(totaldata); 

            //获取当前页面数据
            StringBuilder selectsql=new StringBuilder("select * from customer");
            StringBuilder limitsql=new StringBuilder(" limit ?,?"); 
            //因为我们查询当前页面数据需要当前数据开始的位置,和查询几条数据两个参数,所以我们还需要设置两个参数   

            //设置当前数据开始的位置,(当前页码-1)*每页显示的数据,例如当前是第2页,就是从10开始 
            params.add((currentpage-1)*pagedata);
            params.add(pagedata); 

            //获取当前页的数据
            List<Customer> beanlist=qr.query(selectsql.append(wheresql).append(limitsql).toString(), new BeanListHandler<Customer>(Customer.class), params.toArray());
            System.out.println(beanlist); 
            //将其数据集合设置到PageBean中,返回
            pb.setBeanList(beanlist);

            return pb;
            } catch (SQLException e) {
            throw new RuntimeException(e);
            }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值