用的是mvc设计模式
调用的模式是dao—-dao实现类—-service—service实现类—–servlet——前端页面
用c3p0数据库连接池和dbutil
查找所有学生
1,创建dao接口添加方法findallstudent返回值是一个list集合装的是student
2,创建dao实现类实现dao的方法findallstudent,
QueryRunner queryRunner=new QueryRunner(new ComboPooledDataSource(),new BeanListHandler<student>(student.class));
List<student> list=queryRunner.query("select * from student ");
return list;3,创建一个service接口添加方法,findallstudent和dao的方法一样
4,创建一个service实现类添加方法findallstudent,
5,创建dao d=new daoimpl();
6,return d.findallstudent();
7,在servlet中调用service的findallstudent方法
然后将返回的list集合上传
8,设置跳转页面
request.setRequestDispatch(“list.jsp”).forWord(request,response);
在list.jsp页面使用jstl标签用foreach循环遍历list集合,用el表达式取出值
模糊查询
在表单内设置一个下拉列表框可以选择男女
按姓名查询:
<input type="text" name="sname"/>
按性别查询:<select name="sgender">
<option value="">--请选择--
<option value="男">男
<option value="女">女
</select>
<input type="submit" value="查询">
先判断模糊查询的条件是什么
如果是同时模糊查询姓名和性别
sql语句 select *from student where gender=?and name like?
如果只是查询性别
sql语句 select *from student where gender=?
如果只查询name
sql语句 select *from student where name like?
添加学生信息
在jsp页面添加一个表单让用户填入信息
其中性别是单选框
<input type="radio" name="gender" value="男">男<input type="radio" name="gender" value="女">女
爱好是复选框
<input type="checkbox" name="hobby" value="跳舞">跳舞<input type="checkbox" name="hobby" value="唱歌">唱歌<input type="checkbox" name="hobby" value="洗澡">洗澡
简介是文本域
<textarea name="info" rows="3" cols="20"></textarea></td>
表单设置跳转的是一个servlet
在servlet页面接收传过来的信息
其中爱好接收和其他类型不一样。String [] h = request.getParameterValues(“hobby”);
然后将h数组转为字符串String hobby=Arrays.toString(h);
因为数组转为字符串后会在开头和结尾加上[ ]俩个符号所以需要i截取一下字符。
hobby = hobby.substring(1, hobby.length()-1);
生日需要转格式
Date date= new SimpleDateFormat("yyyy-MM-dd").parse(birthday);
然后再dao内创建一个方法addstudent传入的参数就是表单输入的参数
再dao的实现类创建一个方法addstudent实现dao的方法
QueryRunner queryRunner=new QueryRunner(new ComboPooledDataSource());
queryRunner.update(“insert into student values(?,?,?,?,?)”,name,age,gender,…);
在service接口中添加da的方法
和上面套路一样,调用dao的方法用来返回
在servlet中调用servcie的方法进行添加
更新修改学生信息
点击更新链接跳转到servlet顺带传id
在dao创建一个根据id查询的方法将查到的学生信息封装到student中上传到servlet
然后页面跳转到更新界面
form表单用el表达式获取普通元素的值
<input type="text" name="sname" value="${stu.sname }">
单选框的值需要用jstl的if语句进行判断
如果包含男
<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>>女
复选框的值也需要用jstl 但并不是用c表达式而是用
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
fn表达式的contains判断是否包含
<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>>写字
获取用户要修改的用户信息
生日需要转格式
Date date= new SimpleDateFormat(“yyyy-MM-dd”).parse(birthday);
爱好是string数组类型所以接数据的方式不一样
String【】 h=request。getParameterValues(“hobby”);
然后将数组转换为字符串
String hobby=Arrays。toString(h);
因为数组的前后有[]符号所以需要截取字段
hobby =h。subString(1,hobby。length()-1);
在dao内创建一个方法更新数据根据id
QueryRunner queryRunner=new QueryRunner(new ComboPoolDataSource());
queryRunner.update(“updata student set name=?,age=?,gender=?…);
然后再servlet内调用service即可
删除学生信息
创建js代码
“`
function doDelete(sid) {
/* 如果这里弹出的对话框,用户点击的是确定,就马上去请求Servlet。
如何知道用户点击的是确定。
如何在js的方法中请求servlet。 */
var flag = confirm("是否确定删除?");
if(flag){
//表明点了确定。 访问servlet。 在当前标签页上打开 超链接,
location.href="DeleteServlet?sid="+sid;
}
}
“`
flag是bolean类型,点击确定返回的是true
location.href=“”是页面跳转
因为页面跳转的时候传递了id所以就可以实现根据id删除学生信息
分页显示学生信息
因为分页查询到的数据并不是规范的数据,所以需要重新对数据进行封装到Javabean中。
大概需要的数据有:
当前页数,总共页数,查询到数据,每页所显示的数据条数,一共有多少条数据。
当点击分页查询的时候,传入servlet的值有,当前页数,1,默认一页显示的数据5条。
在dao中的
查询学生信息的方法中需要传入的参数有当前页数,返回List select * form student limit 5 offset 5*(页数-1)可以完成分页查询。
查询总共有多少条数据的方法,不需要传入参数,返回值是int类型 Long result = (Long) runner.query(“SELECT COUNT(*) FROM stu” , new ScalarHandler() );
在service创建一个方法传入参数是当前页数返回值类型是javabean类型
用来处理封建进JavaBean中的数据
“` public PageBean findStudentByPage(int currentPage) throws SQLException {
//封装分页的该页数据
PageBean<Student> pageBean = new PageBean<Student>();
int pageSize = StudentDao.PAGE_SIZE ;
pageBean.setCurrentPage(currentPage); //设置当前页
pageBean.setPageSize(pageSize); //设置每页显示多少记录
StudentDao dao = new StudentDaoImpl() ;
List<Student> list =dao .findStudentByPage(currentPage);
pageBean.setList(list); //设置这一页的学生数据
//总的记录数, 总的页数。
int count = dao.findCount();
pageBean.setTotalSize(count); //设置总的记录数
//200 , 10 ==20 201 , 10 = 21 201 % 10 == 0 ?201 / 10 :201 % 10 + 1
pageBean.setTotalPage(count % pageSize==0 ? count / pageSize : (count / pageSize) + 1); //总页数
return pageBean;
}```
在servlet中调用service中的方法,将返回值传入前端
显示查到的学生信息
完善首页,上一页,下一页,当前页数,共几页,尾页
判断是否是第一页,是第一页就不显示
<a href ="servlet?当前页=1">首页</a>和< href="servlet 当前页=当前页-1"/>上一页</a>
for循环1到总共页数
点击数字跳转到指定页数
<a href ="servlet?当前页=i">首页</a>
判断是否是最后一页是就不显示
<a href ="servlet?当前页=总共页数">尾页</a>和< href="servlet 当前页=当前页+1"/>下一页</a>
dbutil的查找统计new的方法是ScalarHandler()
queryRunner.query("select count(*)from student "new ScalarHandler(),);