Home Lập Trình Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

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

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

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

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>

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

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

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

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

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

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

Nhập code cho CustomerService

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

Nhập code cho CustomerService

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)

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

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

Database sau khi tạo

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

Chọn Thêm mới

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

Chọn Đăng ký

Exit mobile version