

Tạo bảng categories:
create table categories(
categoryId int GENERATED AS IDENTITY primary key,
categoryName nvarchar2(100) not null unique,
categoryStatus number default 1
);
File > New > Other > Web > Dynamic Web Project
Convert project về maven project để quản lý các thư viện của dự án trong file pom.xml
Click phải vào project > Configure > Convert to Maven Project > Finish
spring-webmvc,spring-orm,hibernate-core,hibernate-entitymanager,ojdbc8,jstl,javax.servlet-api:
file pom.xml:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>CRUDSpringMVC</groupId>
<artifactId>CRUDSpringMVC</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.18</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.24</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.1.7.Final</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.14.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.9.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>17</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
</plugin>
</plugins>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>CRUDSpringMVC</display-name>
<servlet>
<servlet-name>CRUDSpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/spring-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CRUDSpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Tạo file spring-config.xml trong thư mục: /WEB-INF/config/
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.mosoftvn.crud_spring_mvc" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:CrmDB"></property>
<property name="username" value="system"></property>
<property name="password" value="123456"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="packagesToScan" value="com.mosoftvn.crud_spring_mvc.entities"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</prop>
</props>
</property>
</bean>
</beans>
Bước 7: Tạo các class entity:
trong src/main/java tạo package com.mosoftvn.crud_spring_mvc tạo thêm package con trong package vừa tạo com.mosoftvn.crud_spring_mvc.entities
Tạo class Category:
package com.mosoftvn.crud_spring_mvc.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.GenerationType;
@Entity
@Table(name = "categories")
public class Category {
@Id
@Column(name = "categoryId")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer categoryId;
@Column(name = "categoryName")
private String categoryName;
@Column(name = "categoryStatus")
private Boolean categoryStatus;
public Category() {
// TODO Auto-generated constructor stub
}
public Category(Integer categoryId, String categoryName, Boolean categoryStatus) {
super();
this.categoryId = categoryId;
this.categoryName = categoryName;
this.categoryStatus = categoryStatus;
}
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public Boolean getCategoryStatus() {
return categoryStatus;
}
public void setCategoryStatus(Boolean categoryStatus) {
this.categoryStatus = categoryStatus;
}
}
trong src/main/java tạị package com.mosoftvn.crud_spring_mvc tạo thêm package con com.mosoftvn.crud_spring_mvc.dao:
CategoryDAO:
package com.mosoftvn.crud_spring_mvc.dao;
import java.util.List;
import com.mosoftvn.crud_spring_mvc.entities.Category;
public interface CategoryDAO {
public List<Category> getAll();
public Boolean create(Category category);
public Category find(Integer categoryID);
public Boolean update(Category category);
public Boolean delete(Integer categoryID);
}
Tại package dao. tạo thêm class CategoryDAOImp:
package com.mosoftvn.crud_spring_mvc.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.mosoftvn.crud_spring_mvc.entities.Category;
@Repository
public class CategoryDAOImpl implements CategoryDAO {
@Autowired
private SessionFactory sessionFactory;
@Override
public List<Category> getAll() {
// TODO Auto-generated method stub
Session session = sessionFactory.openSession();
try {
List list = session.createQuery("from Category").list();
return list;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
session.close();
}
return null;
}
@Override
public Boolean create(Category category) {
// TODO Auto-generated method stub
Session session = sessionFactory.openSession();
try {
session.beginTransaction();
session.save(category);
session.getTransaction().commit();
return true;
} catch (Exception e) {
// TODO: handle exception
} finally {
session.close();
}
return false;
}
@Override
public Category find(Integer categoryID) {
Session session = sessionFactory.openSession();
try {
Category category = session.get(Category.class,categoryID);
return category;
} catch (Exception e) {
// TODO: handle exception
} finally {
session.close();
}
return null;
}
@Override
public Boolean delete(Integer categoryID) {
Session session = sessionFactory.openSession();
try {
session.beginTransaction();
session.delete(find(categoryID));
session.getTransaction().commit();
return true;
} catch (Exception e) {
// TODO: handle exception
session.getTransaction().rollback();
} finally {
session.close();
}
return null;
}
@Override
public Boolean update(Category category) {
Session session = sessionFactory.openSession();
try {
session.beginTransaction();
session.update(category);
session.getTransaction().commit();
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
session.getTransaction().rollback();
} finally {
session.close();
}
return false;
}
}
trong src/main/java tại package com.mosoftvn.crud_spring_mvc tạo thêm package con trong package vừa tạo com.mosoftvn.crud_spring_mvc.controllers
CategoryController:
package com.mosoftvn.crud_spring_mvc.controllers;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.mosoftvn.crud_spring_mvc.dao.CategoryDAO;
import com.mosoftvn.crud_spring_mvc.entities.Category;
import net.bytebuddy.matcher.ModifierMatcher.Mode;
@Controller
public class CategoryControllers {
@Autowired
private CategoryDAO categoryDAO;
@RequestMapping(value = "/")
public String index(Model model) {
List<Category> list = categoryDAO.getAll();
model.addAttribute("list",list);
return "category/index";
}
@GetMapping(value = "/addCategory")
public String add(Model model) {
Category category = new Category();
model.addAttribute("category", category);
return "category/add";
}
@PostMapping(value = "/insertCategory")
public String save(@ModelAttribute("category")Category category,Model model) {
boolean check = categoryDAO.create(category);
if(check) {
return "redirect:/";
}
return "category/add";
}
@GetMapping("/deleteCategory/{id}")
public String delete(@PathVariable String id,RedirectAttributes redirectAttrs) {
if(categoryDAO.delete(Integer.parseInt(id))) {
redirectAttrs.addFlashAttribute("success", "Xóa thành công");
return "redirect:/";
}
return "redirect:/";
}
@GetMapping("/editCategory/{id}")
public String edit(@PathVariable Integer id,Model model) {
Category category = categoryDAO.find(id);
model.addAttribute("category", category);
return "category/edit";
}
@PostMapping(value = "/updateCategory")
public String update(@ModelAttribute("category") Category category,RedirectAttributes redirectAttrs) {
if(categoryDAO.update(category)) {
redirectAttrs.addFlashAttribute("success", "Cập nhậtthành công");
return "redirect:/";
}
return "redirect:/";
}
}
Trong thư mục wepapp tạo thư mục views/category
lần lượt tạo các view trong thư mục đó:
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" >
</head>
<body>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<c:if test="${!empty success}">
<div class="alert alert-primary" role="alert">
<strong>${success}</strong>
</div>
</c:if>
<table class="table">
<thead>
<tr>
<th>STT</th>
<th>Name</th>
<th>Status</th>
<th></th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="c" varStatus="loop">
<tr>
<td scope="row">${loop.count}</td>
<td>${c.categoryName}</td>
<td>${c.categoryStatus ? 'Active' :'Hiden'}</td>
<td>
<a href="deleteCategory/${c.categoryId}" class="btn btn-danger">Delete</a>
<a href="editCategory/${c.categoryId}" class="btn btn-primary">Edit</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<a href="addCategory" class="btn btn-success">Thêm mới</a>
</div>
</div>
</div>
</body>
</html>
add.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" >
</head>
<body>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<form:form action="insertCategory" method="POST" modelAttribute="category">
<div class="form-group">
<label for="exampleInputEmail1">Category Name</label>
<form:input type="text" path="categoryName" class="form-control"/>
</div>
<div class="form-group">
<label for="exampleInputEmail1">Category Status</label>
<div>
<div class="form-check form-check-inline">
<form:radiobutton class="form-check-input" path="categoryStatus" checked="checked" value="1" />
<label class="form-check-label" for="inlineRadio1">Active</label>
</div>
<div class="form-check form-check-inline">
<form:radiobutton class="form-check-input" path="categoryStatus" value="0" />
<label class="form-check-label" for="inlineRadio2">Hidden</label>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Add</button>
</form:form>
</div>
</div>
</div>
</body>
</html>
edit.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<c:set var="baseURL" value="${pageContext.request.localName}"/>
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" >
</head>
<body>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<form:form action="../updateCategory" method="POST" modelAttribute="category">
<div class="form-group">
<label for="exampleInputEmail1">Category Name</label>
<form:input type="text" path="categoryName" class="form-control"/>
<form:input path="categoryId" readonly="true" type="hidden"/>
</div>
<div class="form-group">
<label for="exampleInputEmail1">Category Status</label>
<div>
<div class="form-check form-check-inline">
<form:radiobutton class="form-check-input" path="categoryStatus" checked="${category.categoryStatus ? 'checked': ''}" value="1" />
<label class="form-check-label" for="inlineRadio1">Active</label>
</div>
<div class="form-check form-check-inline">
<form:radiobutton class="form-check-input" path="categoryStatus" value="0" checked ="${!category.categoryStatus ? 'checked': ''}"/>
<label class="form-check-label" for="inlineRadio2">Hidden</label>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Update</button>
</form:form>
</div>
</div>
</div>
</body>
</html>
Cấu trúc dự án :
Spring MVC Custom Validation- Hướng dẫn validate file multipart file, custome anotation validate, validate file không rỗng , validate định dạng file.....
Read MoreSử dụng i18n Internationalization(Quốc tế hóa) làm đa ngôn ngữ trong ứng dụng web với Spring MVC
Read MoreTải giao diện Admin LTE 2 bản rút gọn nhẹ làm trang quản trị cho ứng dụng web ...............
Read MoreHướng dẫn CRUD Spring WebMVC vs Hibernate phần 2 (Quản lý sản phẩm), CRUD có upload image và có quan hệ khóa ngoại
Read MoreHướng dẫn upload file trong spring webmvc sử dụng common-io, common-fileupload ...
Read MoreHướng dẫn validate form trong springMVC sử dụng javax-validate
Read MoreLà một framework phát triển ứng dụng phổ biến nhất cho ứng dụng doanh nghiệp trong Java Là một nền tảng Java mã nguồn mở. Được viết đầu tiên bởi Rod Johnson và được phát hành lần đầu dưới phiên bản Apache 2.0 vào tháng 6 năm 2003
Read More