JavaEE项目实战(OA系统)之十四_员工管理之三
三、完整代码
1. dept模块的代码修改
(1) 新增实体类Dept2:
public class Dept2 {
private int id;
private String name;
private int level;
// getter & setter
// ...
}
(2) 修改DeptDao接口和DeptBiz接口,添加方法声明:
List<Dept2> getTree();
(3) 修改DeptDaoImpl类,添加方法实现:
@Override
public List<Dept2> getTree() {
String sql = "select dept_id id, dept_name name, level from tbl_dept connect by prior dept_id=dept_p_id start with dept_p_id=0";
Session session = sessionFactory.getCurrentSession();
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addScalar("id", StandardBasicTypes.INTEGER);
sqlQuery.addScalar("name", StandardBasicTypes.STRING);
sqlQuery.addScalar("level", StandardBasicTypes.INTEGER);
sqlQuery.setResultTransformer(Transformers
.aliasToBean(Dept2.class));
List<Dept2> list = (List<Dept2>) sqlQuery.list();
return list;
}
(4) 修改DeptBizImpl类,添加方法实现:
@Override
public List<Dept2> getTree() {
return deptDao.getTree();
}
2. user模块的代码实现:
(1) 按照上一练习“部门管理”的步骤,为user模块创建包,包结构如下:
(2) 使用Hibernate反向工程,创建User实体类,对实体类做如下修改:
A、添加deptName属性:
private String deptName;
B、添加构造方法:
public User(int id, String name, String loginName, String phone,
String sex, String email, String remark, int deptId, String deptName) {
this.id = id;
this.name = name;
this.loginName = loginName;
this.phone = phone;
this.sex = sex;
this.email = email;
this.remark = remark;
this.deptId = deptId;
this.deptName = deptName;
}
C、为deptName属性生成get/set方法,并加上@Transient注解:
@Transient
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
(3) UserDao接口和实现类:
public interface UserDao {
void add(User user);
void del(int id);
void update(User user);
User getById(int id);
List<User> getByDeptId(int deptId);
List<User> getAll();
}
@Repository
public class UserDaoImpl implements UserDao {
@Resource
private SessionFactory sessionFactory;
@Override
public void add(User user) {
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
@Override
public void del(int id) {
Session session = sessionFactory.getCurrentSession();
User user = this.getById(id);
session.delete(user);
}
@Override
public void update(User user) {
Session session = sessionFactory.getCurrentSession();
session.update(user);
}
@Override
public User getById(int id) {
Session session = sessionFactory.getCurrentSession();
return (User) session.get(User.class, id);
}
@SuppressWarnings("unchecked")
@Override
public List<User> getByDeptId(int deptId) {
Session session = sessionFactory.getCurrentSession();
Query query = session
.createQuery("select new com.hanhf.oa.basic.user.bean.User(u.id, u.name, u.loginName, u.phone, u.sex, u.email, u.remark, u.deptId, d.name) from User u, Dept d where u.deptId=d.id and u.deptId="
+ deptId);
return (List<User>) query.list();
}
@SuppressWarnings("unchecked")
@Override
public List<User> getAll() {
Session session = sessionFactory.getCurrentSession();
Query query = session
.createQuery("select new com.hanhf.oa.basic.user.bean.User(u.id, u.name, u.loginName, u.phone, u.sex, u.email, u.remark, u.deptId, d.name) from User u, Dept d where u.deptId=d.id");
return (List<User>) query.list();
}
// getter & setter
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
(4) UserBiz接口和实现类:
public interface UserBiz {
void add(User user);
void del(int id);
void update(User user);
User getById(int id);
List<User> getByDeptId(int deptId);
List<User> getAll();
}
@Service
@Transactional
public class UserBizImpl implements UserBiz {
@Resource
private UserDao userDao;
@Override
public void add(User user) {
userDao.add(user);
}
@Override
public void del(int id) {
userDao.del(id);
}
@Override
public void update(User user) {
userDao.update(user);
}
@Override
public User getById(int id) {
return userDao.getById(id);
}
@Override
public List<User> getByDeptId(int deptId) {
return userDao.getByDeptId(deptId);
}
@Override
public List<User> getAll() {
return userDao.getAll();
}
// getter & setter
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
(5) UserAction类:
@Results({ @Result(name = "list", location = "/manage/basic/userList.jsp"),
@Result(name = "add", location = "/manage/basic/userAddEdit.jsp"),
@Result(name = "edit", location = "/manage/basic/userAddEdit.jsp"), })
public class UserAction {
@Resource
private UserBiz userBiz; // 业务逻辑层对象(员工)
@Resource
private DeptBiz deptBiz; // 业务逻辑层对象(部门)
private User user; // 实体对象(员工)
private List<User> userList; // 列表对象(员工)
private List<Dept2> deptList; // 列表对象(部门)
private int userId; // id(员工)
private int deptId; // id(部门)
private String oper; // 用于区分新增或修改
private String msg; // 错误提示
// 跳转到列表页
@Action(value = "toUserList")
public String toList() {
// 取得部门列表
getDeptTree();
// 取得员工列表
if (deptId != 0) {
userList = userBiz.getByDeptId(deptId);
}
return "list";
}
// 跳转到新增页
@Action(value = "toUserAdd")
public String toAdd() {
// 初始化员工对象
user = new User();
// 取得部门列表
getDeptTree();
oper = "add";
return "add";
}
// 跳转到修改页
@Action(value = "toUserEdit")
public String toEdit() {
// 取得员工对象
user = userBiz.getById(userId);
// 取得部门列表
getDeptTree();
oper = "edit";
return "edit";
}
// 新增动作
@Action(value = "userAdd")
public String add() {
try {
// 保存员工对象
userBiz.add(user);
// 取得部门列表
getDeptTree();
// 跳转到列表页
return "list";
} catch (Exception e) {
e.printStackTrace();
// 错误提示
msg = "员工新增失败!";
// 跳转回新增页
return "add";
}
}
// 修改动作
@Action(value = "userUpdate")
public String update() {
try {
// 保存员工对象
userBiz.update(user);
// 取得部门列表
getDeptTree();
// 跳转到列表页
return "list";
} catch (Exception e) {
e.printStackTrace();
// 错误提示
msg = "员工修改失败!";
// 跳转回修改页
return "edit";
}
}
// 删除动作
@Action(value = "userDel")
public String del() {
try {
// 删除对象
userBiz.del(userId);
} catch (Exception e) {
e.printStackTrace();
}
// 取得部门列表
getDeptTree();
// 跳转到列表页
return "list";
}
// 取得部门列表
private void getDeptTree() {
deptList = deptBiz.getTree();
for (Dept2 dept : deptList) {
String name = dept.getName();
if (dept.getLevel() > 1) {
name = "└" + name;
}
for (int i = 1; i < dept.getLevel(); i++) {
name = " " + name;
}
dept.setName(name);
}
}
// getter & setter
// ...
}
(6) JSP页面
A、页面路径:
B、userList.jsp代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OA系统-员工管理</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="toUserList.action">
请选择部门: <select id="deptId" name="deptId">
<option value="0">---请选择部门---</option>
<c:forEach items="${deptList}" var="dept">
<option value="${dept.id}"
<c:if test="${dept.id==deptId}">selected="selected"</c:if>>${dept.name}</option>
</c:forEach>
</select> <input type="submit" value="查询员工" /> <input type="button"
value="新增员工"
οnclick="javascript:window.location.href='toUserAdd.action';" />
</form>
<table border="1">
<tr>
<td>登录名</td>
<td>姓名</td>
<td>所属部门</td>
<td>性别</td>
<td>操作</td>
</tr>
<c:forEach items="${userList}" var="user">
<tr>
<td>${user.loginName}</td>
<td>${user.name}</td>
<td>${user.deptName}</td>
<td>${user.sex}</td>
<td><a href="userDel.action?userId=${user.id}">删除</a> <a
href="toUserEdit.action?userId=${user.id}">修改</a> <a
href="resetPassword.action?userId=${user.id}">初始化密码</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
C、userAddEdit.jsp代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OA系统-员工管理</title>
<script>
function saveUser() {
var oper = form1.oper.value;
if (oper == "add") {
form1.action = "userAdd.action";
} else if (oper == "edit") {
form1.action = "userUpdate.action";
}
form1.submit();
}
</script>
</head>
<body>
<form id="form1" name="form1" method="post">
<input id="oper" name="oper" type="hidden" value="${oper}" /><input
name="user.id" type="hidden" value="${user.id}" /> <input
name="user.loginPassword" type="hidden" value="${user.loginPassword}" />
<table>
<tr>
<td>所属部门:</td>
<td><select name="user.deptId">
<option value="0">---请选择部门---</option>
<c:forEach items="${deptList}" var="dept">
<option value="${dept.id}"
<c:if test="${dept.id==user.deptId}">selected="selected"</c:if>>${dept.name}</option>
</c:forEach>
</select></td>
</tr>
<tr>
<td>登录名:</td>
<td><input name="user.loginName" type="text"
value="${user.loginName}" /></td>
</tr>
<tr>
<td>姓名:</td>
<td><input name="user.name" type="text" value="${user.name}" /></td>
</tr>
<tr>
<td>性别:</td>
<td><input name="user.sex" type="radio" value="男"
<c:if test="${user.sex=='男'}">checked="checked"</c:if> />男 <input
name="user.sex" type="radio" value="女"
<c:if test="${user.sex=='女'}">checked="checked"</c:if> />女</td>
</tr>
<tr>
<td>电话:</td>
<td><input name="user.phone" type="text" value="${user.phone}" /></td>
</tr>
<tr>
<td>email:</td>
<td><input name="user.email" type="text" value="${user.email}" /></td>
</tr>
<tr>
<td>备注:</td>
<td><input name="user.remark" type="text"
value="${user.remark}" /></td>
</tr>
<tr>
<td> </td>
<td><input type="button" value="保存" οnclick="saveUser();" /> <input
type="button" value="返回"
οnclick="javascript:window.location.href='toUserList.action';" /></td>
</tr>
</table>
</form>
</body>
</html>