CodeGym /Blog Java /Ngẫu nhiên /Ứng dụng Hibernate đầu tiên của bạn
John Squirrels
Mức độ
San Francisco

Ứng dụng Hibernate đầu tiên của bạn

Xuất bản trong nhóm
Trong bài viết này, bạn sẽ làm quen với một trong những framework doanh nghiệp phổ biến nhất dành cho Java và tạo ứng dụng Hibernate đầu tiên của bạn. Chưa bao giờ nghe nói về Hibernate? Hoặc có thể bạn đã nghe nói về nó, nhưng chưa sử dụng nó? Hoặc có thể bạn đã cố gắng sử dụng nó, nhưng không thành công? Trong cả ba trường hợp - chào mừng bạn đến với phần bên dưới :) Ứng dụng Hibernate đầu tiên của bạn - 1 Xin chào mọi người! Trong bài viết này, tôi sẽ nói về các tính năng chính của Hibernate framework và giúp bạn viết ứng dụng nhỏ đầu tiên của mình. Đối với điều này, chúng ta cần:
  1. IntelliJ IDEA Ultimate Edition
    Tải xuống từ trang web chính thức và kích hoạt phiên bản dùng thử 30 ngày.
  2. PostgreSQL - một trong những hệ thống quản lý cơ sở dữ liệu hiện đại phổ biến nhất (DBMS)
  3. Maven (đã được kết nối với IDEA)
  4. Một chút kiên nhẫn.
Để đề phòng, tôi đã đăng mã ứng dụng lên GitHub (nhánh codegym). Bài viết chủ yếu hướng đến những người chưa từng làm việc với công nghệ này bao giờ nên tôi đã hạn chế tối đa lượng code. Bắt đầu nào!

Ngủ đông là gì?

Đây là một trong những triển khai ánh xạ quan hệ đối tượng (ORM) phổ biến nhất. Ánh xạ quan hệ đối tượng xác định mối quan hệ giữa các đối tượng phần mềm và bản ghi cơ sở dữ liệu. Tất nhiên, Hibernate có chức năng rất rộng, nhưng chúng tôi sẽ tập trung vào các chức năng đơn giản nhất. Mục tiêu của chúng tôi là tạo một ứng dụng CRUD (Tạo, Đọc, Cập nhật, Xóa) có thể:
  1. Tạo người dùng (User), tìm kiếm họ trong cơ sở dữ liệu theo ID, cập nhật dữ liệu của họ trong cơ sở dữ liệu và xóa họ khỏi cơ sở dữ liệu.
  2. Gán đối tượng ô tô (Auto) cho người dùng. Tạo, cập nhật, tìm và xóa ô tô khỏi cơ sở dữ liệu.
  3. Ngoài ra, ứng dụng sẽ tự động xóa những chiếc xe "vô chủ" khỏi cơ sở dữ liệu. Nói cách khác, khi một người dùng bị xóa, tất cả các ô tô thuộc về người dùng đó cũng phải bị xóa khỏi cơ sở dữ liệu.
