Tiếp nối phần 1 về Crud Hibernate với JSP, Servlet đã hướng dẫn các bạn cách thiết lập dự án, tạo database trong mysql. Ở bài viết này chúng ta sẽ tìm hiểu về cách Config hibernate, hiển thị, thêm vào, sửa và xóa sản phẩm. Hãy cùng nghiên cứu nhé!
HibernateUtil.java
private static final SessionFactory FACTORY;
static { Configuration conf = new Configuration(); Properties properties = new Properties(); properties.put(Environment.DIALECT, “org.hibernate.dialect.SQLServerDialect”); properties.put(Environment.DRIVER, “com.microsoft.sqlserver.jdbc.SQLServerDriver”); properties.put(Environment.URL, “jdbc:sqlserver://localhost:1433;databaseName=demohibernate;encrypt=true;trustServerCertificate=true”); properties.put(Environment.USER, “demo”); properties.put(Environment.PASS, “1234567890”); properties.put(Environment.SHOW_SQL, “true”); //gen DB tự động properties.put(Environment.HBM2DDL_AUTO, “create”); conf.setProperties(properties); conf.addAnnotatedClass(SanPham.class); ServiceRegistry registry = new StandardServiceRegistryBuilder() .applySettings(conf.getProperties()).build(); FACTORY = conf.buildSessionFactory(registry); } public static SessionFactory getFACTORY() { return FACTORY; } public static void main(String[] args) { System.out.println(getFACTORY()); } |
Chú ý: Thay đổi user name và password của sql server của mình.
properties.put(Environment.USER, “demo”);
properties.put(Environment.PASS, “1234567890”); |
Bạn có thể tạo table trực tiếp trong sql server hoặc để hibernate tự tạo table:
tạo table tự động(sau mỗi lần chạy sẽ tạo lại table)
properties.put(Environment.HBM2DDL_AUTO, “create”);
bỏ tạo table tự động properties.put(Environment.HBM2DDL_AUTO, “none”); |
Hiển thị Sản phẩm
SanPhamRespone.java
private int id;
private String ten; private float gia; public SanPhamRespone(int id, String ten, float gia) { this.id = id; this.ten = ten; this.gia = gia; } public SanPhamRespone() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTen() { return ten; } public void setTen(String ten) { this.ten = ten; } public float getGia() { return gia; } public void setGia(float gia) { this.gia = gia; } |
SanPhamRepository.java
public class SanPhamRepository {
public List<SanPhamRespone> getAll() { List<SanPhamRespone> sanPhams = new ArrayList<>(); try (Session session = HibernateUtil.getFACTORY().openSession()) { Query query = session.createQuery(“SELECT new com.example.demo.response.SanPhamRespone(sp.id, sp.ten, sp.gia) FROM SanPham sp”, SanPhamRespone.class); sanPhams = query.getResultList(); } catch (Exception e) { e.printStackTrace(System.out); } return sanPhams; } } |
SanPhamService.java
public interface SanPhamService {
List<SanPhamRespone> getAll(); } |
SanPhamSerViceImpl.java
public class SanPhamSerViceImpl implements SanPhamService {
private SanPhamRepository sanPhamRepository = new SanPhamRepository();
@Override public List<SanPhamRespone> getAll() { return sanPhamRepository.getAll(); } } |
SanPhamController.java
@WebServlet(name = “Servlet”, value = {“/san-pham/hien-thi”, “/san-pham/add-update”, “/san-pham/delete”, “/san-pham/detail”})
public class SanPhamController extends HttpServlet { private SanPhamService sanPhamService = new SanPhamSerViceImpl(); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uri = request.getRequestURI(); if (uri.contains(“hien-thi”)) { this.hienThiSanPham(request, response); } else if (uri.contains(“detail”)) { // this.detailSanPham(request, response); } else { // this.deleteSanPham(request, response); } }
private void hienThiSanPham(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<SanPhamRespone> sanPhamRespones = sanPhamService.getAll(); request.setAttribute(“sanPhamRespones”, sanPhamRespones); request.getRequestDispatcher(“/view/san-pham.jsp”).forward(request, response); } } |
san-pham.jsp
Chú ý:
- Bạn cần import <%@ taglib prefix=”c” uri=”//java.sun.com/jsp/jstl/core” %> trên đầu file
- Item: thông tin lặp, var: tên của biến để hiển thị trạng thái vòng lặp.
Thêm mới sản phẩm
SanPhamRequest.java
private String ten;
private String gia; public SanPhamRequest(String ten, String gia) { this.ten = ten; this.gia = gia; } public SanPhamRequest() { } public String getTen() { return ten; } public void setTen(String ten) { this.ten = ten; } public String getGia() { return gia; } public void setGia(String gia) { this.gia = gia; } |
SanPhamRepository.java
public boolean add(SanPham sanPham){
Transaction transaction = null; try (Session session = HibernateUtil.getFACTORY().openSession()){ transaction = session.beginTransaction(); session.persist(sanPham); // cách 2 // session.save(sanPham); // cách 3 // session.saveOrUpdate(sanPham); transaction.commit(); } catch (Exception e) { return false; } return true; } |
SanPhamService.java
HashMap<String, String> add(SanPhamRequest request) ; |
SanPhamSerViceImpl.java
@Override
public HashMap<String, String> add(SanPhamRequest request) { HashMap<String, String> lists = new HashMap<>(); // Check validate if (StringUtils.isEmpty(request.getTen())) { lists.put(“GIA_EMPTY”, “Vui lòng nhập giá”); } if (StringUtils.isEmpty(request.getGia())) { lists.put(“TEN_EMPTY”, “Tên sản Phẩm không được để trống”); } // Khi thoả mãn validate if (lists.isEmpty()) { SanPham sanPham = new SanPham(); sanPham.setTen(request.getTen()); sanPham.setGia(Float.parseFloat(request.getGia())); sanPhamRepository.add(sanPham); } return lists; } |
SanPhamController.java
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uri = request.getRequestURI(); if (uri.contains(“add-update”)) { this.addOrUpdateLopHoc(request, response); } } // url: //localhost8080/sanPham/add-update?id= &ten=ao1&gia=12 //?id= &ten=ao1&gia=12 là các request parameter: id, ten, gia private void addOrUpdateLopHoc(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String ten = request.getParameter(“ten”); String gia = request.getParameter(“gia”); SanPhamRequest sanPhamRequest = new SanPhamRequest(); sanPhamRequest.setTen(ten); sanPhamRequest.setGia(gia); // hiển thị các lỗi trên form HashMap<String, String> errors = sanPhamService.add(sanPhamRequest); request.setAttribute(“errors”, errors); // hiển thị lại data lên trên table List<SanPhamRespone> sanPhamRespones = sanPhamService.getAll(); request.setAttribute(“sanPhamRespones”, sanPhamRespones);
request.getRequestDispatcher(“/view/san-pham.jsp”).forward(request, response); } |
san-pham.jsp
Lưu ý: trong input phải có tên của request trùng với thuộc tính trong SanPhamRequest.
Sửa sản phẩm
SanPhamRepository.java
public SanPham getOne(int id){
SanPham sanPham = null; Transaction transaction = null; try (Session session = HibernateUtil.getFACTORY().openSession()){ transaction = session.beginTransaction(); sanPham = session.get(SanPham.class, id); transaction.commit(); } catch (Exception e) { } return sanPham; }
public SanPhamRespone findById(int id){ SanPhamRespone sanPham = null; Transaction transaction = null; try (Session session = HibernateUtil.getFACTORY().openSession()){ transaction = session.beginTransaction(); Query query = session.createQuery(“SELECT new com.example.demo.response.SanPhamRespone(sp.id, sp.ten, sp.gia) FROM SanPham sp WHERE sp.id = :id”, SanPhamRespone.class); query.setParameter(“id”, id); sanPham = (SanPhamRespone) query.getSingleResult(); transaction.commit(); } catch (Exception e) { } return sanPham; }
public Boolean update(SanPham sanPham) { Transaction transaction = null; try (Session session = HibernateUtil.getFACTORY().openSession()) { transaction = session.beginTransaction(); session.merge(sanPham); // cách 2 // session.saveOrUpdate(sanPham); transaction.commit(); return true; } catch (Exception e) { e.printStackTrace(System.out); } return false; } |
SanPhamService.java
SanPhamRespone findById(int id);
HashMap<String, String> update(SanPhamRequest request, int id); |
SanPhamSerViceImpl.java
@Override
public SanPhamRespone findById(int id) { return sanPhamRepository.findById(id); } @Override public HashMap<String, String> update(SanPhamRequest request, int id) { HashMap<String, String> lists = new HashMap<>(); SanPham updateSanPham = sanPhamRepository.getOne(id); // Check validate if (StringUtils.isEmpty(request.getTen())) { lists.put(“GIA_EMPTY”, “Vui lòng nhập giá”); } if (StringUtils.isEmpty(request.getGia())) { lists.put(“TEN_EMPTY”, “Tên sản Phẩm không được để trống”); } if(updateSanPham == null){ lists.put(“San_PHAM_EXIST”, “Id không tồn tại”); } // Khi thoả mãn validate if (lists.isEmpty()) { updateSanPham.setTen(request.getTen()); updateSanPham.setGia(Float.parseFloat(request.getGia())); sanPhamRepository.update(updateSanPham); } return lists; } |
SanPhamController.java
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uri = request.getRequestURI(); if (uri.contains(“hien-thi”)) { this.hienThiSanPham(request, response); } else if (uri.contains(“detail”)) { this.detailSanPham(request, response); } else { this.deleteSanPham(request, response); } }
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uri = request.getRequestURI(); if (uri.contains(“add-update”)) { this.addOrUpdateLopHoc(request, response); } } // hiển thị chi tiết sản phẩm cần update private void detailSanPham(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String id = request.getParameter(“id”); SanPhamRespone sanPhamRespone = sanPhamService.findById(Integer.parseInt(id)); List<SanPhamRespone> sanPhamRespones = sanPhamService.getAll(); request.setAttribute(“sanPhamRespone”, sanPhamRespone); request.setAttribute(“sanPhamRespones”, sanPhamRespones); request.getRequestDispatcher(“/view/san-pham.jsp”).forward(request, response); } // update hoặc lưu private void addOrUpdateLopHoc(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String id = request.getParameter(“id”); String ten = request.getParameter(“ten”); String gia = request.getParameter(“gia”); SanPhamRequest sanPhamRequest = new SanPhamRequest(); sanPhamRequest.setTen(ten); sanPhamRequest.setGia(gia); // nếu id = rỗng thì sẽ thực hiện lưu sản phẩm và ngược lại if(id.isEmpty()){ HashMap<String, String> errors = sanPhamService.add(sanPhamRequest); request.setAttribute(“errors”, errors); List<SanPhamRespone> sanPhamRespones = sanPhamService.getAll(); request.setAttribute(“sanPhamRespones”, sanPhamRespones); request.getRequestDispatcher(“/view/san-pham.jsp”).forward(request, response); }else{ HashMap<String, String> errors = sanPhamService.update(sanPhamRequest, Integer.parseInt(id)); request.setAttribute(“errors”, errors); List<SanPhamRespone> sanPhamRespones = sanPhamService.getAll(); request.setAttribute(“sanPhamRespones”, sanPhamRespones); request.getRequestDispatcher(“/view/san-pham.jsp”).forward(request, response); } } |
Delete sản phẩm
SanPhamRepository.java
public boolean delete(SanPham sanPham){
Transaction transaction = null; try (Session session = HibernateUtil.getFACTORY().openSession()){ transaction = session.beginTransaction(); session.delete(sanPham); transaction.commit(); } catch (Exception e) { return false; } return true; } |
SanPhamService.java
boolean delete(int id); |
SanPhamSerViceImpl.java
@Override
public boolean delete(int id) { SanPham sanPham = sanPhamRepository.getOne(id); return sanPhamRepository.delete(sanPham); } |
SanPhamController.java
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uri = request.getRequestURI(); if (uri.contains(“hien-thi”)) { this.hienThiSanPham(request, response); } else if (uri.contains(“detail”)) { this.detailSanPham(request, response); } else { this.deleteSanPham(request, response); } } private void deleteSanPham(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getParameter(“id”); sanPhamService.delete(Integer.parseInt(id)); List<SanPhamRespone> sanPhamRespones = sanPhamService.getAll(); request.setAttribute(“sanPhamRespones”, sanPhamRespones); request.getRequestDispatcher(“/view/san-pham.jsp”).forward(request, response); } |
Tóm lại, trong 2 bài viết về cách CRUD Hibernate với JSP đã hướng dẫn các bạn về quy trình sử dụng Hibernate để tạo một dự án. Bài viết hướng dân đầy đủ các bước từ thiết lập dự án, tạo các lớp thực thể, tạo database trong mysql, config hibernate, hiển thị Sản phẩm, thêm mới sản phẩm, sửa sản phẩm, delete sản phẩm.
Bộ môn Ứng dụng phần mềm
Trường Cao đẳng FPT Mạng cá cược bóng đá
cơ sở Hà Nội