Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

2067

Bài viết được sự cho phép của tác giả Lê Hồng Kỳ

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate sẽ bao gồm 4 xử lý cơ bản đó là thêm (C), lấy dữ liệu (R), cập nhật dữ liệu (U) và xóa dữ liệu (D).

Trong những bài hướng dẫn trước, chúng tôi đã trình bày cách tạo một Web application với Spring MVC nhưng chưa có phần xử lý database. Và để xử lý database, chúng ta phải cần đến Hibernate.

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate – Các bước thực hiện

1/ Tạo một Maven Web Application Project

Các bạn có thể tạo mới một Project. Trong bài hướng dẫn này, chúng tôi sử dụng lại project của bài Hướng dẫn validation trong Spring MVC 5

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

2/ Mở file pom.xml và thêm dependency

<!-- Spring ORM -->
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.1.0.RELEASE</version>
</dependency>
<!-- Hibernate Core -->
<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.17.Final</version>
</dependency>
<!-- MySQL Server -->
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
</dependency>
Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Bài viết này sẽ hướng dẫn bạn cách cài đặt và cách sử dụng Transfer Object. >>> https://topdev.vn/blog/huong-dan-java-design-pattern-transfer-object/?utm_source=facebook&utm_medium=post&utm_campaign=topdev&utm_term=luan&utm_content=b_huong-dan-java-design-pattern-transfer-object

  Hibernate Batch Processing là gì? Batch Processing trong Hibernate

  Các lưu ý về strategy của GeneratedValue khi sử dụng hibernate

3/ Tạo một file tên AppContext để cấu hình Spring và Hibernate sử dụng Java code

Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Bài viết này sẽ hướng dẫn bạn cách cài đặt và cách sử dụng Transfer Object. >>> https://topdev.vn/blog/huong-dan-java-design-pattern-transfer-object/?utm_source=facebook&utm_medium=post&utm_campaign=topdev&utm_term=luan&utm_content=b_huong-dan-java-design-pattern-transfer-object

Nhập code cho AppContext

package vn.giasutinhoc.spring5mvc.config;

import java.util.Properties;
import javax.sql.DataSource;
import org.springframework.core.env.Environment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@PropertySource("classpath:database.properties")
@EnableTransactionManagement
@ComponentScan(basePackages = { "vn.giasutinhoc.spring5mvc" })
public class AppContext {

	@Autowired
	private Environment environment;

	@Bean
	public LocalSessionFactoryBean sessionFactory() {
		LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
		sessionFactory.setDataSource(dataSource());
		sessionFactory.setPackagesToScan(new String[] { "vn.giasutinhoc.spring5mvc.model" });
		sessionFactory.setHibernateProperties(hibernateProperties());
		return sessionFactory;
	}

	@Bean
	public DataSource dataSource() {
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
		dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
		dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
		dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
		return dataSource;
	}

	private Properties hibernateProperties() {
		Properties properties = new Properties();
		properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
		properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
		properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
		properties.put("hibernate.hbm2ddl.auto", environment.getRequiredProperty("hibernate.hbm2ddl.auto"));
		return properties;
	}

	@Bean
	public HibernateTransactionManager getTransactionManager() {
		HibernateTransactionManager transactionManager = new HibernateTransactionManager();
		transactionManager.setSessionFactory(sessionFactory().getObject());
		return transactionManager;
	}

}

Tham khảo việc làm Java Developer hấp dẫn trên TopDev

4/ Tạo file database.properties bên trong thư mục resources để cấu hình kết nối đến database

Chọn File -> chọn New -> chọn File

Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Bài viết này sẽ hướng dẫn bạn cách cài đặt và cách sử dụng Transfer Object. >>> https://topdev.vn/blog/huong-dan-java-design-pattern-transfer-object/?utm_source=facebook&utm_medium=post&utm_campaign=topdev&utm_term=luan&utm_content=b_huong-dan-java-design-pattern-transfer-object

Nhập database.properties tại File name -> chọn Finish

Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Bài viết này sẽ hướng dẫn bạn cách cài đặt và cách sử dụng Transfer Object. >>> https://topdev.vn/blog/huong-dan-java-design-pattern-transfer-object/?utm_source=facebook&utm_medium=post&utm_campaign=topdev&utm_term=luan&utm_content=b_huong-dan-java-design-pattern-transfer-object

Nhập code cho database.properties

jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/demoDB?useSSL=false
jdbc.username = root
jdbc.password = root
hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql = true
hibernate.format_sql = true
hibernate.hbm2ddl.auto = update
Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Bài viết này sẽ hướng dẫn bạn cách cài đặt và cách sử dụng Transfer Object. >>> https://topdev.vn/blog/huong-dan-java-design-pattern-transfer-object/?utm_source=facebook&utm_medium=post&utm_campaign=topdev&utm_term=luan&utm_content=b_huong-dan-java-design-pattern-transfer-object

5/ Tạo một entity tên Customer

Mở Customer.java trong package vn.giasutinhoc.spring5mvc.model và thay đổi code

