1. 面向接口编程
1531206406700.png特点: 功能易于扩展。
2. 用户管理-添加用户功能实现
2.1 数据库环境搭建
use heima40;
drop table if exists tab_user;
create table if not exists tab_user(
id int(11) primary key auto_increment,
name varchar(50) not null,
sex varchar(50) not null,
age int(11) not null,
address varchar(50) not null,
qq varchar(50) not null,
email varchar(50) not null
);
insert into tab_user values(null,'张三','男',21,'广东','766335435','zs@qq.com');
insert into tab_user values(null,'李四','男',22,'广东','243424242','ls@qq.com');
insert into tab_user values(null,'王五','女',23,'广东','474574574','ww@qq.com');
insert into tab_user values(null,'赵六','女',28,'广东','77777777', 'zl@qq.com');
insert into tab_user values(null,'钱七','女',25,'湖南','412132145','qq@qq.com');
select * from tab_user;
2.2 项目环境搭建
开发包
1531206876464.png
连接池配置文件
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 1. 数据库的连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///heima40</property>
<property name="user">heima40</property>
<property name="password">123</property>
</default-config>
</c3p0-config>
实体类:
package cn.itheima.usermanager.domain;
/**
* Created by tps on 2018/7/4.
*/
public class User {
private int id;
private String name;
private String sex;
private String address;
private String email;
private String qq;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.3 导入页面原型
1531207229038.png
2.4 业务代码开发
2.4.1 添加用户流程分析图
1531208200862.png
2.4.2 业务代码实现
-
add.jsp form表单添加action="addUserServlet"
-
AddUserServlet.java接受表单用户信息
package cn.itheima.usermanager.web;
import cn.itheima.usermanager.domain.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/addUserServlet")
public class AddUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
// apache BeanUtils.populate(user,request.getParameterMap()) 工具类
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1 请求参数的封装 TO对象中
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String address = request.getParameter("address");
String email = request.getParameter("email");
String qq = request.getParameter("qq");
String age = request.getParameter("age");
User user = new User();
user.setAddress(address);
user.setAge(Integer.parseInt(age));
user.setEmail(email);
user.setName(name);
user.setQq(qq);
user.setSex(sex);
// 2. 调用业务层
UserService userService = new UserServiceImpl();
User existUser = userService.addUser(user);
// 3 根据existUser ==null ? 跳转到添加用户成功页面 : 添加页面 +错误信息
if (existUser==null){
response.sendRedirect("add_ok.jsp");
}else{
// email 冲突
request.setAttribute("addUserError","邮箱已存在");
request.getRequestDispatcher("/add.jsp").forward(request,response);
}
}
}
service接口和service实现类编写
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public User addUser(User user) {
// 业务逻辑 先根据邮箱查询 结果 再去做Insert 操作
User existUser = null;
try {
existUser = userDao.findUserByEmail(user.getEmail());
} catch (Exception e) {
System.out.println("可以注册。。。dao实现添加用户操作");
userDao.addUser(user);
}
return existUser;
}
}
dao接口和dao实现类的编写
public class UserDaoImpl implements UserDao {
@Override
public User findUserByEmail(String email) {
JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
String sql ="select * from tab_user where email = ?";
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),email);
return user;
}
@Override
public void addUser(User user) {
JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
String sql ="insert into tab_user values(null,?,?,?,?,?,?)";
template.update(sql,user.getName(),user.getSex(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());
}
}
add_ok.jsp页面完善
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML5文档-->
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<center><h3>恭喜你,添加成员成功!</h3></center>
<a href="queryAllUserServlet">查询员工列表</a>
<a href="add.jsp">继续添加</a>
</body>
</html>
2.5 效果图:
邮箱相同:
1531210627321.png
3. 用户管理-查询所有用户
3.1 查询用户流程图分析
1531211151831.png
3.2 代码实现
web层
package cn.itheima.usermanager.web;
import cn.itheima.usermanager.domain.User;
import cn.itheima.usermanager.service.UserService;
import cn.itheima.usermanager.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/queryAllUserServlet")
public class QueryAllUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserService userService = new UserServiceImpl();
List<User> users = userService.findAll();
request.setAttribute("users",users);
request.getRequestDispatcher("/list.jsp").forward(request,response);
}
}
service层
@Override
public List<User> findAll() {
return userDao.findAll();
}
}
dao层
@Override
public List<User> findAll() {
JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
String sql ="select * from tab_user";
List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
// template.queryForObject("select count(*) from tab_user",Integer.class);
return users;
}
list.jsp显示数据列表
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
width: 默认宽度与设备的宽度相同
initial-scale: 初始的缩放比,为1:1 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>用户信息管理系统</title>
<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
<style type="text/css">
td, th {
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<c:if test="${empty users}">没有用户信息</c:if>
<c:if test="${not empty users}">
<h3 style="text-align: center">用户信息列表</h3>
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach var="u" items="${users}">
<tr>
<td>${u.id}</td>
<td>${u.name}</td>
<td>${u.sex}</td>
<td>${u.age}</td>
<td>${u.address}</td>
<td>${u.qq}</td>
<td>${u.email}</td>
<td><a class="btn btn-default btn-sm" href="update.jsp">修改</a> <a class="btn btn-default btn-sm" href="">删除</a></td>
</tr>
</c:forEach>
<tr>
<td colspan="8" align="center"><a class="btn btn-primary" href="add.jsp">添加联系人</a></td>
</tr>
</table>
</c:if>
</div>
</body>
</html>
3.3 效果图
1531212377171.png4. 用户管理-删除用户实现
逻辑删除和物理删除
逻辑删除: 并非数据库级别删除,删除操作,更新表某一个标识字段
isdelete 标识标识数据有效性 0 有效 1 无效!
删除操作 : 底层sql update tab_user set isdelete = 1 where id = ?;
恢复用户 : 底层sql update tab_user set isdelete = 0 where id = ?;
查询有效用户: select * from tab_user where isdelete = 0;
查询已经删除用户信息: select * from tab_user where isdelete = 1;
物理删除: 数据库级别删除,彻底删除,acid 四大特性 - 持久性,风险性的!
逻辑删除准备:
- tab_user 添加字段 isdelete
CREATE TABLE `tab_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`sex` varchar(50) NOT NULL,
`age` int(11) NOT NULL,
`address` varchar(50) NOT NULL,
`qq` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`isdelete` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
- User实体类添加一个字段
private int isdelete=0;// 0 表示用户有效 1 删除用户
public int getIsdelete() {
return isdelete;
}
public void setIsdelete(int isdelete) {
this.isdelete = isdelete;
}
-
添加用户 dao实现类
@Override public void addUser(User user) { JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource()); String sql ="insert into tab_user values(null,?,?,?,?,?,?,?)"; template.update(sql,user.getName(),user.getSex(),user.getAge(),user.getAddress(), user.getQq(),user.getEmail(),user.getIsdelete()); }
4.1 业务流程图分析
1531213911200.png
删除操作,一般需要用户确认操作!
js实现弹窗确认操作!只有用户确认,才可以发送删除请求!
4.2 业务代码实现:
- list.jsp 页面添加删除确认框实现: 点击删除 添加confirm函数
<a class="btn btn-default btn-sm" href="javascript:void(0);" onclick="deleteUser(${u.id});">删除</a>
-
js 实现
<script> function deleteUser(id){ var flag = window.confirm("请三思,员工表现很好"); if(flag){ // 发送删除请求 location.href="deleteUserServlet?id="+id; } } </script>
web层完成删除请求接受
package cn.itheima.usermanager.web;
import cn.itheima.usermanager.service.UserService;
import cn.itheima.usermanager.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/deleteUserServlet")
public class DeleteUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
UserService userService = new UserServiceImpl();
userService.deleteUserById(id);
response.sendRedirect("delete_ok.jsp");
}
}
service+dao
@Override
public void deleteUserById(String id) {
userDao.deleteUserById(Integer.parseInt(id));
}
@Override
public void deleteUserById(int id) {
JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
String sql ="update tab_user set isdelete = 1 where id = ?";
template.update(sql,id);
}
delete_ok.jsp页面完善
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML5文档-->
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<center><h3>删除员工成功!</h3></center>
<a href="queryAllUserServlet">查询员工列表</a>
<a href="add.jsp">继续添加。。。</a>
</body>
</html>
删除业务完成!
4.3 效果展示
1531214745126.png
5. 用户管理-修改用户信息
修改用户信息流程说明
1531216672187.png
5.1 代码实现
- list.jsp 点击修改获取id
<a class="btn btn-default btn-sm" href="queryUserByIdServlet?id=${u.id}">修改</a>
- 查询原始user信息
package cn.itheima.usermanager.web;
import cn.itheima.usermanager.domain.User;
import cn.itheima.usermanager.service.UserService;
import cn.itheima.usermanager.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/queryUserByIdServlet")
public class QueryUserByIdServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
UserService userService = new UserServiceImpl();
User user = userService.findUserById(Integer.parseInt(id));
request.setAttribute("user",user);
request.getRequestDispatcher("/update.jsp").forward(request,response);
}
}
- service+dao
@Override
public User findUserById(int id) {
return userDao.findUserById(id);
}
@Override
public User findUserById(int id) {
JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
String sql ="select * from tab_user where id = ?";
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),id);
// template.queryForObject("select count(*) from tab_user",Integer.class);
return user;
}
- update.jsp回显数据
form表单数据
<form action="updateUserServlet" method="post">
<!-- 隐藏域 保存修改用户主键id -->
<input type="hidden" name="id" value="${user.id}">
<div class="form-group">
<label for="name">姓名:</label>
<input type="text" class="form-control" id="name" name="name" value="${user.name}" placeholder="请输入姓名" />
</div>
<div class="form-group">
<label>性别:</label>
<input type="radio" name="sex" value="男"
<c:if test="${user.sex=='男'}">checked="checked"</c:if>
/>男
<input type="radio" name="sex" value="女"
<c:if test="${user.sex=='女'}">checked="checked"</c:if>
/>女
</div>
<div class="form-group">
<label for="age">年龄:</label>
<input type="text" class="form-control" id="age" value="${user.age}" name="age" placeholder="请输入年龄" />
</div>
<div class="form-group">
<label for="address">籍贯:</label>
<select name="address" class="form-control" >
<option value="广东"
<c:if test="${user.address=='广东'}">selected="selected"</c:if>
>广东</option>
<option value="广西"
<c:if test="${user.address=='广西'}">selected="selected"</c:if>
>广西</option>
<option value="湖南"
<c:if test="${user.address=='湖南'}">selected="selected"</c:if>
>湖南</option>
</select>
</div>
<div class="form-group">
<label for="qq">QQ:</label>
<input type="text" class="form-control" name="qq" value="${user.qq}" readonly="readonly" placeholder="请输入QQ号码"/>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="text" class="form-control" name="email" value="${user.email}" readonly="readonly" placeholder="请输入邮箱地址"/>
</div>
<div class="form-group" style="text-align: center">
<input class="btn btn-primary" type="submit" value="提交" />
<input class="btn btn-default" type="reset" value="重置" />
<input class="btn btn-default" type="button" value="返回"/>
</div>
</form>
- 修改用户代码实现
编写updateUserServlet获取表单数据 ,进行数据库表记录的修改实现
web层代码
package cn.itheima.usermanager.web;
import cn.itheima.usermanager.domain.User;
import cn.itheima.usermanager.service.UserService;
import cn.itheima.usermanager.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/updateUserServlet")
public class UpdateUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1 请求参数的封装 TO对象中
String id = request.getParameter("id");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String address = request.getParameter("address");
String email = request.getParameter("email");
String qq = request.getParameter("qq");
String age = request.getParameter("age");
int isdelete = Integer.parseInt(request.getParameter("isdelete"));
User user = new User();
user.setId(Integer.parseInt(id));
user.setAddress(address);
user.setAge(Integer.parseInt(age));
user.setEmail(email);
user.setName(name);
user.setQq(qq);
user.setSex(sex);
user.setIsdelete(isdelete);
// 2. 调用业务层
UserService userService = new UserServiceImpl();
userService.updateUser(user);
response.sendRedirect("update_ok.jsp");
}
}
service层代码
@Override
public void updateUser(User user) {
userDao.updateUser(user);
}
dao层代码
@Override
public void updateUser(User user) {
JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
String sql ="update tab_user set name = ?,sex = ? ,age = ? ,address = ? ,qq = ?,email = ?, isdelete = ? where id = ?";
template.update(sql,user.getName(),user.getSex(),user.getAge(),user.getAddress(),
user.getQq(),user.getEmail(),user.getIsdelete(),user.getId());
}
update_ok.jsp编写
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML5文档-->
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<center><h3>修改员工成功!</h3></center>
<a href="queryAllUserServlet">查询员工列表</a>
<a href="add.jsp">继续添加。。。</a>
</body>
</html>
修改业务代码完成!
网友评论