CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

CRUD trong ứng dụng Spring Web MVC với Hibernate-Oracle Database

Đăng lúc: 11:02 AM - 25/10/2023 bởi Charles Chung - 975

Trong bài viết này tôi sẽ hướng dẫn thực hiện các thao tác CRUD trong ứng dụng Spring Web MVC với Hibernate và cơ sở dữ liệu Oracle

1. Kiến thức cần có

  • Căn bản về Oracle database, cách cài đặt cơ sở dữ liệu Oracle, công cụng SQL Developer, tạo database xem ở đây
  • Lập trình Java Core
  • HTML - CSS - JavaScript
  • JSP và Servlet

2. Các bước tạo ứng dụng Spring Hibernate và thực hiện các thao tác CRUD

Bước 1: Tạo bảng và nhập dữ liệu

  • Mở SQL Developer tạo bảng như hình dưới

 

Bước 2: Tạo Dynamic Web Project

  • Khởi động Eclispe IDE -> vào menu File -> New -> Dynamic Web Project -> Nhập các thông số như hình dưới

  • Tiếp tục kích vào Next -> Next -> Chọn Generate web.xml deyployment desciptor -> kích finish như hình

Bước 3: Convert sang Maven Project

  • Kích chuột phải vào Project vừa tạo -> Configure -> Convert to Maven Project -> Finish

Bước 4: Khai báo các Maven Dependencies cần thiết

  • Mở file pom.xml và cấu hình các Maven Dependencies gồm: spring web, web mvc, spring-orm, hibernate, jdbc oracle, servlet api, jstl

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

<scope>provided</scope>

</dependency>

<!--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-web -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>5.3.18</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

<version>5.3.18</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>5.4.26.Final</version>

</dependency>

<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc10 -->

<dependency>

<groupId>com.oracle.database.jdbc</groupId>

<artifactId>ojdbc10</artifactId>

<version>19.20.0.0</version>

</dependency>

Bước 5: Cấu hình ứng dụng Spring Web Mvc

  • Trong thư mục WEB-INF tạo thư mục views và tệp tin spring-servlet.xml như hình dưới

<?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:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

 

<!-- chỉ ra các package chứa các lớp java được đăng như các bean -->

<context:component-scan

base-package="controllers,dao" />

<!-- chỉ tìm kiếm các bean trong cùng context application được định nghĩa -->

<context:annotation-config />

<!-- mặc định các basic components được ủy quyền gửi request tới các controller -->

<mvc:annotation-driven />

 

<!-- cấu hình bean xác định view sẽ được sinh ra (thư mục chứa các view, đuôi tệp tin view) -->

<bean id="viewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver"

p:prefix="/WEB-INF/views/" p:suffix=".jsp" />

 

<!-- Tạo đối tượng bean dataSource kết nối database oracle -->

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

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>

<property name="url" value="jdbc:oracle:thin:@localhost:1521:bkap"></property>

<property name="username" value="system"></property>

<property name="password" value="1234$"></property>

</bean>

 

<!-- Tạo đối tượng bean sessionFactory cấu hình Hibernate -->

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

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

<property name="packagesToScan" value="entities"></property>

<property name="hibernateProperties">

<props>

<prop key="hibernate.current_session_context_class">thread</prop>

<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>

</props>

</property>

</bean>

</beans>

  • Mở tệp web.xml và cấu hình vào bên trong thẻ <web-app> như sau:

<!-- Cấu hình UTF-8 khi request hoặc response -->

<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>

<!-- Cấu hình Spring MVC DispatcherServlet as front controller -->

<servlet>

<servlet-name>spring</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/spring-servlet.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>spring</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

Bước 6: Tạo các tệp tin theo cấu trúc mô tả sau

  • Tạo gói entities với lớp Student

package entities;

import java.io.Serializable;

import java.util.Date;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.Table;

import javax.persistence.Temporal;

import javax.persistence.TemporalType;

 

import org.springframework.format.annotation.DateTimeFormat;

 

@Entity

@Table(name = "students")

