1. 程式人生 > >IDEA 下寫出第一個 SSH 整合框架練手專案(四,部門和員工的增刪改查完成)

IDEA 下寫出第一個 SSH 整合框架練手專案(四,部門和員工的增刪改查完成)

這是SSH 整合專案的第三章,第一章基於Meavn 整合 Spring 和 Hibernate 框架並進行了進行了自動建表,第二章則在此基礎上加入 Struts 2 框架以及完成一個簡單的登陸頁面。第三章主要側重於分頁查詢功能的實現,第四章則著重完善增刪改查程式碼,因為重複性太大,直接將程式碼粘上來,比較難的會寫上註釋。

首先寫Employee 的增刪改查,直接寫Action--->Service---->Dao

EmployeeAction.java 中新增的程式碼

  /**
     * 首先獲取到所有的部門,更改員工所在的部門,然後跳轉到真正新增員工的jsp
     */
    public String saveUI() {
        //查詢部門
        List<Department> list = departmentService.findAll();
       //集合用 set 方法, 物件用 push
        ActionContext.getContext().getValueStack().set("list", list);
        return "saveUI";
    }

    /**
     * 儲存員工的 save()
     */
    public String save() {
        employeeService.save(employee);
        return "saveSuccess";
    }

    /**
     * 更新員工資訊的方法
     */
    public String edit() {
        //根據員工ID 查詢員工
        employee = employeeService.findById(employee.getEid());
        List<Department> list = departmentService.findAll();
        ActionContext.getContext().getValueStack().set("list", list);
        return "editSuccess";
    }
    public String update() {
        employeeService.update(employee);
        return "updateSuccess";
    }
    /**
     * 刪除員工使用的方法
     */
    public String delete(){
        employeeService.delete(employee);
        return "deleteSuccess";
    }

EmployeeService.java(Service 的介面全部程式碼)
package com.test.ssh.service;

import com.test.ssh.domain.Employee;
import com.test.ssh.domain.PageBean;

public interface EmployeeService {
    public  Employee login(Employee employee);

    PageBean<Employee> fingByPage(Integer currPage);

    void save(Employee employee);

    Employee findById(int eid);

    void delete(Employee employee);

    void update(Employee employee);
}
EmployeeServiceImpl.java  中新增程式碼
    @Override
    public void save(Employee employee) {
        employeeDao.save(employee);
    }

    @Override
    public Employee findById(int eid) {
        return employeeDao.findById(eid);
    }

    @Override
    public void delete(Employee employee) {
        employeeDao.delete(employee);
    }

    @Override
    public void update(Employee employee) {
        employeeDao.update(employee);
    }

此時在/web/frame 下新增一個 editEmployee.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8">
    <title></title>
<body>
<table border="0" width="600px">
    <tr>
        <td align="center" style="font-size:24px; color:#666"> 員工修改</td>
    </tr>
    <tr>
        <td align="right">
            <a href="javascript:document.getElementById('saveForm').submit()">儲存</a>   
            <a href="javascript:history.go(-1)">退回</a>
        </td>
    </tr>
</table>
<br/>

<s:form action="employee_update" method="post" namespace="/" id="saveForm" theme="simple">
    <s:hidden name="eid" value="%{model.eid}"/>
    <table border='0' cellpadding="0" cellspacing="10">
        <tr>
            <td>姓名:</td>
            <td><s:textfield name="ename" value="%{model.ename}"/></td>
            <td>性別:</td>
            <td><s:radio name="sex" list="{'男','女'}" value="%{model.sex}"/></td>
        </tr>
        <tr>
            <td>出生日期:</td>
            <td><input type="text" name="birthday" value="<s:date name="model.birthday" format="yyyy-MM-dd"/>"/></td>
            <td>入職時間:</td>
            <td><input type="text" name="joinDate" value="<s:date name="model.joinDate" format="yyyy-MM-dd"/>"/></td>
        </tr>
        <tr>
            <td>所屬部門:</td>
            <td><s:select name="department.did" list="list" listKey="did" listValue="dname"
                          value="%{model.department.did}" headerKey="" headerValue="-----請--選--擇----"/></td>
            <td>編號:</td>
            <td><s:textfield name="eno" value="%{model.eno}"/></td>
        </tr>
        <tr>
            <td>使用者名稱:</td>
            <td><s:textfield name="username" value="%{model.username}"/></td>
            <td>密碼:</td>
            <td><s:password name="password" value="%{model.password}" showPassword="true"/></td>
        </tr>
    </table>
</s:form>
</body>
</html>

在同一位置新增一個editDepartment.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8">
    <title></title>
</head>
<body>
<table border="0" width="600px">
    <tr>
        <td align="center" style="font-size:24px; color:#666"> 部門編輯</td>
    </tr>
    <tr>
        <td align="right">
            <a href="javascript:document.getElementById('saveForm').submit()">儲存</a>   
            <a href="javascript:history.go(-1)">退回 </a>
        </td>
    </tr>