Dự án của chúng ta sẽ được cấu trúc như sau: Ứng dụng Hibernate đầu tiên của bạn - 2Như bạn có thể thấy, không có gì phức tạp. 6 lớp + 1 tệp có cấu hình. Đầu tiên, tạo một dự án Maven mới trong IntelliJ IDEA. Tệp -> Dự án mới. Chọn Maven trong số các loại dự án được đề xuất và chuyển sang bước tiếp theo. Ứng dụng Hibernate đầu tiên của bạn - 3Apache Maven là một khung để tự động xây dựng các dự án dựa trên mô tả về cấu trúc của chúng trong các tệp POM. Toàn bộ cấu trúc của dự án của bạn sẽ được mô tả trong pom.xml, một tệp mà chính IDEA sẽ tạo trong thư mục gốc của dự án của bạn. Trong cài đặt dự án, bạn cần chỉ định các cài đặt Maven sau: groupId và artifactId. Trong các dự án, groupId thường là mô tả về công ty hoặc đơn vị kinh doanh. Tên miền của công ty hoặc trang web có thể vào đây. Đổi lại, artifactId là tên của dự án. Đối với groupdId, bạn có thể nhập com.yourNickname.codegym. Điều này sẽ không có bất kỳ ảnh hưởng nào đến ứng dụng. Đối với artifactId, hãy chọn bất kỳ tên dự án nào bạn thích. Phiên bản có thể được giữ nguyên. Ứng dụng Hibernate đầu tiên của bạn - 4Trên màn hình cuối cùng, chỉ cần xác nhận dữ liệu đã nhập trước đó.Ứng dụng Hibernate đầu tiên của bạn - 5Vì vậy, chúng tôi đã tạo dự án. Bây giờ tất cả những gì còn lại phải làm là viết một số mã và làm cho nó hoạt động :) Điều đầu tiên trước tiên: nếu chúng ta muốn tạo một ứng dụng hoạt động với cơ sở dữ liệu, chúng ta chắc chắn không thể làm gì nếu không có cơ sở dữ liệu! Tải xuống PostgreSQL từ đây (Tôi đang sử dụng phiên bản 9). PostgreSQL có người dùng mặc định là 'postgres' — bạn sẽ cần nghĩ mật khẩu cho nó khi cài đặt. Đừng quên mật khẩu. Chúng ta sẽ cần nó sau! (Nói chung, việc sử dụng cơ sở dữ liệu mặc định trong các ứng dụng là một cách làm không tốt, nhưng chúng tôi sẽ làm điều đó để giảm số lượng các nguyên nhân gây loét bằng cách tạo cơ sở dữ liệu của riêng bạn). Nếu bạn chưa quen với dòng lệnh và truy vấn SQL, thì có một tin tốt. IntelliJ IDEA cung cấp giao diện người dùng hoàn toàn phù hợp để làm việc với cơ sở dữ liệu. Ứng dụng Hibernate đầu tiên của bạn - 6(nằm trên khung bên phải của IDEA, tab Cơ sở dữ liệu). Để tạo kết nối, hãy nhấp vào "+" và chọn nguồn dữ liệu của chúng tôi (PostgeSQL). Điền vào các trường cho người dùng và cơ sở dữ liệu ("postgres" cho cả hai) và nhập mật khẩu đã được đặt trong quá trình cài đặt PostgreSQL. Nếu cần, hãy tải xuống trình điều khiển Postgres. Bạn có thể làm điều này trên cùng một trang. Nhấp vào "Kiểm tra kết nối" để xác minh rằng kết nối cơ sở dữ liệu đã được thiết lập. Nếu bạn thấy "Thành công" thì hãy tiếp tục. Bây giờ chúng ta sẽ tạo các bảng chúng ta cần. Sẽ có tổng cộng hai: người dùng và ô tô. Tham số cho bảng người dùng: Ứng dụng Hibernate đầu tiên của bạn - 7Lưu ý rằng id là khóa chính. Nếu bạn không biết khóa chính trong SQL là gì, hãy tra Google. Cái này quan trọng. Cài đặt cho bảng ô tô: Ứng dụng Hibernate đầu tiên của bạn - 8Đối với bảng ô tô, bạn cần định cấu hình khóa ngoại. Nó sẽ phục vụ để liên kết các bảng của chúng tôi. Tôi khuyên bạn nên đọc thêm về nó. Nói một cách đơn giản, nó tham chiếu đến một bảng bên ngoài, trong trường hợp của chúng tôi là người dùng. Nếu ô tô thuộc về người dùng có id = 1, thì trường user_id của ô tô sẽ bằng 1. Đây là cách chúng tôi liên kết người dùng với ô tô của họ trong ứng dụng của mình. Trong bảng ô tô của chúng tôi, trường user_id sẽ đóng vai trò là khóa ngoại. Nó sẽ tham chiếu đến trường id của bảng người dùng. Ứng dụng Hibernate đầu tiên của bạn - 9Vì vậy, chúng tôi đã tạo một cơ sở dữ liệu với hai bảng. Điều còn lại là hiểu cách quản lý nó từ mã Java. Chúng ta sẽ bắt đầu với tệp pom.xml, trong đó chúng ta cần bao gồm các thư viện cần thiết (trong Maven, chúng được gọi là phụ thuộc). Tất cả các thư viện được lưu trữ trong kho lưu trữ Maven trung tâm. Các thư viện bạn chỉ định trong pom.xml có sẵn để bạn sử dụng trong dự án. Bạn có thể thấy tệp pom.xml của bạn trông như thế này: Ứng dụng Hibernate đầu tiên của bạn - 10Không có gì phức tạp cả. Chúng tôi chỉ thêm 2 phần phụ thuộc — để sử dụng PostgreSQL và Hibernate. Bây giờ hãy chuyển sang mã Java. Tạo tất cả các gói và lớp cần thiết trong dự án. Để bắt đầu, chúng ta cần một mô hình dữ liệu: các lớp UserAuto.

 package models;
 
 import javax.persistence.*;
 import java.util.ArrayList;
 import java.util.List;
 
 @Entity
 @Table (name = "users")
 public class User {
 
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private int id;
     @Column(name = "name")
     private String name;
     // You can omit the Column attribute if the name property matches the column name in the table
     private int age;
 
     @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
     private List<Auto> autos;
 
     public User() {
     }
 
     public User(String name, int age) {
         this.name = name;
         this.age = age;
         autos = new ArrayList<>();
     }
 
     public void addAuto(Auto auto) {
         auto.setUser(this);
         autos.add(auto);
     }
 
     public void removeAuto(Auto auto) {
         autos.remove(auto);
     }
 
     public int getId() {
         return id;
     }
 
     public String getName() {
         return name;
     }
 
     public void setName(String name) {
         this.name = name;
     }
 
     public int getAge() {
         return age;
     }
 
     public void setAge(int age) {
         this.age = age;
     }
 
     public List<Auto> getAutos() {
         return autos;
     }
 
     public void setAutos(List<Auto> autos) {
         this.autos = autos;
     }
 
     @Override
     public String toString() {
         return "models.User{" +
                 "id=" + id +
                 ", name='" + name + '\'' +
                 ", age=" + age +
                 '}';
     }
 }
 
 

 package models;
 
 import javax.persistence.*;
 
 @Entity
 @Table(name = "autos")
 public class Auto {
 
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private int id;
 
     @Column (name = "model")
     private String model;
 
     // You can omit the Column attribute if the name property matches the column name in the table
     private String color;
 
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "user_id")
     private User user;
 
     public Auto() {
     }
 
     public Auto(String model, String color) {
         this.model = model;
         this.color = color;
     }
 
     public int getId() {
         return id;
     }
 
     public String getModel() {
         return model;
     }
 
     public void setModel(String model) {
         this.model = model;
     }
 
     public String getColor() {
         return color;
     }
 
     public void setColor(String color) {
         this.color = color;
     }
 
     public User getUser() {
         return user;
     }
 
     public void setUser(User user) {
         this.user = user;
     }
 
     @Override
     public String toString() {
         return color + " " + model;
     }
 }
 
 
Như bạn có thể thấy, các lớp có một loạt các chú thích tối nghĩa. Hãy bắt đầu đào sâu vào chúng. Đối với chúng tôi, chú thích chính là @Entity. Đọc về nó trên Wikipedia và học thuộc lòng. Đây là nền tảng của nền tảng. Chú thích này cho phép các đối tượng của lớp Java của bạn được ánh xạ tới cơ sở dữ liệu. Đối với một lớp là một thực thể, nó phải đáp ứng các yêu cầu sau:
  • Nó phải có một hàm tạo rỗng ( publichoặc protected)
  • Nó không thể được lồng vào nhau, một giao diện hoặc mộtenum
  • Nó không thể finalvà không thể có finalcác trường/thuộc tính
  • Nó phải có ít nhất một trường @Id.
Kiểm tra các lớp thực thể của bạn: chúng là những nơi rất phổ biến để tự bắn vào chân mình. Nó rất dễ dàng để quên một cái gì đó. Hơn nữa, một thực thể có thể làm như sau:
  • Nó có thể có các hàm tạo không trống
  • Nó có thể kế thừa và được kế thừa
  • Nó có thể có các phương thức khác và thực hiện các giao diện.
Như bạn có thể thấy, Userlớp rất giống với bảng người dùng. Nó có id, name, vàagelĩnh vực. Các chú thích nằm phía trên chúng không cần bất kỳ lời giải thích cụ thể nào: rõ ràng là @Id chỉ ra rằng trường là một mã định danh các đối tượng của lớp này. Chú thích @Table phía trên lớp cho biết tên của bảng nơi các đối tượng được viết. Lưu ý nhận xét phía trên trường tuổi: nếu tên của trường trong lớp giống với tên của bảng, bạn có thể bỏ qua chú thích @Column và nó sẽ hoạt động. Đối với phần được chỉ định trong dấu ngoặc nhọn ("strategy = GenerationType.IDENTITY"): có một số chiến lược để tạo ID. Bạn có thể Google chúng, nhưng đối với ứng dụng của chúng tôi, không cần bận tâm. Điều chính là đối với các đối tượng của chúng tôi, giá trị của id sẽ được tạo tự động. Theo đó, không có trình thiết lập cho id và chúng tôi cũng không đặt nó trong hàm tạo. Tuy nhiên,Userlớp không nổi bật. Nó có một danh sách các xe ô tô! Ứng dụng Hibernate đầu tiên của bạn - 11Chú thích @OneToMany treo phía trên danh sách. Điều đó có nghĩa là một số ô tô có thể tương ứng với cùng một đối tượng của lớp Người dùng. Phần tử "mappedBy" đề cập đến trường người dùng của Autolớp. Như vậy, ô tô và người sử dụng có liên quan với nhau. Phần tử orphanRemoval cho biết có nên áp dụng thao tác xóa đối với các thực thể không còn mối quan hệ hay không. Nếu chúng tôi xóa một người dùng khỏi cơ sở dữ liệu, thì tất cả các ô tô được liên kết với người đó cũng sẽ bị xóa. Đổi lại, trongAutoclass, bạn sẽ thấy trường người dùng có chú thích @ManyToOne (một Người dùng có thể tương ứng với nhiều Ô tô) và chú thích @JoinColumn. Nó cho biết cột nào trong bảng ô tô được dùng để tham chiếu đến bảng người dùng (tức là khóa ngoại mà chúng ta đã nói ở trên). Sau khi tạo mô hình dữ liệu, đã đến lúc dạy chương trình của chúng ta thực hiện các thao tác với dữ liệu trong cơ sở dữ liệu. Hãy bắt đầu với lớp tiện ích HibernateSessionFactoryUtil. Nó chỉ có một công việc — tạo một nhà máy phiên để ứng dụng của chúng ta hoạt động với cơ sở dữ liệu (xin chào mẫu thiết kế Nhà máy!). Nó không biết làm gì khác.

 package utils;
 
 import models.Auto;
 import models.User;
 import org.hibernate.SessionFactory;
 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 import org.hibernate.cfg.Configuration;
 
 public class HibernateSessionFactoryUtil {
     private static SessionFactory sessionFactory;
 
     private HibernateSessionFactoryUtil() {}
 
     public static SessionFactory getSessionFactory() {
         if (sessionFactory == null) {
             try {
                 Configuration configuration = new Configuration().configure();
                 configuration.addAnnotatedClass(User.class);
                 configuration.addAnnotatedClass(Auto.class);
                 StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
                 sessionFactory = configuration.buildSessionFactory(builder.build());
 
             } catch (Exception e) {
                 System.out.println("Исключение!" + e);
             }
         }
         return sessionFactory;
     }
 }
 
Trong lớp này, chúng tôi tạo một đối tượng Cấu hình mới và chuyển cho nó các lớp mà nó sẽ coi là các thực thể: UserAuto. Chú ý đến configuration.getProperties()phương pháp. Những tài sản khác là có? Họ đến từ đâu? Thuộc tính là cài đặt ngủ đông được chỉ định trong tệp hibernate.cfg.xml đặc biệt. Ứng dụng Hibernate đầu tiên của bạn - 12Hibernate.cfg.xml được đọc tại đây: new Configuration().configure(); Như bạn thấy, không có gì đặc biệt về nó: nó chứa các tham số để kết nối với cơ sở dữ liệu, cũng như tham số show_sql. Điều này là cần thiết để tất cả các truy vấn sql được thực thi bởi Hibernate được hiển thị trên bảng điều khiển. Bằng cách này, bạn sẽ thấy chính xác Hibernate đang làm gì tại bất kỳ thời điểm nào, loại bỏ mọi cảm giác "ma thuật". Tiếp theo chúng ta cầnUserDAOlớp học. Cách tốt nhất là lập trình thông qua các giao diện — tạo một UserDAOgiao diện và UserDAOImpltriển khai riêng biệt, nhưng tôi sẽ bỏ qua phần này để giảm số lượng mã. Đừng làm điều này trong các dự án thực tế! Mẫu thiết kế DAO (đối tượng truy cập dữ liệu) là một trong những mẫu phổ biến nhất. Ý tưởng rất đơn giản — tạo một lớp ứng dụng chỉ chịu trách nhiệm truy cập dữ liệu, không có gì khác. Tìm nạp dữ liệu từ cơ sở dữ liệu, cập nhật dữ liệu, xóa dữ liệu — chỉ vậy thôi. Nghiên cứu thêm về ĐẠO. Bạn sẽ liên tục sử dụng các đối tượng truy cập dữ liệu trong công việc của mình. Lớp chúng ta có thể làm gì UserDao? Chà, giống như tất cả các DAO, nó chỉ có thể hoạt động với dữ liệu. Tìm người dùng theo id, cập nhật dữ liệu, xóa, lấy danh sách tất cả người dùng từ cơ sở dữ liệu hoặc lưu người dùng mới vào cơ sở dữ liệu — đó là toàn bộ chức năng của nó.

 package dao;
 
 import models.Auto;
 import models.User;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
 import utils.HibernateSessionFactoryUtil;
 import java.util.List;
 
 public class UserDao {
 
     public User findById(int id) {
         return HibernateSessionFactoryUtil.getSessionFactory().openSession().get(User.class, id);
     }
 
     public void save(User user) {
         Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
         Transaction tx1 = session.beginTransaction();
         session.save(user);
         tx1.commit();
         session.close();
     }
 
     public void update(User user) {
         Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
         Transaction tx1 = session.beginTransaction();
         session.update(user);
         tx1.commit();
         session.close();
     }
 
     public void delete(User user) {
         Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
         Transaction tx1 = session.beginTransaction();
         session.delete(user);
         tx1.commit();
         session.close();
     }
 
     public Auto findAutoById(int id) {
         return HibernateSessionFactoryUtil.getSessionFactory().openSession().get(Auto.class, id);
     }
 
     public List<User> findAll() {
         List<User> users = (List<User>) HibernateSessionFactoryUtil.getSessionFactory().openSession().createQuery("From User").list();
         return users;
     }
 }
 