public class Student implements Serializable {

 

// @Id

// @GeneratedValue(strategy = GenerationType.IDENTITY) // tự động tăng

// private int studentId;

@Id

private String studentId;

private String fullName;

private int gender;

@Temporal(TemporalType.DATE)

@DateTimeFormat(pattern = "dd/MM/yyyy")

private Date birthDay;

private String email;

private String phone;

private String address;

private int active;

 

public Student() {

// TODO Auto-generated constructor stub

}

 

public String getStudentId() {

return studentId;

}

 

public Student(String studentId, String fullName, int gender, Date birthDay, String email, String phone,

String address, int active) {

super();

this.studentId = studentId;

this.fullName = fullName;

this.gender = gender;

this.birthDay = birthDay;

this.email = email;

this.phone = phone;

this.address = address;

this.active = active;

}

 

public void setStudentId(String studentId) {

this.studentId = studentId;

}

 

public String getFullName() {

return fullName;

}

 

public void setFullName(String fullName) {

this.fullName = fullName;

}

 

public int getGender() {

return gender;

}

 

public void setGender(int gender) {

this.gender = gender;

}

 

public Date getBirthDay() {

return birthDay;

}

 

public void setBirthDay(Date birthDay) {

this.birthDay = birthDay;

}

 

public String getEmail() {

return email;

}

 

public void setEmail(String email) {

this.email = email;

}

 

public String getPhone() {

return phone;

}

 

public void setPhone(String phone) {

this.phone = phone;

}

 

public String getAddress() {

return address;

}

 

public void setAddress(String address) {

this.address = address;

}

 

public int getActive() {

return active;

}

 

public void setActive(int active) {

this.active = active;

}

}

  • Tạo gói dao với lớp StudentDAO

package dao;

 

import java.util.List;

import javax.persistence.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

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

import org.springframework.stereotype.Repository;

import entities.Student;

 

@Repository

public class StudentDAO {

@Autowired

SessionFactory sessionFactory;

 

public StudentDAO() {

 

}

 

// Lấy tất cả sinh viên

public List<Student> getAll() {

Session session = sessionFactory.openSession();

List result = session.createQuery("from Student").getResultList();

return result;

}

 

// Tìm kiếm theo tên

public List<Student> search(String name) {

Session session = sessionFactory.openSession();

Query query = session.createQuery("from Student where fullName like :name");

query.setParameter("name", "%" + name + "%");

return query.getResultList();

}

 

// Insert sinh viên vào database

public void insert(Student student) {

Session session = sessionFactory.getCurrentSession();

session.beginTransaction();

session.save(student);

session.getTransaction().commit();

}

 

// Update lại thông tin sinh viên

public void update(Student student) {

Session session = sessionFactory.getCurrentSession();

session.beginTransaction();

session.update(student);

session.getTransaction().commit();

}

 

// Xóa sinh viên

public void delete(String id) {

Session session = sessionFactory.getCurrentSession();

session.beginTransaction();

var st = session.get(Student.class, id);

session.remove(st);

session.getTransaction().commit();

}

 

// Lấy sinh viên theo id

public Student getById(String id) {

Session session = sessionFactory.getCurrentSession();

session.beginTransaction();

Student st = session.get(Student.class, id);

session.getTransaction().commit();

return st;

}

}

  • Tạo gói controllers với lớp StudentController

package controllers;

 

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

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

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.bind.annotation.RequestParam;

import dao.StudentDAO;

import entities.Student;

 

@Controller

public class StudentController {

@Autowired

StudentDAO studentDAO;

@RequestMapping(value= {"/","students"},method = RequestMethod.GET)

public String index(Model model) {

model.addAttribute("students",studentDAO.getAll());

return "index";

}

@RequestMapping(value= "addstudent",method = RequestMethod.GET)

public String create(Model model) {

var student=new Student();

model.addAttribute("student",student);

return "create";

}

@RequestMapping(value= "save",method = RequestMethod.POST)

public String save(@ModelAttribute("student") Student student, Model model) {

try {

studentDAO.insert(student);

}catch(Exception ex) {

model.addAttribute("error",ex.getMessage());

model.addAttribute("student",student);

return "create";

}

return "redirect:/students";

}

 

@RequestMapping(value= "edit",method = RequestMethod.GET)

public String edit(@RequestParam("id") String id,Model model) {

var student=studentDAO.getById(id);

model.addAttribute("student",student);

return "edit";

}

@RequestMapping(value= "update",method = RequestMethod.POST)

public String update(@ModelAttribute("student") Student student, Model model) {

try {

studentDAO.update(student);

}catch(Exception ex) {

model.addAttribute("error",ex.getMessage());

model.addAttribute("student",student);

return "create";

}

return "redirect:/students";

}

@RequestMapping(value= "search",method = RequestMethod.POST)

public String update(String searchname, Model model) {

model.addAttribute("students",studentDAO.search(searchname));

return "index";

}

@RequestMapping(value= "delete",method = RequestMethod.GET)

public String delete(@RequestParam("id") String id) {

studentDAO.delete(id);

return "redirect:/students";

}

}

  • Tạo thư mục views trong WEB-INF với các tệp index.jsp, create.jsp, edit.jsp
  • Tệp 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>

<meta charset="UTF-8">

<title>CRUD Spring Hibernate with Oracle Database</title>

<link rel="stylesheet"

href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">

</head>

<body>

<div class="container-fluid">

<h1>DANH SÁCH SINH VIÊN</h1>

<form action="search" method="post">

Nhập tên cần tìm <input type="text" name="searchname"/> <button class="btn btn-info"> Tìm </button> <a class="btn btn-primary" href="addstudent">Thêm mới</a>

