简体   繁体   中英

How to Update and Delete Operation in Hibernate ,postgresql ,spring mvc

I am trying to make a crud web-app using hibernate and postgresql and spring mvc.

Problem when i edit then it will insert new records instead of update and when i delete then nothing operation perform. Please help me as i am not good enough in.

Project Structure snap shote

项目结构

1) when i edit employee abc age 25 to 27 it will add one more records with new Employee id insteade of update that employee(abc)

here is the snap shote 编辑中

2) when i delete employee xyz it take that employeeId but not delete operation perform . as given below

删除

EmployeeController.java

    package com.controller;

import com.bean.EmployeeBean;
import com.model.Employee;
import com.service.EmployeeService;
import com.sun.javafx.collections.MappingChange;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.StringArrayPropertyEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import java.util.*;

/**
 * Created by khan on 28/11/16.
 */
@Controller
public class EmployeeController {
    @Autowired
    private EmployeeService employeeService;

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView saveEmployee(@ModelAttribute("command") EmployeeBean employeeBean, BindingResult result) {
        Employee employee = prepareModel(employeeBean);
        employeeService.addEmployee(employee);
        return new ModelAndView("redirect:/add.html");
    }

    @RequestMapping(value = "/employees", method = RequestMethod.GET)
    public ModelAndView listEmployee() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("employees", prepareListofBean(employeeService.listEmployees()));
        return new ModelAndView("employeesList", map);
    }

    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public ModelAndView addEmployee(@ModelAttribute("command") EmployeeBean employeeBean, BindingResult result) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("employees", prepareListofBean(employeeService.listEmployees()));
        return new ModelAndView("addEmployee", map);
    }

    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public ModelAndView welcome() {
        return new ModelAndView("index");

    }

    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    public ModelAndView editEmployee(@ModelAttribute("command") EmployeeBean employeeBean,
                                     BindingResult result) {
        employeeService.deleteEmployee(prepareModel(employeeBean));
        Map<String, Object> model = new HashMap<String, Object>();
        model.put("employee", null);
        model.put("employees", prepareListofBean(employeeService.listEmployees()));
        return new ModelAndView("addEmployee", model);
    }

    @RequestMapping(value = "/edit", method = RequestMethod.GET)
    public ModelAndView deleteEmployee(@ModelAttribute("command") EmployeeBean employeeBean,
                                       BindingResult result) {
        Map<String, Object> model = new HashMap<String, Object>();
        model.put("employee", prepareEmployeebean(employeeService.getEmployee(employeeBean.getId())));
        model.put("employees", prepareListofBean(employeeService.listEmployees()));
        return new ModelAndView("addEmployee", model);
    }


    private EmployeeBean prepareEmployeebean(Employee employee) {
        EmployeeBean employeeBean = new EmployeeBean();
        employeeBean.setAddress(employee.getEmpAddress());
        employeeBean.setAge(employee.getEmpAge());
        employeeBean.setSalary(employee.getSalary());
        employeeBean.setName(employee.getEmpName());
        employeeBean.setId(employee.getEmpId());
        return employeeBean;
    }

    private Employee prepareModel(EmployeeBean employeeBean) {
        Employee employee = new Employee();
        employee.setEmpAddress(employeeBean.getAddress());
        employee.setEmpAge(employeeBean.getAge());
        employee.setEmpName(employeeBean.getName());
        employee.setSalary(employeeBean.getSalary());
        employee.setEmpId(null);
        return employee;
    }

    private List<EmployeeBean> prepareListofBean(List<Employee> employees) {
        List<EmployeeBean> employeeBeen = null;
        if (employees != null && !employees.isEmpty()) {
            employeeBeen = new ArrayList<EmployeeBean>();
            EmployeeBean bean = null;
            for (Employee employee : employees) {
                bean = new EmployeeBean();
                bean.setName(employee.getEmpName());
                bean.setAge(employee.getEmpAge());
                bean.setSalary(employee.getSalary());
                bean.setAddress(employee.getEmpAddress());
                bean.setId(employee.getEmpId());
                employeeBeen.add(bean);
            }
        }
        return employeeBeen;
    }

}

EmployeeDao.java interface

    package com.dao;

import com.model.Employee;

import java.util.List;


/**
 * Created by khan on 28/11/16.
 */
public interface EmployeeDao {
    public List<Employee> listEmployees();

    public void addEmployee(Employee employee);

    public Employee getEmployee(int empid);

    public void deleteEmployee(Employee employee);
}

EmployeeDaoImpl.java

    package com.daoImpl;

import com.bean.EmployeeBean;
import com.dao.EmployeeDao;
import com.model.Employee;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;


/**
 * Created by khan on 28/11/16.
 */
@Repository
public class EmployeeDaoImpl implements EmployeeDao {
    @Autowired
    private SessionFactory sessionFactory;