UserDaocác phương pháp của tương tự như nhau. Trong hầu hết các trường hợp này, chúng tôi nhận được một đối tượng Phiên (phiên kết nối cơ sở dữ liệu) bằng cách sử dụng Session Factory của chúng tôi, tạo một giao dịch duy nhất trong phiên này, thực hiện các thao tác dữ liệu cần thiết, lưu kết quả của giao dịch trong cơ sở dữ liệu, sau đó đóng phiên. Bản thân các phương pháp, như bạn có thể thấy, khá đơn giản. DAO là "trái tim" của ứng dụng của chúng tôi. Tuy nhiên, chúng tôi sẽ không trực tiếp tạo một DAO và gọi các phương thức của nó trong main()phương thức của chúng tôi. Tất cả logic sẽ được chuyển đến UserServicelớp.

 package services;
 
 import dao.UserDao;
 import models.Auto;
 import models.User;
 
 import java.util.List;
 
 public class UserService {
 
     private UserDao usersDao = new UserDao();
 
     public UserService() {
     }
 
     public User findUser(int id) {
         return usersDao.findById(id);
     }
 
     public void saveUser(User user) {
         usersDao.save(user);
     }
 
     public void deleteUser(User user) {
         usersDao.delete(user);
     }
 
     public void updateUser(User user) {
         usersDao.update(user);
     }
 
     public List<User> findAllUsers() {
         return usersDao.findAll();
     }
 
     public Auto findAutoById(int id) {
         return usersDao.findAutoById(id);
     }
 
 
 }
 
 