</form><hr />

<table class="table table-bordered">

<tr>

<th> SV</th>

<th>Họ tên</th>

<th>Ngày sinh</th>

<th>Giới tính</th>

<th>Email</th>

<th>Điện thoại</th>

<th>Địa chỉ</th>

<th>Tình trạng</th>

<th></th>

</tr>

<c:forEach var="s" items="${students}">

<tr>

<td>${s.studentId}</td>

<td>${s.fullName}</td>

<td>${s.birthDay}</td>

<td>

<c:choose>

<c:when test="${s.gender==1}">Nam</c:when>

<c:otherwise>Nữ</c:otherwise>

</c:choose>

</td>

<td>${s.email}</td>

<td>${s.phone}</td>

<td>${s.address}</td>

<td>

<c:choose>

<c:when test="${s.active==1}">Đang học</c:when>

<c:otherwise>Dừng</c:otherwise>

</c:choose>

</td>

<td>

<a onclick="return confirm('Bạn có muốn xóa không?')" class="btn btn-danger" href="delete?id=${s.studentId}">Xóa</a>

<a class="btn btn-success" href="edit?id=${s.studentId}">Sửa</a>

</td>

</tr>

</c:forEach>

</table>

</div>

</body>

</html>

  • Tệp create.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Thêm mới sinh viên</title>

<link rel="stylesheet"

href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">

</head>

<body>

<div class="container">

<h1>Thêm mới sinh viên</h1>

<span style="color: red">${error}</span>

<f:form action="save" method="post" modelAttribute="student">

<table class="table">

<tr>

<td> số</td>

<td><f:input path="studentId" /></td>

</tr>

<tr>

<td>Họ tên</td>

<td><f:input path="fullName" /></td>

</tr>

<tr>

<td>Ngày sinh</td>

<td><f:input path="birthDay"/></td>

</tr>

<tr>

<td>Giới tính</td>

<td>

<select name="gender" id="gender">

<option value="1">Nam</option>

<option value="0">Nữ</option>

</select>

</td>

</tr>

<tr>

<td>Email</td>

<td><f:input path="email" /></td>

</tr>

<tr>

<td>Điện thoại</td>

<td><f:input path="phone" /></td>

</tr>

<tr>

<td>Địa chỉ</td>

<td><f:input path="address" /></td>

</tr>

<tr>

<td>Tình trạng</td>

<td>

<select name="active" id="active">

<option value="1">Đang học</option>

<option value="0">Dừng</option>

</select>

</td>

</tr>

<tr>

<td colspan="2">

<button class="btn btn-primary">Lưu</button>

</td>

</tr>

</table>

</f:form>

</div>

</body>

</html>

  • Tệp edit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Sửa sinh viên</title>

<link rel="stylesheet"

href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">

</head>

<body>

<div class="container">

<h1>Sửa sinh viên</h1>

<f:form action="update" method="post" modelAttribute="student">

<table class="table">

<tr>

<td> số</td>

<td><f:hidden path="studentId"/>${student.studentId}</td>

</tr>

<tr>

<td>Họ tên</td>

<td><f:input path="fullName"/></td>

</tr>

<tr>

<td>Ngày sinh</td>

<td><f:input path="birthDay"/></td>

</tr>

<tr>

<td>Giới tính</td>

<td>

<select name="gender" id="gender">

<c:if test="${student.gender==1}">

<option selected value="1">Nam</option>

<option value="0">Nữ</option>

</c:if>

<c:if test="${student.gender==0}">

<option value="1">Nam</option>

<option selected value="0">Nữ</option>

</c:if>

</select>

</td>

</tr>

<tr>

<td>Email</td>

<td><f:input path="email"/></td>

</tr>

<tr>

<td>Điện thoại</td>

<td><f:input path="phone"/></td>

</tr>

<tr>

<td>Địa chỉ</td>

<td><f:input path="address"/></td>

</tr>

<tr>

<td>Tình trạng</td>

<td>

<select name="active" id="active">

<c:if test="${student.active==1}">

<option selected value="1">Đang học</option>

<option value="0">Dừng</option>

</c:if>

<c:if test="${student.active==0}">

<option value="1">Đang học</option>

<option selected value="0">Dừng</option>

</c:if>

</select>

</td>

</tr>

<tr>

<td colspan="2">

<button class="btn btn-primary"> Cập nhật </button>

</td>

</tr>

</table>

</f:form>

</div>

</body>

</html>

 

Bước 7: Run application

  • Kích chuột phải vào project chọn Run As -> Run on Server -> Tomcat v9.0

 

Kích để tải source code bài CRUD trong ứng dụng Spring Web MVC với Hibernate-Oracle Database

Training online liên hệ: Charles Chung

Video

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