Tiếp tục loạt bài hướng dẫn xây dựng Web bán hàng bằng Spring MVC thì Team Việt Dev sẽ trình bày phần hiển thị danh mục sản phẩm từ cơ sở dữ liệu lên website.
Phần trước chúng ta đã hoàn thành phần thiết kế giao diện trang bán hàng, bây giờ tiếp tục là phần hiển thị danh mục sản phẩm từ cơ sở dữ liệu lên giao diện web.
Yêu cầu:
Bước 1: Đầu tiên chúng ta sẽ thiết kế các lớp và bảng cơ sở dữ liệu cần thiết. Lớp danh mục (category) chứa các thông tin về loại danh mục và lớp sản phẩm (product) chứa thông tin về sản phẩm như giá bán, giảm giá…
Lớp danh mục:
package com.teamvietdev.model; import java.io.Serializable; import java.util.List; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; /** * * @author TVD */ @Entity(name = "category") public class Category implements Serializable { @Id @GeneratedValue private long categoryId; private String categoryName; private String categoryUrl; private boolean categoryStatus; @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "categoryId") private List<Product> listProduct; // get & set }
Lớp sản phẩm:
package com.teamvietdev.model; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; /** * * @author TVD */ @Entity(name = "product") public class Product implements Serializable { @Id @GeneratedValue private long productId; @ManyToOne @JoinColumn(name = "categoryId") private Category category; private String productName; private String productImage; private double productPrice; private String productUrl; private int productSale; private int productView; private String productDescription; private boolean productStatus; // get & set }
Bước 2: Sử dụng Hibernate trong kết nối CSDL.
Tập tin hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/db_vnshop?createDatabaseIfNotExist=true</property> <property name="hibernate.connection.useUnicode">true</property> <property name="hibernate.connection.characterEncoding">UTF-8</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password"></property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.show_sql">false</property> <property name="hibernate.enable_lazy_load_no_trans">true</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <mapping class="com.teamvietdev.model.Product"/> <mapping class="com.teamvietdev.model.Category"/> </session-factory> </hibernate-configuration>
Tập tin HibernateUtil.java
package com.teamvietdev.util; import org.hibernate.HibernateException; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; /** * * @author OSSTECH */ public class HibernateUtil { private static SessionFactory sessionFactory = null; private static Configuration cfg= null; static { try { cfg = new Configuration(); cfg.configure("/com/teamvietdev/util/hibernate.cfg.xml"); sessionFactory = cfg.buildSessionFactory(); } catch (HibernateException ex) { throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
Viết các phương thức CRUD của danh mục và sản phẩm.
Lớp CategoryDAO.java:
package com.teamvietdev.dao; import com.teamvietdev.model.Category; import java.util.List; /** * * @author TVD */ public interface CategoryDAO { // create public boolean create(Category object); // update public boolean update(Category object); // delete public boolean delete(Category object); // find by id public Category findById(int categoryId); // load list category public List<Category> getAll(); }
Lớp CategoryDAOImpl.java:
package com.teamvietdev.dao; import com.teamvietdev.model.Category; import com.teamvietdev.util.HibernateUtil; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.springframework.stereotype.Repository; /** * * @author TVD */ @Repository public class CategoryDAOImpl implements CategoryDAO { @Override public boolean create(Category object) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); session.save(object); transaction.commit(); return true; } catch (Exception ex) { if (transaction != null) { transaction.rollback(); } ex.printStackTrace(); } finally { session.flush(); session.close(); } return false; } @Override public boolean update(Category object) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); session.update(object); transaction.commit(); return true; } catch (Exception ex) { if (transaction != null) { transaction.rollback(); } ex.printStackTrace(); } finally { session.flush(); session.close(); } return false; } @Override public boolean delete(Category object) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); session.delete(object); transaction.commit(); return true; } catch (Exception ex) { if (transaction != null) { transaction.rollback(); } ex.printStackTrace(); } finally { session.flush(); session.close(); } return false; } @Override public Category findById(int categoryId) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); Query query = session.createQuery("FROM category WHERE category_id = :categoryId"); query.setInteger("categoryId", categoryId); Category obj = (Category) query.uniqueResult(); transaction.commit(); return obj; } catch (Exception ex) { if (transaction != null) { transaction.rollback(); } ex.printStackTrace(); } finally { session.flush(); session.close(); } return null; } @Override public List<Category> getAll() { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); Query query = session.createQuery("FROM category"); List<Category> list = query.list(); transaction.commit(); return list; } catch (Exception ex) { if (transaction != null) { transaction.rollback(); } ex.printStackTrace(); } finally { session.flush(); session.close(); } return null; } }
Lớp CategoryService.java:
package com.teamvietdev.service; import com.teamvietdev.model.Category; import java.util.List; /** * * @author TVD */ public interface CategoryService { // create public boolean create(Category object); // update public boolean update(Category object); // delete public boolean delete(Category object); // find by id public Category findById(int categoryId); // load list category public List<Category> getAll(); }
Lớp CategoryServiceImpl.java:
package com.teamvietdev.service; import com.teamvietdev.dao.CategoryDAO; import com.teamvietdev.model.Category; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * * @author TVD */ @Service public class CategoryServiceImpl implements CategoryService { @Autowired private CategoryDAO categoryDAO; @Override public boolean create(Category object) { return categoryDAO.create(object); } @Override public boolean update(Category object) { return categoryDAO.update(object); } @Override public boolean delete(Category object) { return categoryDAO.delete(object); } @Override public Category findById(int categoryId) { return categoryDAO.findById(categoryId); } @Override public List<Category> getAll() { return categoryDAO.getAll(); } }
Vào tập tin dispatcher-servlet.xml và thêm đoạn mã sau:
<bean id="categoryDAO" class="com.teamvietdev.dao.CategoryDAOImpl" /> <bean id="categoryService" class="com.teamvietdev.service.CategoryServiceImpl" />
Cấu trúc thư mục bố trí như sau:
Bước 3: Bây giờ chúng ta sẽ hiển thị danh mục sản phẩm, bạn mở lớp ControllerPages.java
package com.teamvietdev.controller; import com.teamvietdev.service.CategoryService; import com.teamvietdev.service.ProductService; import java.text.Normalizer; import java.util.regex.Pattern; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * * @author TVD */ @Controller @RequestMapping(value = "") public class ControllerPages { @Autowired private CategoryService categoryService; @Autowired private ProductService productService; @RequestMapping(value = "home.html", method = RequestMethod.GET) public String viewHome(ModelMap mm) { mm.put("listCategory", categoryService.getAll()); return "pages/index"; } }
Hiển thị danh mục sản phẩm, mở tập tin header.jsp và sửa mã thành:
<li><a href="${pageContext.request.contextPath}/shop.html">Shop</a> <ul class="drop"> <c:forEach var="item" items="${listCategory}"> <li><a href="${pageContext.request.contextPath}/category/${item.categoryUrl}/${item.categoryId}.html">${item.categoryName}</a></li> </c:forEach> </ul> </li>
Kết quả sau khi thực hiện:
Tải mã nguồn tại đây: https://mshares.co/file/udFsdQC
Lời kết: Trong thời gian tới Team Việt Dev sẽ tiếp tục chia sẻ thêm nhiều bài viết trong loạt bài hướng dẫn xây dựng web bán hàng bằng Spring MVC… miễn phí đến bạn đọc, các bạn nhớ theo dõi kênh để có được những chia sẻ mới nhất.
(Tác giả: Team Việt Dev)
E xin Db với a, e k thấy ạ
huyhung041000@gmail.com
E xin db với a, e tìm k thấy ạ
huyhung041000@gmai.com