package vn.giasutinhoc.spring5mvc.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;

@Entity
@Table(name = "customer")
public class Customer {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id")
	private int id;

	@Column(name = "first_name")
	private String firstName;

	@Column(name = "last_name")
	@NotNull(message = "Không được bỏ trống")
	@Size(min = 1, message = "không được bỏ trống")
	private String lastName;

	@Column(name = "free_passes")
	@NotNull(message = "không được bỏ trống")
	@Min(value = 0, message = "phải lớn hơn hoặc bằng 0")
	@Max(value = 10, message = "phải nhỏ hơn hoặc bằng 10")
	private Integer freePasses;

	@Column(name = "postal_code")
	@Pattern(regexp = "^[a-zA-Z0-9]{5}", message = "5 ký tự hoặc số")
	private String postalCode;

	@Column(name = "email")
	@NotNull(message = "không được bỏ trống")
	@Email(message = "Không đúng định dạng email! Vui lòng nhập lại email")
	private String email;

	public int getId() {
		return id;
	}

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

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

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

	public Integer getFreePasses() {
		return freePasses;
	}

	public void setFreePasses(Integer freePasses) {
		this.freePasses = freePasses;
	}

	public String getPostalCode() {
		return postalCode;
	}

	public void setPostalCode(String postalCode) {
		this.postalCode = postalCode;
	}

	public String getEmail() {
		return email;
	}

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

}

Các bạn chú ý những chỗ chúng tôi tô màu vàng và đóng khung đỏ

Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Bài viết này sẽ hướng dẫn bạn cách cài đặt và cách sử dụng Transfer Object. >>> https://topdev.vn/blog/huong-dan-java-design-pattern-transfer-object/?utm_source=facebook&utm_medium=post&utm_campaign=topdev&utm_term=luan&utm_content=b_huong-dan-java-design-pattern-transfer-object

6/ Tạo một class tên CustomerDAO

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

Nhập code cho CustomerService

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

7/ Tạo một class tên CustomerService

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

Nhập code cho CustomerService

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

8/ Mở CustomerController.java và thêm code (phần chúng tôi đóng khung đỏ)

9/ Mở customer-form.jsp và thay đổi code (những chỗ chúng tôi tô màu vàng như trong hình)

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

10/ Tạo một view tên list-customers.jsp bên trong thư mục views

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

Nhập code cho list-customers.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Danh sách khách hàng</title>
<link href="<c:url value="/resources/css/bootstrap.min.css" />"
	rel="stylesheet">
<script src="<c:url value="/resources/js/jquery-1.11.1.min.js" />"></script>
<script src="<c:url value="/resources/js/bootstrap.min.js" />"></script>
<%@ page isELIgnored="false"%>
</head>
<body>
	<div class="container">
		<div class="col-md-12">
			<h2>CRM - Customer Relationship Manager</h2>
			<hr />

			<input type="button" value="Thêm mới"
				onclick="window.location.href='showForm'; return false;"
				class="btn btn-primary" /> <br /> <br />
			<div class="panel panel-info">
				<div class="panel-heading">
					<div class="panel-title">Danh sách khách hàng</div>
				</div>
				<div class="panel-body">
					<div class="table-responsive">
						<table class="table table-striped table-bordered">
							<tr>
								<th>First Name</th>
								<th>Last Name</th>
								<th>Free Passes</th>
								<th>Postal Code</th>
								<th>Email</th>
								<th>Action</th>
							</tr>

							<!-- loop over and print our customers -->
							<c:forEach var="tempCustomer" items="${customers}">

								<!-- construct an "update" link with customer id -->
								<c:url var="updateLink" value="/customer/updateForm">
									<c:param name="customerId" value="${tempCustomer.id}" />
								</c:url>

								<!-- construct an "delete" link with customer id -->
								<c:url var="deleteLink" value="/customer/delete">
									<c:param name="customerId" value="${tempCustomer.id}" />
								</c:url>

								<tr>
									<td>${tempCustomer.firstName}</td>
									<td>${tempCustomer.lastName}</td>
									<td>${tempCustomer.freePasses}</td>
									<td>${tempCustomer.postalCode}</td>
									<td>${tempCustomer.email}</td>

									<td>
										<!-- display the update link --> <a href="${updateLink}">Cập
											nhật</a> | <a href="${deleteLink}"
										onclick="if (!(confirm('Bạn muốn xóa thông tin khách hàng này?'))) return false">Xóa</a>
									</td>

								</tr>

							</c:forEach>

						</table>
					</div>
				</div>
			</div>
		</div>

	</div>
</body>
</html>

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate – Build, Deploy và Run

1/ Tạo cơ sở dữ liệu tên demoDb

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

Database sau khi tạo

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

2/ Về cách build, deploy và run các bạn tham khảo bài Hướng dẫn tạo project sử dụng Spring MVC 5 với eclipse

3/ Kết quả khi chạy http://localhost:8080/Spring5MVCProject/customer/list

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

Chọn Thêm mới

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

Nhập đầy đủ thông tin

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

Chọn Đăng ký

Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate