1. 程式人生 > >ssm專案---人事管理系統:員工與部門、職位實現一對一

ssm專案---人事管理系統:員工與部門、職位實現一對一

概要說明:在這個員工實現分頁功能上耗費了相當大的精力,首先需要曉得一對一是怎麼配置的,然後就是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">&nbsp;&nbsp;&nbsp;當前位置:員工管理 &gt; 員工查詢</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>&nbsp;
                            <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%>&nbsp;</font></a>
        <% }} %>

        <br>
        搜尋結果共<font style="color:red">${page.tatalNums }</font>條&nbsp;當前頁${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