</table>
<br/>
<br>
<s:form id="saveForm" action="department_update.action" method="post" namespace="/" theme="simple">
    <s:hidden name="did" value="%{model.did}"/>
    <table style="font-size::16px">
        <tr>
            <td>部門名稱:</td>
            <td><s:textfield name="dname" value="%{model.dname}"/></td>
        </tr>
        <tr>
            <td>部門介紹:</td>
            <td></td>
        </tr>
        <tr>
            <td width="10%"></td>
            <td>
                <s:textarea cols="50" rows="5" name="ddesc" value="%{model.ddesc}"/>"/>
            </td>
        </tr>
    </table>
</s:form>
</body>
</html> 

測試發現出現Bug,
org.springframework.dao.InvalidDataAccessApiUsageException:
 object references an unsaved transient instance - save the transient instance before flushing:
 com.test.ssh.domain.Department; nested exception is org.hibernate.TransientObjectException: object r

查詢後更改applicationContext.xml


<!--開啟註解式事務管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

改為

<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="search*" read-only="false" />
        </tx:attributes>
    </tx:advice>

然後更改DepartmentAction.java(直接放全部程式碼)
package com.test.ssh.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.test.ssh.domain.Department;
import com.test.ssh.domain.PageBean;
import com.test.ssh.service.DepartmentService;
import com.test.ssh.service.impl.DepartmentServiceImpl;

public class DepartmentAction extends ActionSupport implements ModelDriven<Department> {

    //模型使用的驅動
    private Department department = new Department();
    private DepartmentService departmentService;

    /**
     * 查詢並設定頁數的操作
     * 先預設當前頁面 currPage = 1
     */
    private Integer currPage = 1;

    public void setCurrPage(Integer currPage) {
        this.currPage = currPage;
    }

    public String findAll() {
        PageBean<Department> pageBean = departmentService.findByPage(currPage);
        //將pageBean 存入到值棧中
        ActionContext.getContext().getValueStack().push(pageBean);
        return "findAll";
    }

    //新增部門
    public String save() {
        departmentService.save(department);
        return "saveSuccess";
    }

    /**
     * 我們在findAll頁面裡點選了 編輯按鈕後,呼叫edit 方法,
     * 主要是獲取想要修改的部門的屬性,並展現在網頁中,
     * 待使用者修改完成後,點選儲存,則呼叫的是 update() 方法進行更新
     */
    //編輯部門的執行的方法
    public String edit() {
        department = departmentService.findById(department.getDid());
        return "editSuccess";
    }

    //修改部門的執行的方法
    public String update() {
        departmentService.update(department);
        return "updateSuccess";
    }

    /**
     * 為了完成級聯刪除,即刪除某一個部門,對應的所有員工都被刪除
     * 需要先查詢,後刪除
     */
    public String delete() {
        department = departmentService.findById(department.getDid());
        departmentService.delete(department);
        return "deleteSuccess";
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

    public void setDepartmentService(DepartmentService departmentService) {
        this.departmentService = departmentService;
    }

    @Override
    public Department getModel() {
        return department;
    }
}
DepartmentServiceImpl.java(介面中的父方法手動補全)
package com.test.ssh.service.impl;

import com.test.ssh.dao.DepartmentDao;
import com.test.ssh.domain.Department;
import com.test.ssh.domain.Employee;
import com.test.ssh.domain.PageBean;
import com.test.ssh.service.DepartmentService;

import java.util.List;

public class DepartmentServiceImpl implements DepartmentService {

    private DepartmentDao departmentDao;
    public void setDepartmentDao(DepartmentDao departmentDao) {
        this.departmentDao = departmentDao;
    }

    @Override
    public PageBean<Department> findByPage(Integer currPage) {
        PageBean<Department> departmentPageBean = new PageBean<Department>();
        // 封裝當前的頁數
        departmentPageBean.setCurrPage(currPage);

        //封裝每頁顯示的記錄數,預設為3
        int pageSize = 3;
        departmentPageBean.setPageSize(pageSize);

        //封裝總記錄數,總記錄數通過查詢資料庫獲得
        int totalCount = departmentDao.findCount();
        departmentPageBean.setTotalCount(totalCount);

        //封裝總頁數
        double tc = totalCount;
        Double num = Math.ceil(tc / pageSize);
        departmentPageBean.setTotalPage(num.intValue());
        //封裝每頁顯示的資料
        int begin = (currPage - 1) * pageSize;
        List<Department> list = departmentDao.findByPage(begin, pageSize);
        departmentPageBean.setList(list);
        return departmentPageBean;
    }

    @Override
    public List<Department> findAll() {
        return departmentDao.findAll();
    }