Dịch vụ là lớp dữ liệu ứng dụng chịu trách nhiệm thực thi logic nghiệp vụ. Nếu chương trình của bạn cần thực thi một số loại logic nghiệp vụ, thì nó sẽ thực hiện điều đó thông qua các dịch vụ. Một dịch vụ chứa a UserDaovà gọi các phương thức DAO trong các phương thức của nó. Có vẻ như chúng ta đang sao chép các chức năng ở đây (tại sao không chỉ gọi các phương thức từ một đối tượng DAO?), nhưng với rất nhiều đối tượng và logic phức tạp, việc phân lớp ứng dụng mang lại những lợi thế rất lớn (làm như vậy là một cách làm tốt — hãy nhớ điều này trong tương lai và đọc về "các lớp ứng dụng"). Dịch vụ của chúng tôi có logic đơn giản, nhưng các phương thức dịch vụ trong các dự án trong thế giới thực chứa nhiều hơn một dòng mã :) Bây giờ chúng tôi có mọi thứ bạn cần để chạy ứng dụng! Trong main()phương pháp này, hãy tạo một người dùng và chiếc xe của họ, liên kết cái này với cái kia và lưu chúng vào cơ sở dữ liệu.

 import models.Auto;
 import models.User;
 import services.UserService;
 
 import java.sql.SQLException;
 
 public class Main {
     public static void main(String[] args) throws SQLException {
 
         UserService userService = new UserService();
         User user = new User ("Jenny", 26);
         userService.saveUser(user);
         Auto ferrari = new Auto("Ferrari", "red");
         ferrari.setUser(user);
         user.addAuto(ferrari);
         Auto ford = new Auto("Ford", "black");
         ford.setUser(user);
         user.addAuto(ford);
         userService.updateUser(user);
     }
 }
 
 
Như bạn có thể thấy, bảng người dùng có bản ghi riêng và bảng ô tô có bản ghi riêng. Ứng dụng Hibernate đầu tiên của bạn - 13Ứng dụng Hibernate đầu tiên của bạn - 14Hãy thử đổi tên người dùng của chúng tôi. Xóa bảng người dùng và thực thi mã

 import models.Auto;
 import models.User;
 import services.UserService;
 
 import java.sql.SQLException;
 
 public class Main {
     public static void main(String[] args) throws SQLException {
 
         UserService userService = new UserService();
         User user = new User ("Jenny", 26);
         userService.saveUser(user);
         Auto ferrari = new Auto("Ferrari", "red");
         user.addAuto(ferrari);
         Auto ford = new Auto("Ford", "black");
         ford.setUser(user);
         user.addAuto(ford);
         userService.updateUser(user);
         user.setName ("Benny");
         userService.updateUser(user);
     }
 }
 
 
Nó hoạt động! Ứng dụng Hibernate đầu tiên của bạn - 15Nếu bạn xóa người dùng thì sao? Xóa bảng người dùng (ô tô sẽ tự xóa) và thực thi mã

 import models.Auto;
 import models.User;
 import services.UserService;
 
 import java.sql.SQLException;
 
 public class Main {
     public static void main(String[] args) throws SQLException {
 
         UserService userService = new UserService();
         User user = new User ("Jenny", 26);
         userService.saveUser(user);
         Auto ferrari = new Auto("Ferrari", "red");
         user.addAuto(ferrari);
         Auto ford = new Auto("Ford", "black");
         ford.setUser(user);
         user.addAuto(ford);
         userService.updateUser(user);
         user.setName ("Benny");
         userService.updateUser(user);
         userService.deleteUser(user);
     }
 }
 
 
Và các bảng của chúng tôi hoàn toàn trống rỗng (hãy chú ý đến bảng điều khiển — tất cả các yêu cầu do Hibernate thực hiện sẽ được hiển thị ở đó). Bạn có thể nghịch ứng dụng và thử tất cả các chức năng của nó. Ví dụ: tạo người dùng có ô tô, lưu nó vào cơ sở dữ liệu, xem id được gán cho người dùng và thử sử dụng id này trongmain()phương thức tìm nạp người dùng từ cơ sở dữ liệu và hiển thị danh sách các ô tô của họ trên bảng điều khiển. Tất nhiên, chúng ta mới chỉ thấy một phần nhỏ chức năng của Hibernate. Các khả năng của nó rất rộng và từ lâu nó đã là một công cụ công nghiệp tiêu chuẩn để phát triển Java. Nếu bạn muốn nghiên cứu chi tiết về nó, tôi có thể giới thiệu cuốn sách "Java Persistence API and Hibernate". Tôi đã xem xét trong một bài viết trước. Tôi hy vọng bài viết này đã được hữu ích cho độc giả. Nếu bạn có câu hỏi, hãy hỏi họ trong phần bình luận. Tôi sẽ rất vui khi trả lời :) Ngoài ra, đừng quên ủng hộ tác giả trong cuộc thi bằng cách đăng "Thích". Hoặc tốt hơn nữa - "Yêu nó" :) Chúc bạn học tốt!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION