ssm專案---人事管理系統:員工與部門、職位實現一對一
阿新 • • 發佈:2019-02-08
概要說明:在這個員工實現分頁功能上耗費了相當大的精力,首先需要曉得一對一是怎麼配置的,然後就是sql語句是怎麼寫的,這兩個缺一不可。
Page類參考:http://blog.csdn.net/su1573/article/details/76889339
1.建立Employee.java和Employee.xml對映檔案
Employee.java
public class Employee {
private Integer employeeId; //員工id
private Integer deptId;
private Dept dept; //部門
private Integer jobId;
private Job job; //職業
private String employeeName; //員工名字
private String employeeCardId; //身份證
private String employeeAddress; //地址
private String employeePostCode; //郵政編碼
private String employeePhone; //手機號
private String employeeQQ; //QQ號
private String employeeEmail; //E-mail
private String employeeSex; //性別
private String employeeParty; //政治面貌
/**
* 使用@ModelAttribute接收引數時
* form表單中有日期,Spring不知道該如何轉換,
* 要在實體類的日期屬性上加@DateTimeFormat(pattern="yyyy-MM-dd")註解
*/
@DateTimeFormat(pattern="yyyy-MM-dd" )
private Date employeeBirthday; //出生日期
private String employeeRace; //民族
private String employeeEducation; //學歷
private String employeeHobby; //愛好
private Date employeeCreateDate; //建檔日期
//getter()和setter()省略
}
Employee.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="employee">
<!-- 《員工與部門相關聯》 -->
<resultMap type="com.su.domain.Employee" id="EmployeeWithDept">
<id column="employeeId" property="employeeId"/>
<result column="deptId" property="deptId"/>
<result column="jobId" property="jobId"/>
<result column="employeeName" property="employeeName"/>
<result column="employeeCardId" property="employeeCardId"/>
<result column="employeeAddress" property="employeeAddress"/>
<result column="employeePostCode" property="employeePostCode"/>
<result column="employeePhone" property="employeePhone"/>
<result column="employeeQQ" property="employeeQQ"/>
<result column="employeeEmail" property="employeeEmail"/>
<result column="employeeSex" property="employeeSex"/>
<result column="employeeParty" property="employeeParty"/>
<result column="employeeBirthday" property="employeeBirthday"/>
<result column="employeeRace" property="employeeRace"/>
<result column="employeeEducation" property="employeeEducation"/>
<result column="employeeHobby" property="employeeHobby"/>
<result column="employeeCreateDate" property="employeeCreateDate"/>
<association property="dept" javaType="com.su.domain.Dept">
<id column="deptId" property="deptId"/>
<result column="deptName" property="deptName"/>
<result column="deptDesc" property="deptDesc"/>
</association>
</resultMap>
<!-- 《員工與職業相關聯 》“繼承”《員工與部門相關聯》 -->
<resultMap type="com.su.domain.Employee" id="EmployeeWithJobExtendDept" extends="EmployeeWithDept">
<collection property="job" ofType="com.su.domain.Job">
<id column="jobId" property="jobId"/>
<result column="jobName" property="jobName"/>
<result column="jobDesc" property="jobDesc"/>
</collection>
</resultMap>
<!-- 根據條件分頁查詢 -->
<select id="findEmployeeByPageName" parameterType="employee" resultMap="EmployeeWithJobExtendDept">
select employeeTable.*,jobTable.jobName,deptTable.deptName
from employeeTable,jobTable,deptTable
where jobTable.jobId = #{jobId} and deptTable.deptId = #{deptId}
and employeeTable.employeeName like '%${employeeName}%' and employeeTable.employeeCardId = #{employeeCardId}
and employeeTable.employeePhone = #{employeePhone} and employeeTable.jobId = #{jobId}
and employeeTable.deptId = #{deptId} and employeeTable.employeeSex = #{employeeSex}
</select>
<!-- 點選查詢全部員工資訊 -->
<select id="findAllCount" resultType="java.lang.Integer">
select count(*) from employeeTable
</select>
<!-- 查詢記錄數 -->
<select id="findCount" parameterType="employee" resultType="java.lang.Integer">
select count(*) from employeeTable,jobTable,deptTable
where jobTable.jobId = #{jobId} and deptTable.deptId = #{deptId}
and employeeTable.employeeName like '%${employeeName}%' and employeeTable.employeeCardId = #{employeeCardId}
and employeeTable.employeePhone = #{employeePhone} and employeeTable.jobId = #{jobId}
and employeeTable.deptId = #{deptId} and employeeTable.employeeSex = #{employeeSex}
</select>
<!-- 員工、部門、職位 -->
<select id="findEmployeeByPage" resultMap="EmployeeWithJobExtendDept" parameterType="employee">
select employeeTable.*,jobTable.jobName,deptTable.deptName
from employeeTable,jobTable,deptTable
where employeeTable.jobId = jobTable.jobId and employeeTable.deptId = deptTable.deptId
</select>
</mapper>
2. 建立EmployeeDao,和EmployeeDaoImpl
EmployeeDao.java
public interface EmployeeDao {
public Page findEmployeeByPageName(int currentPage,Employee employee); //按條件分頁查詢
}
EmployeeDaoImpl.java
public class EmployeeDaoImpl extends SqlSessionDaoSupport implements EmployeeDao {
@Override
public Page findEmployeeByPageName(int currentPage, Employee employee) {
SqlSession sqlSession = this.getSqlSession();
Page pageIndex = new Page(); //例項化Page物件
int countResult = 0;
if(employee.getEmployeeName() == null || employee.getEmployeeName().equals("")){
//查詢employee中資料總數,或者符合條件的資料總數
countResult = sqlSession.selectOne("employee.findAllCount");
}else if(employee.getEmployeeName() != null){
//查詢employee中資料總數,或者符合條件的資料總數
countResult = sqlSession.selectOne("employee.findCount",employee);
}
System.out.println("******總記錄數:"+countResult);
pageIndex.setTatalNums(countResult);
int totalPages = (pageIndex.getTatalNums() % pageIndex.PAGESIZE) == 0?
pageIndex.getTatalNums() / pageIndex.PAGESIZE : (pageIndex.getTatalNums() / pageIndex.PAGESIZE)+1;
pageIndex.setTotalPages(totalPages); //總頁數
System.out.println("******總頁數:"+totalPages);
if(currentPage < 1 ||currentPage == 0){
currentPage = 1;
}else if(currentPage > totalPages){
currentPage = totalPages;
}
System.out.println("當前頁:"+currentPage);
pageIndex.setCurrentPage(currentPage);
int firstResult = (currentPage - 1) * pageIndex.PAGESIZE;
System.out.println("起始行:"+firstResult);
pageIndex.setFirstResult(firstResult);
List deptList = null;
// offset起始行 // limit是當前頁顯示多少條資料
RowBounds rowBounds = new RowBounds(pageIndex.getFirstResult(), pageIndex.PAGESIZE);
if(employee.getEmployeeName() == null || employee.getEmployeeName().equals("")){
deptList = sqlSession.selectList("employee.findEmployeeByPage", employee, rowBounds);
}else if(employee.getEmployeeName() != null){
deptList = sqlSession.selectList("employee.findEmployeeByPageName", employee, rowBounds);
}
pageIndex.setList(deptList);
System.out.println("資料長度:"+deptList.size());
return pageIndex;
}
}
3.建立EmployeeService和EmployeeServiceImpl
EmployeeService.java
public interface EmployeeService {
public Page findEmployeeByPageName(int currentPage,Employee employee); //按條件分頁查詢
}
EmployeeServiceImpl.java
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeDao employeeDao;
@Override
public Page findEmployeeByPageName(int currentPage, Employee employee) {
return employeeDao.findEmployeeByPageName(currentPage, employee);
}
}
4.EmployeeController控制器
具體實現員工分頁查詢,檢索條件分頁查詢
@Controller
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@Autowired
private JobService jobService;
@Autowired
private DeptService deptService;
@RequestMapping("findEmployeeByPageName.action")
public ModelAndView findEmployeeByPageName(int currentPage,Employee employee,ModelAndView mav,HttpServletRequest request){
System.out.println("in EmployeeController method findEmployeeByPageName()");
if(employee.getEmployeeName() != null){
System.out.println("檢索的員工姓名:"+employee.getEmployeeName());
}
request.setAttribute("empBack", employee);
Page page = employeeService.findEmployeeByPageName(currentPage, employee);
List<Dept> deptList = deptService.findAllDept();
List<Job> jobList = jobService.findAllJob();
request.setAttribute("page", page);
request.setAttribute("deptList", deptList);
request.setAttribute("jobList", jobList);
mav.setViewName("jsp/employee/employeeList.jsp");
return mav;
}
5. jsp頁面展示結果
<%@ page language="java" contentType="text/html; charset=UTF-8" import="com.su.util.*"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>人事管理系統 ——員工管理</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3" />
<meta http-equiv="description" content="This is my page" />
<link href="${pageContext.request.contextPath}/css/css.css" type="text/css" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/ligerUI/skins/Aqua/css/ligerui-dialog.css"/>
<link href="${pageContext.request.contextPath}/js/ligerUI/skins/ligerui-icons.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.11.0.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-migrate-1.2.1.js"></script>
<script src="${pageContext.request.contextPath}/js/ligerUI/js/core/base.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/js/ligerUI/js/plugins/ligerDrag.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/js/ligerUI/js/plugins/ligerDialog.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/js/ligerUI/js/plugins/ligerResizable.jss" type="text/javascript"></script>
<link href="${pageContext.request.contextPath}/css/pager.css" type="text/css" rel="stylesheet" />
<script type="text/javascript">
function one(frm,num){
frm.currentPage.value=num;
frm.submit();
}
function jump_to(frm,pageNo){
var reg=/^\d+$/;
if(!reg.test(pageNo)){
alert("請輸入正確數字");
}else{
one(frm,pageNo);
}
}
$(function(){
/** 獲取上一次選中的部門資料 */
var boxs = $("input[type='checkbox'][id^='box_']");
/** 給全選按鈕繫結點選事件 */
$("#checkAll").click(function(){
// this是checkAll this.checked是true
// 所有資料行的選中狀態與全選的狀態一致
boxs.attr("checked",this.checked);
})
/** 給資料行繫結滑鼠覆蓋以及滑鼠移開事件 */
$("tr[id^='data_']").hover(function(){
$(this).css("backgroundColor","#eeccff");
},function(){
$(this).css("backgroundColor","#ffffff");
})
/** 刪除員工繫結點選事件 */
$("#delete").click(function(){
/** 獲取到使用者選中的複選框 */
var checkedBoxs = boxs.filter(":checked");
if(checkedBoxs.length < 1){
$.ligerDialog.error("請選擇一個需要刪除的員工!");
}else{
/** 得到使用者選中的所有的需要刪除的ids */
var ids = checkedBoxs.map(function(){
return this.value;
})
$.ligerDialog.confirm("確認要刪除嗎?","刪除員工",function(r){
if(r){
// alert("刪除:"+ids.get());
// 傳送請求
window.location = "${pageContext.request.contextPath}/removeEmployee.action?ids=" + ids.get();
}
});
}
})
})
</script>
</head>
<body>
<!-- 導航 -->
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td height="10"></td></tr>
<tr>
<td width="15" height="32"><img src="${pageContext.request.contextPath}/images/main_locleft.gif" width="15" height="32"></td>
<td class="main_locbg font2"><img src="${pageContext.request.contextPath}/images/pointer.gif"> 當前位置:員工管理 > 員工查詢</td>
<td width="15" height="32"><img src="${pageContext.request.contextPath}/images/main_locright.gif" width="15" height="32"></td>
</tr>
</table>
<form name="empform0" method="post" id="empform0" action="${pageContext.request.contextPath}/findEmployeeByPageName.action">
<table width="100%" height="90%" border="0" cellpadding="5" cellspacing="0" class="main_tabbor">
<!-- 查詢區 -->
<tr valign="top">
<td height="30">
<table width="100%" border="0" cellpadding="0" cellspacing="10" class="main_tab">
<tr>
<td class="fftd">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="font3">
職位:
<select name="jobId" style="width:143px;">
<option value="${requestScope.empBack.jobId}">(預設值)</option>
<c:forEach items="${requestScope.jobList }" var="job">
<option value="${job.jobId }">${job.jobName }</option>
</c:forEach>
</select>
姓名:<input type="text" name="employeeName" value="${requestScope.empBack.employeeName}">
身份證號碼:<input type="text" name="employeeCardId" maxlength="18" value="${requestScope.empBack.employeeCardId}">
</td>
</tr>
<tr>
<td class="font3">
性別:
<select name="employeeSex" style="width:143px;">
<option value="${requestScope.empBack.employeeSex}">(預設值)</option>
<option value="男">男</option>
<option value="女">女</option>
</select>
手機:<input type="text" name="employeePhone" value="${requestScope.empBack.employeePhone}">
所屬部門:<select name="deptId" style="width:100px;">
<option value="${requestScope.empBack.deptId}">(預設值)</option>
<c:forEach items="${requestScope.deptList }" var="dept">
<option value="${dept.deptId }">${dept.deptName }</option>
</c:forEach>
</select>
<input type="hidden" name="currentPage" value="1">
<input type="submit" value="搜尋"/>
<input id="delete" type="button" value="刪除"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!-- 資料展示區 -->
<tr valign="top">
<td height="20">
<table width="100%" border="1" cellpadding="5" cellspacing="0" style="border:#c2c6cc 1px solid; border-collapse:collapse;">
<tr class="main_trbg_tit" align="center">
<td><input type="checkbox" name="checkAll" id="checkAll"></td>
<td>姓名</td>
<td>性別</td>
<td>手機號碼</td>
<td>郵箱</td>
<td>職位</td>
<td>學歷</td>
<td>身份證號碼</td>
<td>部門</td>
<td>聯絡地址</td>
<td>建檔日期</td>
<td align="center">操作</td>
</tr>
<c:forEach items="${requestScope.page.list}" var="employee" varStatus="stat">
<tr id="data_${stat.index}" class="main_trbg" align="center">
<td><input type="checkbox" id="box_${stat.index}" value="${employee.employeeId}"></td>
<td>${employee.employeeName }</td>
<td>${employee.employeeSex} </td>
<td>${employee.employeePhone }</td>
<td>${employee.employeeEmail }</td>
<td>${employee.job.jobName }</td>
<td>${employee.employeeEducation }</td>
<td>${employee.employeeCardId }</td>
<td>${employee.dept.deptName }</td>
<td>${employee.employeeAddress }</td>
<td>
<f:formatDate value="${employee.employeeCreateDate}"
type="date" dateStyle="long"/>
</td>
<td align="center" width="40px;"><a href="${pageContext.request.contextPath}/updateEmployee.action?flag=1&employeeId=${employee.employeeId}">
<img title="修改" src="${pageContext.request.contextPath}/images/update.gif"/></a>
</td>
</tr>
</c:forEach>
</table>
</td>
</tr>
<!-- 分頁標籤 -->
<tr valign="top"><td align="center" class="font3">
<% Page pageOne = (Page)request.getAttribute("page"); %>
<% if(pageOne!=null) {for(int i=1;i<=pageOne.getTotalPages();i++){ %>
<a href="javascript:one(document.forms[0],<%=i%>)"><font size="3px"><%=i%> </font></a>
<% }} %>
<br>
搜尋結果共<font style="color:red">${page.tatalNums }</font>條 當前頁${page.currentPage}/共${page.totalPages}頁
<span>跳轉至</span><input type="text" name="inputPage" id="inputPage" value="${page.currentPage}" style="width:30px;text-align:center;"/>頁
<input type="button" onclick="javascript:jump_to(document.forms[0],document.getElementById('inputPage').value)" value="GO"/>
</td></tr>
</table>
</form>
<div style="height:10px;"></div>
</body>
</html>
至此員工與部門、職位,關聯分頁查詢已完成,供以後複習
Author:su1573