    @Override
    public void save(Department department) {
        departmentDao.save(department);
    }

    @Override
    public void update(Department department) {
        departmentDao.update(department);
    }

    @Override
    public void delete(Department department) {
        departmentDao.delete(department);
    }


    @Override
    public Department findById(int did) {
        return departmentDao.findById(did);
    }
}

DepartmentDaoImpl.java(介面中的父方法手動補全)

package com.test.ssh.dao.impl;

import com.test.ssh.dao.DepartmentDao;
import com.test.ssh.dao.EmployeeDao;
import com.test.ssh.domain.Department;
import com.test.ssh.domain.Employee;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import java.util.List;


public class DepartmentDaoImpl extends HibernateDaoSupport implements DepartmentDao {


    @Override
    public int findCount() {
        //查詢個數
        String hql = "select count(*) from Department ";
        List<Long> list = this.getHibernateTemplate().find(hql);
        //如果個數
        if (list.size() > 0) {
            return list.get(0).intValue();
            //將Long 型別轉為 int 型別後返回.
        }
        return 0;
    }

    @Override
    public List<Department> findByPage(int begin, int pageSize) {
        DetachedCriteria criteria = DetachedCriteria.forClass(Department.class);
        List<Department> list = this.getHibernateTemplate().findByCriteria(criteria,begin,pageSize);
        return list;
    }

    @Override
    public List<Department> findAll() {
        //查詢到所有語句的 hql 語句。
        List<Department> list = this.getHibernateTemplate().find("from Department ");
        return list;
    }

    @Override
    public void save(Department department) {
        this.getHibernateTemplate().save(department);
    }

    @Override
    public Department findById(int did) {
        return this.getHibernateTemplate().get(Department.class,did);
    }

    @Override
    public void update(Department department) {
        this.getHibernateTemplate().update(department);
    }

    @Override
    public void delete(Department department) {
        this.getHibernateTemplate().delete(department);
    }

}

然後進行對addDepartment.jsp 進行更改。
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8">
    <title></title>
</head>
<body>
<table border="0" width="600px">
    <tr>
        <td align="center" style="font-size:24px; color:#666"> 部門新增</td>
    </tr>
    <tr>
        <td align="right">
            <a href="javascript:document.getElementById('saveForm').submit()">儲存</a>   
            <a href="javascript:history.go(-1)">退回 </a>
        </td>
    </tr>
</table>
<br/>
<br>
<s:form id="saveForm" action="department_save.action" method="post" namespace="/" theme="simple">
    <table style="font-size::16px">
        <tr>
            <td>部門名稱:</td>
            <td><s:textfield name="dname"/></td>
        </tr>
        <tr>
            <td>部門介紹:</td>
            <td></td>
        </tr>
        <tr>
            <td width="10%"></td>
            <td>
                <s:textarea cols="50" rows="5" name="ddesc"/>
            </td>
        </tr>
    </table>
</s:form>
</body>
</html> 

至此,本專案全部結束。 不清楚的可以留言詢問。

相關推薦

IDEA 一個 SSH 整合框架專案部門員工刪改完成

這是SSH 整合專案的第三章,第一章基於Meavn 整合 Spring 和 Hibernate 框架並進行了進行了自動建表,第二章則在此基礎上加入 Struts 2 框架以及完成一個簡單的登陸頁面。第三章主要側重於分頁查詢功能的實現,第四章則著重完善增刪改查程式碼,因為

IDEA 一個 SSH 整合框架專案整合SSH及登陸頁面的完成

這是SSH 整合專案的第二章,第一章基於Meavn 整合 Spring 和 Hibernate 框架並進行了進行了自動建表,這一章則在此基礎上加入 Struts 2 框架以及完成一個簡單的登陸頁面。  1.  配置 Struts 2 選中 Project Struts

IDEA 一個 SSH 整合框架專案( 一 ,Spring 與 Hibernate 整合)

IDEA 下寫出第一個 SSH 整合框架練手專案( 一 ) 最近幾周快速的學完了 SSH 框架,因為很快,所以幾乎沒記住什麼,又抄著視訊寫了一個專案,決定自己只看原始碼的再寫一遍。 1. 新建meavn專案 首先,新建一個Meavn 專案,File <---

Python開發學習一個Python程序

Python編程語言 Python開發學習 目標:了解Python,了解Python的特征,了解Python的應用,掌握Linux下Python開發環境的搭建,理解Windows下Python環境搭建,寫出第一個Python程序。 什麽是Python 一種解釋型的、面向對象的、帶有動態語義

使用 Android Studio 一個 NDK 程式超詳細