    @SuppressWarnings("unchecked")
    public List<Employee> listEmployees() {
        Transaction transaction = sessionFactory.getCurrentSession().beginTransaction();
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Employee.class);
        List<Employee> list = (List<Employee>) criteria.list();
        transaction.commit();
        return list;
    }

    public void addEmployee(Employee employee) {
        Transaction transaction = sessionFactory.getCurrentSession().beginTransaction();
        sessionFactory.getCurrentSession().saveOrUpdate(employee);
        transaction.commit();
    }

    public Employee getEmployee(int empid) {
        Transaction transaction = sessionFactory.getCurrentSession().beginTransaction();
        Employee employee = (Employee) sessionFactory.getCurrentSession().get(Employee.class, empid);
        transaction.commit();
        return employee;
    }

    public void deleteEmployee(Employee employee) {
        Transaction transaction = sessionFactory.getCurrentSession().beginTransaction();
        sessionFactory.getCurrentSession().createQuery("DELETE FROM Employee WHERE empid = " + employee.getEmpId()).executeUpdate();
        transaction.commit();

    }
}

EmployeeService.java interface

    package com.service;

import com.dao.EmployeeDao;
import com.model.Employee;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by khan on 28/11/16.
 */
public interface EmployeeService {
    public void addEmployee(Employee employee);

    public List<Employee> listEmployees();

    public Employee getEmployee(int empid);

    public void deleteEmployee(Employee employee);
}

EmployeeServiceImpl.java

 package com.serviceImpl;

import com.dao.EmployeeDao;
import com.model.Employee;
import com.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created by khan on 28/11/16.
 */
@Service("EmployeeService")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class EmployeeServiceImpl implements EmployeeService {
    @Autowired
    private EmployeeDao employeeDao;

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void addEmployee(Employee employee) {
        employeeDao.addEmployee(employee);
    }

    public List<Employee> listEmployees() {
        return (List<Employee>) employeeDao.listEmployees();
    }

    public Employee getEmployee(int empid) {
        return employeeDao.getEmployee(empid);
    }

    public void deleteEmployee(Employee employee) {
        employeeDao.deleteEmployee(employee);

    }
}

Employee.java

package com.model;

import javax.persistence.*;

/**
 * Created by khan on 28/11/16.
 */
@Entity
@Table(name = "Employee")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "empid")
    private Integer empId;
    @Column(name = "empage")
    private Integer empAge;
    @Column(name = "empname")
    private String empName;
    @Column(name = "empaddress")
    private String empAddress;
    @Column(name = "salary")
    private Long salary;

    public Integer getEmpId() {
        return empId;
    }

    public void setEmpId(Integer empId) {
        this.empId = empId;
    }

    public Integer getEmpAge() {
        return empAge;
    }

    public void setEmpAge(Integer empAge) {
        this.empAge = empAge;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public String getEmpAddress() {
        return empAddress;
    }

    public void setEmpAddress(String empAddress) {
        this.empAddress = empAddress;
    }

    public Long getSalary() {
        return salary;
    }

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

EmployeeBean.java

package com.bean;

import org.omg.CORBA.INTERNAL;

/**
 * Created by khan on 28/11/16.
 */
public class EmployeeBean {
    private Integer id;
    private Integer age;
    private String name;
    private Long salary;
    private String address;

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getSalary() {
        return salary;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

addEmployee.jsp page

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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=ISO-8859-1">
  <title>Spring MVC Form Handling</title>
 </head>
 <body>
  <h2>Add Employee Data</h2>
  <form:form method="POST" action="${pageContext.request.contextPath}/save.html">
      <table>
       <tr>
           <td><form:label path="id">Employee ID:</form:label></td>
           <td><form:input path="id" value="${employee.id}" readonly="true"/></td>
       </tr>
       <tr>
           <td><form:label path="name">Employee Name:</form:label></td>
           <td><form:input path="name" value="${employee.name}"/></td>
       </tr>
       <tr>
           <td><form:label path="age">Employee Age:</form:label></td>
           <td><form:input path="age" value="${employee.age}"/></td>
       </tr>
       <tr>
           <td><form:label path="salary">Employee Salary:</form:label></td>
           <td><form:input path="salary" value="${employee.salary}"/></td>
       </tr>

       <tr>
           <td><form:label path="address">Employee Address:</form:label></td>
                    <td><form:input path="address" value="${employee.address}"/></td>
       </tr>
          <tr>
         <td colspan="2"><input type="submit" value="Submit"/></td>
        </tr>
   </table>
  </form:form>

  <c:if test="${!empty employees}">
  <h2>List Employees</h2>
 <table align="left" border="1">
  <tr>
   <th>Employee ID</th>
   <th>Employee Name</th>
   <th>Employee Age</th>
   <th>Employee Salary</th>
   <th>Employee Address</th>
           <th>Actions on Row</th>
  </tr>

  <c:forEach items="${employees}" var="employee">
   <tr>
    <td><c:out value="${employee.id}"/></td>
    <td><c:out value="${employee.name}"/></td>
    <td><c:out value="${employee.age}"/></td>
    <td><c:out value="${employee.salary}"/></td>
    <td><c:out value="${employee.address}"/></td>
    <td align="center"><a href="edit.html?id=${employee.id}">Edit</a> | <a href="delete.html?id=${employee.id}">Delete</a></td>
   </tr>
  </c:forEach>
 </table>
</c:if>
 </body>
</html>

employeeList.jsp page

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>All Employees</title>
</head>
<body>
<h1>List Employees</h1>
<h3><a href="add.html">Add More Employee</a></h3>

<c:if test="${!empty employees}">
 <table align="left" border="1">
  <tr>
   <th>Employee ID</th>
   <th>Employee Name</th>
   <th>Employee Age</th>
   <th>Employee Salary</th>
   <th>Employee Address</th>
  </tr>

  <c:forEach items="${employees}" var="employee">
   <tr>
    <td><c:out value="${employee.id}"/></td>
    <td><c:out value="${employee.name}"/></td>
    <td><c:out value="${employee.age}"/></td>
    <td><c:out value="${employee.salary}"/></td>
    <td><c:out value="${employee.address}"/></td>
   </tr>
  </c:forEach>
 </table>
</c:if>
</body>
</html>

index.jsp page

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
    <title>Spring3MVC with Hibernate3 CRUD Example using Annotations</title>
  </head>
  <body>
    <h2>Spring3MVC with Hibernate3 CRUD Example using Annotations</h2>
    <h2>1. <a href="employees.html">List of Employees</a></h2>
    <h2>2. <a href="add.html">Add Employee</a></h2>
  </body>
</html>

spring-servlet.xml file

    <beans xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <context:component-scan base-package="com"></context:component-scan>
    <tx:annotation-driven transaction-manager="hibernateTransactionManager"></tx:annotation-driven>

    <bean id="viewResolver"

          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"

                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>


    <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">

        <property name="driverClassName" value="org.postgresql.Driver"></property>

        <property name="url" value="jdbc:postgresql://localhost:5433/waseem"></property>
        <property name="username" value="postgres"></property>
        <property name="password" value="coviam"></property>
    </bean>

    <bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" id="sessionFactory">

        <property name="dataSource" ref="dataSource"></property>
        <property name="annotatedClasses">

            <list>
                <value>com.model.Employee</value>
            </list>

        </property>
        <property name="hibernateProperties">
            <props>

                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.current_session_context_class">thread</prop>
            </props>

        </property>

    </bean>

    <bean class="org.springframework.orm.hibernate4.HibernateTransactionManager" id="hibernateTransactionManager">

        <property name="sessionFactory" ref="sessionFactory"></property>

    </bean>

</beans>

web.xml file

<web-app version="2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

pom.xml file

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com</groupId>
  <artifactId>waseem</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>waseem Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <org.springframework.version>3.1.1.RELEASE</org.springframework.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>


    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-oxm</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc-portlet</artifactId>
      <version>${org.springframework.version}</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${org.springframework.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>9.4-1206-jdbc42</version>
    </dependency>
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.2.2</version>
    </dependency>
    <dependency>
      <groupId>commons-pool</groupId>
      <artifactId>commons-pool</artifactId>
      <version>1.6</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>4.0.1.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>4.2.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate.common</groupId>
      <artifactId>hibernate-commons-annotations</artifactId>
      <version>4.0.1.Final</version>
      <classifier>tests</classifier>
    </dependency>
    <dependency>
      <groupId>org.hibernate.javax.persistence</groupId>
      <artifactId>hibernate-jpa-2.0-api</artifactId>
      <version>1.0.1.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>4.0.1.Final</version>
    </dependency>
    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>1.0.0.GA</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.4</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.logging</groupId>
      <artifactId>jboss-logging</artifactId>
      <version>3.1.0.CR2</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.6.4</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>waseem</finalName>
  </build>
</project>

Thanks for help me in advance

Here problem occurs in ControllerEmployee class in prepareModel(EmployeeBean employeebean) method

 private Employee prepareModel(EmployeeBean employeeBean) {
        Employee employee = new Employee();
        employee.setEmpAddress(employeeBean.getAddress());
        employee.setEmpAge(employeeBean.getAge());
        employee.setEmpName(employeeBean.getName());
        employee.setSalary(employeeBean.getSalary());
        employee.setEmpId(null);
        return employee;

instead of this write this one change employee.setEmpId(employeeBean.getId());

here full changed method

private Employee prepareModel(EmployeeBean employeeBean) {
        Employee employee = new Employee();
        employee.setEmpAddress(employeeBean.getAddress());
        employee.setEmpAge(employeeBean.getAge());
        employee.setEmpName(employeeBean.getName());
        employee.setSalary(employeeBean.getSalary());
        employee.setEmpId(employeeBean.getId());
        return employee;

By doing this ( edit and delete ) link working properly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM