🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
Book entity using Hibernate 6.4 and a MySQL database.Overview of the Technologies
JSP (JavaServer Pages)
- Role: Presentation Layer
- Function: Allows embedding of Java code directly within HTML to create dynamic content.
- Benefits: Simplifies the development of web pages with dynamic content.
Servlets
- Role: Controller Layer
- Function: Handles HTTP requests and responses, connecting the presentation layer to the business logic.
- Benefits: Provides a robust and scalable way to handle user requests and server responses.
Hibernate
- Role: Persistence Layer
- Function: A powerful ORM (Object-Relational Mapping) tool that facilitates interaction with the database.
- Benefits: Simplifies database operations, improving development speed, maintainability, and portability.
MVC Pattern
In this example, we will follow the Model-View-Controller (MVC) pattern to organize the codebase:
- Model: Represents the data and the rules of the application. In Java, this is usually a POJO (Plain Old Java Object) annotated to interact with a database using Hibernate.
- View: The end-user interface, typically handled by JSP files that generate the HTML sent to the user's browser.
- Controller: Processes user input from the View, updates the Model, and returns the output display to the user.
Step-by-Step Tutorial
Step 1: Create a Dynamic Web Project
- Open Eclipse and go to File > New > Project....
- Select Web > Dynamic Web Project and click Next.
- Name the project
jsp-servlet-hibernate-mysql-example. - Set the target runtime to Apache Tomcat.
- Click Finish.
Step 2: Add Dependencies
Add the following dependencies to your pom.xml file if using Maven, or download the JAR files and add them to the lib folder:
<dependencies> <!-- Hibernate --> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.4.0.Final</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.32</version> </dependency> <!-- Jakarta Persistence API --> <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.0.0</version> </dependency> <!-- JSP and Servlets --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency> </dependencies> Step 3: MySQL Database Setup
Create a database named demo in MySQL and a books table using the following SQL script:
CREATE DATABASE demo; USE demo; CREATE TABLE books ( id INT NOT NULL AUTO_INCREMENT, title VARCHAR(120) NOT NULL, author VARCHAR(120) NOT NULL, price DOUBLE, PRIMARY KEY (id) ); Step 4: Create Book Entity
Create a Book entity class:
package com.example.entity; import jakarta.persistence.*; @Entity @Table(name = "books") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "title") private String title; @Column(name = "author") private String author; @Column(name = "price") private double price; // Constructors, getters, setters, and toString() method public Book() {} public Book(String title, String author, double price) { this.title = title; this.author = author; this.price = price; } // Getters and setters omitted for brevity } Step 5: Configure Hibernate
Create HibernateUtil class to bootstrap Hibernate:
package com.example.util; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Environment; import org.hibernate.service.ServiceRegistry; import com.example.entity.Book; import java.util.Properties; public class HibernateUtil { private static SessionFactory sessionFactory; public static SessionFactory getSessionFactory() { if (sessionFactory == null) { try { Configuration configuration = new Configuration(); Properties settings = new Properties(); settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver"); settings.put(Environment.URL, "jdbc:mysql://localhost:3306/demo?useSSL=false"); settings.put(Environment.USER, "root"); settings.put(Environment.PASS, "root"); settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL8Dialect"); settings.put(Environment.SHOW_SQL, "true"); settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread"); settings.put(Environment.HBM2DDL_AUTO, "update"); configuration.setProperties(settings); configuration.addAnnotatedClass(Book.class); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()).build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } catch (Exception e) { e.printStackTrace(); } } return sessionFactory; } public static void shutdown() { if (sessionFactory != null) { sessionFactory.close(); } } } Step 6: Create DAO Class for CRUD Operations
Create BookDao class to handle CRUD operations:
package com.example.dao; import com.example.entity.Book; import com.example.util.HibernateUtil; import org.hibernate.Session; import org.hibernate.Transaction; import java.util.List; public class BookDao { public void saveBook(Book book) { Transaction transaction = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) { transaction = session.beginTransaction(); session.save(book); transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } e.printStackTrace(); } } public List<Book> getBooks() { try (Session session = HibernateUtil.getSessionFactory().openSession()) { return session.createQuery("FROM Book", Book.class).list(); } } public void updateBook(Book book) { Transaction transaction = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) { transaction = session.beginTransaction(); session.update(book); transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } e.printStackTrace(); } } public void deleteBook(Long bookId) { Transaction transaction = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) { transaction = session.beginTransaction(); Book book = session.get(Book.class, bookId); if (book != null) { session.delete(book); } transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } e.printStackTrace(); } } public Book getBook(Long bookId) { try (Session session = HibernateUtil.getSessionFactory().openSession()) { return session.get(Book.class, bookId); } } } Step 7: Create Servlets for CRUD Operations
Create servlets to handle HTTP requests for CRUD operations.
AddBookServlet
package com.example.servlet; import com.example.dao.BookDao; import com.example.entity.Book; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/addBook") public class AddBookServlet extends HttpServlet { private BookDao bookDao = new BookDao(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("add-book.jsp").forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String title = req.getParameter("title"); String author = req.getParameter("author"); double price = Double.parseDouble(req.getParameter("price")); Book book = new Book(title, author, price); bookDao.saveBook(book); resp.sendRedirect("listBooks"); } } ListBooksServlet
package com.example.servlet; import com.example.dao.BookDao; import com.example.entity.Book; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @WebServlet("/listBooks") public class ListBooksServlet extends HttpServlet { private BookDao bookDao = new BookDao(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { List<Book> books = bookDao.getBooks(); req.setAttribute("books", books); req.getRequestDispatcher("list-books.jsp").forward(req, resp); } } UpdateBookServlet
package com.example.servlet; import com.example.dao.BookDao; import com.example.entity.Book; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/updateBook") public class UpdateBookServlet extends HttpServlet { private BookDao bookDao = new BookDao(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Long id = Long.parseLong(req.getParameter("id")); Book book = bookDao.getBook(id); req.setAttribute("book", book); req.getRequestDispatcher("update-book.jsp").forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Long id = Long.parseLong(req.getParameter("id")); String title = req.getParameter("title"); String author = req.getParameter("author"); double price = Double.parseDouble(req.getParameter("price")); Book book = new Book(id, title, author, price); bookDao.updateBook(book); resp.sendRedirect("listBooks"); } } DeleteBookServlet
package com.example.servlet; import com.example.dao.BookDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/deleteBook") public class DeleteBookServlet extends HttpServlet { private BookDao bookDao = new BookDao(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Long id = Long.parseLong(req.getParameter("id")); bookDao.deleteBook(id); resp.sendRedirect("listBooks"); } } Step 8: Create JSP Pages
add-book.jsp
<!DOCTYPE html> <html> <head> <title>Add Book</title> </head> <body> <h2>Add Book</h2> <form action="addBook" method="post"> Title: <input type="text" name="title" required><br> Author: <input type="text" name="author" required><br> Price: <input type="text" name="price" required><br> <input type="submit" value="Add Book"> </form> <a href="listBooks">View Books</a> </body> </html> list-books.jsp
<!DOCTYPE html> <html> <head> <title>List Books</title> </head> <body> <h2>List of Books</h2> <table border="1"> <tr> <th>ID</th> <th>Title</th> <th>Author</th> <th>Price</th> <th>Actions</th> </tr> <c:forEach var="book" items="${books}"> <tr> <td>${book.id}</td> <td>${book.title}</td> <td>${book.author}</td> <td>${book.price}</td> <td> <a href="updateBook?id=${book.id}">Edit</a> <a href="deleteBook?id=${book.id}">Delete</a> </td> </tr> </c:forEach> </table> <a href="addBook">Add New Book</a> </body> </html> update-book.jsp
<!DOCTYPE html> <html> <head> <title>Update Book</title> </head> <body> <h2>Update Book</h2> <form action="updateBook" method="post"> <input type="hidden" name="id" value="${book.id}"> Title: <input type="text" name="title" value="${book.title}" required><br> Author: <input type="text" name="author" value="${book.author}" required><br> Price: <input type="text" name="price" value="${book.price}" required><br> <input type="submit" value="Update Book"> </form> <a href="listBooks">View Books</a> </body> </html> Step 9: Configure Servlet Annotations
Using servlet annotations, there is no need to configure web.xml. The servlet classes are annotated with @WebServlet.
Step 10: Run the Application
Deploy the application on a Tomcat server and access the application through your browser. You can perform CRUD operations on the Book entity through the provided JSP pages.
Summary
This tutorial provided a comprehensive step-by-step guide to setting up a JSP and Servlet-based application with Hibernate 6.4, configuring it with a MySQL database, creating a Book entity, and performing CRUD operations using servlets and JSP pages. By following these steps, you can effectively manage and manipulate database records in a web application using Hibernate and JSP/Servlets.
Related Servlet Posts
- What is a Servlet in Java?
- Servlet Life Cycle
- Servlet Interface Example
- GenericServlet Class Example
- HttpServlet Class Example Tutorial
- HttpServlet doGet() Method Example
- HttpServlet doPost() Method Example
- @WebServlet Annotation Example
- @WebInitParam Annotation Example
- @WebListener Annotation Example
- @WebFilter Annotation Example
- @MultipartConfig Annotation Example
- How to Return a JSON Response from a Java Servlet
- Servlet Registration Form + JDBC + MySQL Database Example
- Login Form Servlet + JDBC + MySQL Example
- Servlet JDBC Eclipse Example Tutorial
- JSP Servlet JDBC MySQL CRUD Example Tutorial
- Servlet + JSP + JDBC + MySQL Example
- Registration Form using JSP + Servlet + JDBC + Mysql Example
- Login Form using JSP + Servlet + JDBC + MySQL Example
- JSP Servlet Hibernate CRUD Example
- JSP Servlet Hibernate Web Application
- Hibernate Registration Form Example with JSP, Servlet, MySQL
- Login Form using JSP + Servlet + Hibernate + MySQL Example
hey bro i need help the project run good but when i add new user the data doesn't insert into database
ReplyDeletemaybe you forget commit the transaction
DeleteHi,
ReplyDeleteI followed the tutorial but I am getting this error as
"The import org.hibernate cannot be
resolved". Please help me
u make sure that "added" hibernate in lib
DeleteThis comment has been removed by the author.
ReplyDeleteHi Bro,
ReplyDeleteHow to auto-genrate create table schema instead of manually create in mysql terminal
i aways get an error.
ReplyDelete```org.hibernate.property.access.spi.PropertyAccessException: Error accessing field```
when i opt the data
Hi sir, thanks for the great tutorial.
ReplyDeleteI added a servlet for login and from my loginServlet i try to access the "UserServlet"
but i keep getting an error when trying to add a new user or update it. the problem is with my action because it returns /UserServlet instead of /new or /list. Can you please help me solve this issue I tried multiple ways but nothing works.