1. 程式人生 > >使用springMVC編寫實現資料庫的增刪改查

使用springMVC編寫實現資料庫的增刪改查

今天,在這裡總結一下之前寫過的一個對員工資訊進行增刪改查的小專案,首先,先將必要的環境搭建好,員工和部門的實體類以及對應的dao如下

部門實體類:

package com.tanla.springmvc.crud.entities;

public class Department {

    private Integer id;
    private String departmentName;

    public Department() {
        // TODO Auto-generated constructor stub
    }

    public Department
(int i, String string) { this.id = i; this.departmentName = string; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getDepartmentName() { return departmentName; } public void
setDepartmentName(String departmentName) { this.departmentName = departmentName; } @Override public String toString() { return "Department [id=" + id + ", departmentName=" + departmentName + "]"; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

員工實體類: 
其中有幾個註解 
@Past:驗證的資料型別 :java.util.Date,java.util.Calendar,Joda Time類庫的日期型別 
說明 :驗證註解的元素值(日期型別)比當前時間早 
註解詳情參見:http://www.cnblogs.com/easymind223/p/5841043.html

package com.tanla.springmvc.crud.entities;

import java.util.Date;

import javax.validation.constraints.Past;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;

public class Employee {

    private Integer id;
    @NotEmpty
    private String lastName;

    @Email
    private String email;
    //1 male, 0 female
    private Integer gender;

    private Department department;

    @Past
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date birth;

    @NumberFormat(pattern="#,###,###.#")
    private Float salary;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Department getDepartment() {
        return department;
    }

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

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Float getSalary() {
        return salary;
    }

    public void setSalary(Float salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", lastName=" + lastName + ", email="
                + email + ", gender=" + gender + ", department=" + department
                + ", birth=" + birth + ", salary=" + salary + "]";
    }

    public Employee(Integer id, String lastName, String email, Integer gender,
            Department department) {
        super();
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
        this.department = department;
    }

    public Employee() {
        // TODO Auto-generated constructor stub
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109

dao層:

package com.tanla.springmvc.crud.dao;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.tanla.springmvc.crud.entities.Department;
import com.tanla.springmvc.crud.entities.Employee;

@Repository
public class EmployeeDao {

    private static Map<Integer, Employee> employees = null;

    @Autowired
    private DepartmentDao departmentDao;

    static{
        employees = new HashMap<Integer, Employee>();

        employees.put(1001, new Employee(1001, "E-AA", "[email protected]", 1, new Department(101, "D-AA")));
        employees.put(1002, new Employee(1002, "E-BB", "[email protected]", 1, new Department(102, "D-BB")));
        employees.put(1003, new Employee(1003, "E-CC", "[email protected]", 0, new Department(103, "D-CC")));
        employees.put(1004, new Employee(1004, "E-DD", "[email protected]", 0, new Department(104, "D-DD")));
        employees.put(1005, new Employee(1005, "E-EE", "[email protected]", 1, new Department(105, "D-EE")));
    }

    private static Integer initId = 1006;

    public void save(Employee employee){
        if(employee.getId() == null){
            employee.setId(initId++);
        }

        employee.setDepartment(departmentDao.getDepartment(employee.getDepartment().getId()));
        employees.put(employee.getId(), employee);
    }

    public Collection<Employee> getAll(){
        return employees.values();
    }

    public Employee get(Integer id){
        return employees.get(id);
    }

    public void delete(Integer id){
        employees.remove(id);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
package com.tanla.springmvc.crud.dao;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.tanla.springmvc.crud.entities.Department;

@Repository
public class DepartmentDao {

    private static Map<Integer, Department> departments = null;

    static{
        departments = new HashMap<Integer, Department>();

        departments.put(101, new Department(101, "D-AA"));
        departments.put(102, new Department(102, "D-BB"));
        departments.put(103, new Department(103, "D-CC"));
        departments.put(104, new Department(104, "D-DD"));
        departments.put(105, new Department(105, "D-EE"));
    }

    public Collection<Department> getDepartments(){
        return departments.values();
    }

    public Department getDepartment(Integer id){
        return departments.get(id);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

然後,把Spring mvc的環境搭建好,注意:在web.xml中新增如下攔截器,實現將post請求變成delete或者put請求

<!--配置filter將post請求變成 delete,put請求 -->
    <filter>
      <filter-name>HiddenHttpMethodFilter</filter-name>
      <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
      <filter-name>HiddenHttpMethodFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

接下來,說一說這個小專案實現的功能,以及它的流程。 
第一步,新建一個index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
   <!-- 此處加斜槓的時候 點進去的路徑為http://localhost:8080/emps 
        不加斜槓的是http://localhost:8080/springMVC-2/emps
    -->
   <a href="emps">Get All Employee</a>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

第二步,為這個頁面的超連結寫一個處理方法,新建一個類,名為EmployeeHandler,在裡面寫一個方法,其中的返回值對應的是一個jsp檢視,名為list

@RequestMapping("/emps")
    public String list(Map<String, Object> map) {

        map.put("employees", employeeDao.getAll());
        return "list";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第三步,根據Springmvc.xml中的配置資訊來建立檢視,在本例中,Springmvc.xml是如下配置的,說明所有在EmployeeHandler類中的處理方法返回的檢視都在/WEB-INF/views/路徑下。所以新建一個list.jsp來顯示所有的員工資訊

 <context:component-scan base-package="com.tanla.springmvc.crud"></context:component-scan>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

       <property name="prefix" value="/WEB-INF/views/"></property>
       <property name="suffix" value=".jsp"></property>

    </bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

list.jsp:

<c:if test="${empty requestScope.employees }">
               沒有員工資訊
    </c:if>

    <c:if test="${!empty requestScope.employees }">
      <table border="1" cellpadding="10" cellspacing="0">
         <tr>
           <td>ID</td>
           <td>LAST NAME</td>
           <td>EMAIL</td>
           <td>GENDER</td>
           <td>DEPARTMENT</td>
           <td>EDIT</td>
           <td>DELETE</td>
         </tr>

         <c:forEach items="${requestScope.employees }" var="emp">
            <tr>
              <td>${emp.id}</td>
              <td>${emp.lastName}</td>
              <td>${emp.email}</td>
              <td>${emp.gender == "0" ?'female':'male' }</td>
              <td>${emp.department.departmentName }</td>
              <td><a href="emp/${emp.id}">edit</a></td>
              <td><a class="delete" href="emp/${emp.id}">delete</a></td>
            </tr>
         </c:forEach>

      </table>
    </c:if>

    <a href="emp">Add New Employee</a>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

第四步,寫一個新增新員工的功能。,點選list.jsp上面的新增新員工按鈕,就會到對應的handler類中的方法中,然後會跳轉到input.jsp頁面

@RequestMapping(value="/emp" , method = RequestMethod.GET)
    public String input(Map<String ,Object> maps) {
            //將部門資訊從資料庫中讀出來方便表單回顯
        maps.put("departments",departmentDao.getDepartments() );
        //表單顯示的時候,域物件裡面必須有一個與表單欄位對應的bean
        maps.put("employee", new Employee());
        return "input";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

input.jsp中應注意事項: 
1)action中的路徑必須加${pageContext.request.contextPath } 
2)頁面中的屬性必須和實體類中的屬性一一對應。

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>Insert title here</title>
</head>
<body>

  <form:form action="${pageContext.request.contextPath }/emp" method="POST" modelAttribute="employee">
    <!--根據這個來判斷是新增操作還是編輯操作-->
    <c:if test="${employee.id == null }">
      LastName:<form:input path="lastName" />
    </c:if>

    <c:if test="${employee.id != null }">
      <form:hidden path="id"/>
      <input type="hidden" name="_method" value="PUT"/>
    </c:if>
    <br><br>
    Email:<form:input path="email"/>
    <br><br>
    <%
      Map<Integer , String> genders = new HashMap<Integer,String>();
      genders.put(1, "male");
      genders.put(0, "female");

      request.setAttribute("genders",genders);
    %>
    Gender:<form:radiobuttons path="gender" items="${genders }"/>
    <br><br>
    Department:<form:select path="department.id" items="${departments }" itemLabel="departmentName" itemValue="id"></form:select>
    <br><br>
    <input type="submit" value="Submit">

  </form:form>

</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

第五步,點選提交之後,會根據提交方法轉到save方法中

@RequestMapping(value="/emp" , method = RequestMethod.POST)
    public String save(Employee employee) {
        System.out.println(employee);
        employeeDao.save(employee);
        return "redirect:/emps";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第六步,刪除操作 
list.jsp頁面上應該新增如下程式碼

<form action="" method="post">
        <input type="hidden" name="_method" value="DELETE">
    </form>
  • 1
  • 2
  • 3
<script type="text/javascript">

  $(function(){

         $(".delete").click(function(){

             var href = $(this).attr("href");

             $("form").attr("action",href).submit();

             return false;
         });


      })

  </script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

為了讓靜態頁面有效果,必須在springmvc.xml配置檔案中新增:

 <!-- 可以在 SpringMVC 的配置檔案中配置 <mvc:default-servlet-handler/> 的方式解決靜態資源的問題:
     <mvc:default-servlet-handler/> 將在 SpringMVC 上下文中定義一個 –
      DefaultServletHttpRequestHandler,它會對進入 DispatcherServlet 的
              請求進行篩查,如果發現是沒有經過對映的請求,就將該請求交由 WEB 應用伺服器預設的 Servlet 處理,
              如果不是靜態資源的請求,才由DispatcherServlet 繼續處理一般 WEB 應用伺服器預設的 Servlet 的名稱都是 default。
              若所使用的 WEB 伺服器的預設 Servlet 名稱不是 default,則需要通過 default-servlet-name 屬性顯式指定 -->

     <mvc:default-servlet-handler/>
     <mvc:annotation-driven></mvc:annotation-driven>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
@RequestMapping(value="/emp/{id}",method = RequestMethod.DELETE)
    public String delete(@PathVariable("id") Integer id) {

        employeeDao.delete(id);
        return "redirect:/emps";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第七步,修改操作 
注意事項:要在handler類中加入如下方法,因為在頁面上沒有lastName屬性,所以不能直接去頁面上的值,會導致lastName為空,應該先把資料從資料庫中取出來,然後再用頁面上的值覆蓋它,保證沒有修改的值也不會為空。

@ModelAttribute
    public void getEmployee(@RequestParam(value="id",required=false)Integer id,
            Map<String ,Object> maps) {
        if(id!=null) {
            maps.put("employee", employeeDao.get(id));
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
@RequestMapping(value="/emp",method=RequestMethod.PUT)
    public String update(Employee employee) {
        employeeDao.save(employee);
        return "redirect:/emps";
    }

相關推薦

Web介面實現資料庫刪改過程

實現方法:JSP+Servlet+JavaBean 基本實現思想:jsp檔案為顯示介面,包括增刪改查四個介面,然後使用form或者href超連結的方法將網頁獲得的值傳到Servlet中的方法裡;而servlet方法中呼叫dao層裡面的包括增刪改查等方法的物件,以此實現對資料庫裡面的資料的增刪改查,最後返回頁

Kotlin整合Spring Boot實現資料庫刪改(mybatis版)

前幾天由於工作需要,便開始學習了kotlin,java基礎紮實學起來也還算比較快,對於kotlin這個程式語言自然是比java有趣一些,因此就有了使用kotlin搭建基於spring boot的開發環境。這次先分享mybatis版本的 1 maven的pom檔案 <

Kotlin整合Spring Boot實現資料庫刪改(spring data jpa版)

接上次的kotlin整合spring boot的mybatis版本,這次分享的內容也很精彩,現在spring data jpa也慢慢流行起來了,因此學習kotlin的時候也順帶寫了spring data jpa版本的,下面就直接上程式碼分享給大家了 1 pom加入如下配置

pymysql連線資料庫,實現資料庫刪改

1.資料庫連線 # 建立連線 def create_conn(): import pymysql conn = pymysql.connect( host='localhost', port=3306, user='root'

基於ajax的三層,實現資料庫刪改基礎(一DAL)

  三層的組成就是DAL,BLL,UI層和Model層。其中的DAL層是與資料庫連結,需要引用Model層,進行對資料的操作,但我們一般在此層不進行資料的處理。BLL層負責引用DAL和MODEL層,在

Android中內容提供者ContentProvider實現資料庫刪改

1.我們首先new一個我們自己的類整合ContentProvider,並實現方法如下 package com.wzw.sqllitedemo.providers; import com.wzw.sqllitedemo.db.PersonSQLiteOpenHelper;

使用springMVC編寫實現資料庫刪改

今天,在這裡總結一下之前寫過的一個對員工資訊進行增刪改查的小專案,首先,先將必要的環境搭建好,員工和部門的實體類以及對應的dao如下部門實體類:package com.tanla.springmvc.crud.entities; public class Departmen

java實現mysql資料庫刪改

1.連線資料庫: import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { static String driver = "com.mysql.jdbc.Driver"; s

C#編寫簡單的資料庫刪改(二)

一、今天我們繼續資料庫的增刪改查的編寫,下面我們進行刪除操作,我們在Formdelete介面上拖入幾個控制元件,如下圖: (資料庫顯示框參照之前的資料庫增加的方法) 將控制元件改名後,雙擊刪除按鈕進入程式碼編寫介面,首先連線資料庫,在判斷

Laravel使用ORM實現操作資料庫刪改

我在下一篇部落格會發布關於orm的一個知識瞭解 要了解比全方面的可以看laravel文件:https://laravel-china.org/docs/laravel/5.5/eloquent/1332 或者看我前面的幾個部落格的基礎操作 進行了解  這下面只是給出了一個

idea+spring4+springmvc+mybatis+maven實現簡單刪改CRUD

type https suffix rec 項目目錄結構 inject btree 控制器 clu 在學習spring4+springmvc+mybatis的ssm框架,idea整合簡單實現增刪改查功能,在這裏記錄一下。 原文在這裏:https://my.oschina.n

SpringBoot框架整合SSM實現簡單資料庫刪改

首先建立一個Maven工程 第一步:選擇Maven專案建立結構 第二步:配置專案屬性 點選finish即可完成建立 再來看一下專案的目錄 然後配置pom.xml依賴檔案  <?xml version="1.0" encoding="U

JqueryEasyUI實現CRUD刪改操作

per queryall call .get field string cal upd wid 1.代碼介紹: 前端界面由jsp,JqueryEasyUI制作,後臺代碼由Servlet實現邏輯操作 註:JqueryEasyUI的庫文件和其他自己jar包自己導入。Jquery

Java操作數據庫實現"刪改"

mysq 新的 rom 可用 erp catch next() value eight 本文主要講解JDBC操作數據庫 主要實現對MySql數據庫的"增刪改查" 綜合概述: JDBC的常用類和接口 一 DriverManager類 DriverManage類用

32、mysql資料庫刪改

建立資料庫 CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] [CHARACTER SET=''] [DEFAULT] [COLLATE=''] IF NOT EXISTS 指定資料庫不存在的時候才建立 CHARACTER SET=

flask和django區別--資料庫刪改的區別

flask和django都是一樣的,在你建立了資料模型之後,兩個框架都會給你資料庫操作的api,供你使用;(create retrieve update delete) 假設我們有一個User類 增加(插入): 對於flask的插入分為三步走的情況: 1:建立python 物件;也就

springMvc+AJAX+JSON的刪改

controller 層 package cn.et.springmvc.day6.controller; import java.io.IOException; import java.io.OutputStream; import java.util.List; import java

SpringMVC+Spring+HIbernate 簡單刪改例項

SpringMVC+Spring+HIbernate 簡單增刪改查例項 HIbernate配置mysql資料庫的方式 和 Structs+spring+HIbernate 是一樣的。  可以理解為SpringMVC 把

listview展示網路資料+網路圖片+資料庫刪改+fragment

MainActivity package com.bwie.renzhili; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import andr

Oracle-資料庫刪改基本操作

一、建立資料表 1).建立不存在的新表:  create table tname(   Data_Name Date_Type [default][預設值]  ); 2).建立已存在表的副本  create table emp1 as selec