一、数据库准备
数据库SQL语句:
1 2 3 4 5 6 7 8 9 10 11
| CREATE DATABASE stus; USE stus; CREATE TABLE stu ( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR (20), gender VARCHAR (5), phone VARCHAR (20), birthday DATE, hobby VARCHAR(50), info VARCHAR(200) );
|
Navicat配合mysql直接可视化:
二、环境搭建(Dao)#
1. 先写index.jsp页面
2. 写一个StudentListServlet类去进行查询学生信息—弹出到list.jsp页面
3. 写一个Student类(封装):里面写所有数据库的属性以及set和get方法
4. 写dao层里面的StudentDao类:里面去写要完成什么方法
5. 写dao.impl里面的StudentDaoImpl类:具体去写连接数据库等操作
三、环境搭建(Dao实现)
1.需要连接开源数据池和连接数据库:
所以要引入c3p0和DBUtils的jar以及连接数据库的jar包,还有就是要有c3p0开源数据池的配置文件。
2. 建立Util包,里面放写好的JDBCUtil02(简化的JDBC连接类)
3. StudentDaoImpl类里面去完成写当时的连接数据库查询的三步
四、环境搭建(Service层)
1. 新建service接口和实现类–和dao以及daoimpl代码一样(为了service去找dao)
2. 在Serlvet代码内增加StudentService service=new StudentServiceImpl()
(为了servlet找service)
五、查询所有学生#
1. 完善Servlet类
1 2 3 4 5 6 7 8 9
| //1.查询出所有学生 StudentService service=new StudentServiceImpl(); //Servlet去找service 然后他会去找dao层 List<Student> list = service.findAll(); //找到查询方法 //2.先把数据存到作用域中 request.setAttribute("list", list); //3.有结果了--跳转 request.getRequestDispatcher("list.jsp").forward(request, response);
|
2. 写跳转的list.jsp页面
1 2 3 4
| 1.在body里面建立2*8的表格: 第一行写标题(姓名、性别等) 第二行要用JSP里面学过的JSTL语言配合EL表达式循环出所有的结果 2.导入所需要用的jstl.jar和standard.jar包
|
六、添加学生
1. 通过主页面list.jsp的添加href要去找添加的界面,因此写一个add.jsp页面
2. 接下来完成servlet(1.获取客户端提交的信息 2.添加到数据库 3.跳转到list.jsp的主页面)
3. 需要去找dao层的studentDao写insert()方法
4. 然后去impl里面去实现insert()方法
和之前的查询一样都是两步:第一步通过JDBCUtil02导入连接;第二步通过update的方法导入信息
5.更改service层代码–添加和dao一层的代码,但是在impl里面建立dao的对象
6. 更改Add.servlet层代码–添加到数据库
注意事项:
- 需要更改eclipse和mysql的编码格式都为UTF-8
- 需要注意爱好需要用数组然后转字符串输出(不然就只能显示一个)
七、删除学生
1. 设置点击超链接弹出一个询问框,如果点击确定–删除成功
1
| <a href="#" onclick="doDelete(${stu.sid})">删除</a>
|
2. 让超链接执行js方法–触发servlet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <script type="text/javascript">
function doDelete(sid) { var flag = confirm("是否确定删除?"); //提示语 if(flag){ //表明点了确定。 访问servlet。 在当前标签页上打开 超链接, //window.location.href="DeleteServlet?sid="+sid; location.href="DeleteServlet?sid="+sid; } }
</script>
``` **3. js点击确定--会获取到sid,然后给sid跳转到servlet**
**4. servlet收到了请求 ---> service,service ---> dao**
---
# 八、更新学生 #
** 1.和之前的操作差不多都是dao和service 去写方法,impl去写实际功能。**
** 2.在list.jsp要通过按钮href标签`EditServlet?sid=${stu.sid}`去找sid然后相当于弹出一个edit的jsp页面展示原来的信息,然后根据更改提交给原来的展示所有的StudentListServet之后在弹出list.jsp页面**
---
# 九、模糊查询 #
**要将list的表格通过form提交,然后里面的sql语句要用拼凑的方法。**
``` String sql="select * from stu where 1=1"; //啥也不选就提交就这样的sql语句 List<String> list=new ArrayList<String>(); //存放传入的sname/sgender //拼装 if(!TextUtil.isEmpty(sname)) { sql=sql+" and sname like ?"; list.add("%"+sname+"%"); //因为like在前面 所以要用%包起来 } if(!TextUtil.isEmpty(sgender)) { sql=sql+" and gender=?"; list.add(sgender); }
|
十、分页(还未实现 可以再F盘的jar文件找源码)
来数据库查询的时候,只查一页的数据就返回了。
优点 内存中的数据量不会太大
缺点:对数据库的访问频繁了一点。
SELECT * FROM stu LIMIT 5 OFFSET 2 (一次性五条 相对与之前的而言)
一口气把所有的数据全部查询出来,然后放置在内存中。
优点: 访问速度快。
缺点: 数据库量过大,内存溢出。
十一、代码完整上传至其他仓库(Student management system)