    NDK(Native Development Kit),是用於在 Android 應用中巢狀原生代碼的工具集,現在 Android 開發最常用的工具就是 Android Studio 了,筆者也是剛剛接觸 NDK 開發,用了一天的時間,踩了很多坑,最終跑通了自己的第一

Anaconda+django一個web app

圖片 things tab tro ogr 參考 min sent clas 在安裝好Anaconda和django之後,我們就可以開始創建自己的第一個Web app,那麽首先創建一個空文件夾,之後創建的文件都在這個文件夾內。 啟動命令行進入此文件夾內,可以先通過如下命令查

AI 入門從零搭建完整 AI 開發環境一個 AI 應用

是時候學習 AI 了!怎麼做我們來教你。 所需環境:64位的 Windows10,Windows8/7 64位下也能安裝。機器要有至少 30G 的硬碟空間。要求:讀者需要知道怎麼用基本的 GitHub 操作和基本程式開發。 本場 Chat 主要內容:入門 AI 工具和平臺,一

Anaconda+django一個web app

down lock 下載 解決 RKE 分享圖片 tinymce 今天 分享 今天開始學習網頁風格和設計,就像python有Web框架一樣,也有一些CSS框架。對於CSS框架,我們可以使用默認的樣式,也可以在原基礎上編輯修改。本教程使用的是materialize這個CSS框

Anaconda+django一個web app

HERE obj short ren 混亂 all err strong anaconda 今天學習如何寫一個註冊用戶的界面。 上一節的導航欄中我們修改了導航欄右側的文字為register並將路徑設置為/register,內容如下: <li><a hre

Anaconda+django一個web app

one reg url cat AMM filter import tex nac 今天繼續學習外鍵的使用。 當我們有了category、series和很多tutorials時,我們查看某個tutorial,可能需要這樣的路徑http://127.0.0.1:8000/c

例項:建立一個表格分頁顯示資料MongoDB資料庫儲存功能:實現刪改

需求:建立一個表格,分頁顯示資料,功能:實現增刪改查 效果圖: 自動建立一個專案 命令列: express mongodb-demo --view=ejs cd mongodb-demo npm install npm install mongodb --save npm sta

JFinal框架學習------整合bootstrap前端框架實現簡單的刪改功能

   Bootstrap,來自 Twitter,是目前最受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使得 Web 開發更加快捷。 一、JFinal整合bootstrap   1.下載bootstra

SSH-1 員工刪改案例

1. 基本需求   基於SSH框架的員工增刪改查小案例的具體需求如下圖所示:    2. 實現步驟 2.1 搭建SSH框架環境 第一步:新增Spring4框架,具體步驟如下: 加入Spring4框架所依賴的jar包; 配置web.xml

Flask天-MongoDB介紹、刪改、資料型別、比較符、查詢關鍵字、修改器、排序選取跳過

db                檢視當前資料庫 show dbs        查詢所有資料庫(在物理磁碟上的) u

堅持堅持!用Java刪除一個連結串列的倒數N個節點並返回頭節點N總是可達的

這個題目有個前提條件就是N總是可達的,所以直接省去了一種情況(N不可達時的情況) 思路: 資料結構裡面首先給定兩個指標p和q分別都指向這個連結串列的頭節點,然後若想求出這個連結串列的倒數第N個節點,方法就是先讓p向後挪N個位置,q不動。 因為N總是可達的,所以會有倆種情況,

自己一個android 遊戲《是男人就100層》

自己開發的第一個android 遊戲《是男人就下100層》,注意是安卓遊戲,不是IPhone的。截圖如下:            這個有遊戲是用重力感應來控制的,所以要晃動手機來控制人物移動。這個遊戲的目標是下越多層數越好。這個遊戲跟電腦版的區別就是,到後面,吃兩個漢堡

ubuntu創建一個rails應用程序

pos readme size spring iss width ron starting font 一.創建一個新的應用程序 在控制臺輸入 > rails new demo create create README.rdoc

如何對一個Vue.js元件進行單元測試

我們的首次測試 讓我們來寫首個測試。我們首先需要使用shallowMount手動掛載我們的元件,並將其儲存在我們將執行斷言的變數中。我們還可以通過propsData屬性傳遞道具作為物件。 已安裝的元件是一個物件,它有一些實用方法: 然後,我們可以寫第一個斷言: 讓我們來

構建一個SSH的maven專案

  環境配置: eclispe  maven版本:3.3.9 本地倉庫位置:  在C:\apache-maven-3.3.9\conf\settings.xml,需要配置好本地倉庫的路徑。 c盤目錄下的本地倉庫 一:新建Maven專案 因為是w

【AI實戰】訓練一個AI模型:MNIST數字識別模型

在上篇文章中,我們已經把AI的基礎環境搭建好了(見文章:Ubuntu + conda + tensorflow + GPU + pycharm搭建AI基礎環境),接下來將基於tensorflow訓練第一個AI模型:MNIST手寫數字識別模型。 MNIST是一個經典的手寫數字資料集,來自美國國家