Những lý do khiến ta chọn Hibernate thay vì JDBC

Chúng tôi rất vui mừng chia sẻ kiến thức về từ khóa Hibernate la gi và hy vọng rằng nó sẽ hữu ích cho bạn đọc. Bài viết tập trung trình bày ý nghĩa, vai trò và ứng dụng của từ khóa này trong việc tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Chúng tôi cung cấp các phương pháp tìm kiếm, phân tích và lựa chọn từ khóa phù hợp, cùng với các chiến lược và công cụ hữu ích. Hy vọng rằng thông tin mà chúng tôi chia sẻ sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Xin chân thành cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog của chúng tôi để cập nhật những kiến thức mới nhất.

JDBC là dụng cụ thô sơ nhất, mộc mạc nhất giúp ta kết nối CSDL trong ứng dụng Java. Và rồi Hibernate Thành lập, nó mang trong mình nhiều dụng cụ hữu ích hỗ trợ cho việc kết nối với CSDL một kiểu thuận tiện, đơn giản dễ dàng hơn.

Bạn Đang Xem: Những lý do khiến ta chọn Hibernate thay vì JDBC

Trước tiên tôi xin liệt kê một vài “vấn đề” gặp phải khi tận dụng JDBC.

  • Ta phải lặp đi tái diễn những dòng code giống nhau trong ứng dụng chỉ để lấy tài liệu từ database.
  • Mọi người phải vất vả vởi việc map giữa Object Java với những table tương ứng trong database.
  • Tốn nhiều công sức của con người để thay đổi từ hệ quản trị CSDL này (MySQL) sang một hệ quản trị CSDL khác (Oracle).
  • Khó khăn trong việc tạo những tiếp xúc/liên hệ giữa những table, lập trình OOPs.

Tuy vậy với Hibernate ta hoàn toàn có thể hóa giải được những “vấn đề” trên. Nhưng trước tiên ta xem lại những khái niệm cơ bạn dạng JDBC và Hibernate là gì?

1. JDBC là gì?

JDBC là viết tắt của Java Database Connectivity, nó là ứng dụng mã nguồn mở cho Java, giúp ứng dụng Java tiến hành kết nối, thao tác làm việc với CSDL. Nó được chấp nhận ta tiến hành những thao tác chuy xuất, update tài liệu với CSDL quan hệ bằng việc tận dụng những câu lệnh SQL.

JDBC Workflow Ứng dụng Java tận dụng JDBC thao tác làm việc với CSDL trải qua trình tự 7 bước như sau.

  1. Tạo kết nối đến database
  2. Gửi SQL query đến database tận dụng JDBC driver tương ứng
  3. JDBC driver kết nối đến database
  4. Thực thi câu lệnh query để lấy thành phẩm trả về (số bạn dạng ghi lấy được, số bạn dạng ghi được update/delete)
  5. Gửi tài liệu đến ứng dụng trải qua Driver Manager
  6. Xử lý tài liệu trả về
  7. Đóng (phóng thích) kế nối đến database

2. Hibernate là gì?

Hibernate là một thư viện ORM (Object Relational Mapping) mã nguồn mở giúp lập trình viên viết ứng dụng Java hoàn toàn có thể map những objects (pojo) với hệ quản trị cơ sở tài liệu quan hệ, và tương trợ tiến hành những khái niệm lập trình hướng đối tượng người tiêu dùng với cớ tài liệu quan hệ. Hibernate Workflow Persistence object Đó là những POJO object map với những table tương ứng của cơ sở tài liệu quan hệ. Nó như thể những “thùng xe” chứa tài liệu từ ứng dụng để ghi xuống database, hay chứa tài liệu tải lên ứng dụng từ database. Session Factory Là một interface giúp tiết ra session kết nối đến database bằng phương pháp đọc những thông số kỹ thuật trong Hibernate configuration. Mỗi một database phải có một session factory. Ví dụ nếu ta tận dụng MySQL, và Oracle cho ứng dụng Java của tớ thì ta cần phải có một session factory cho MySQL, và một session factory cho Oracle. File thông số kỹ thuật hibernate.cfg.xml có như sau.

<?xml version=’1.0′ encoding=’utf-8′?> <!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate Configuration DTD//EN” “http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd”> <hibernate-configurationandgt; <session-factoryandgt; <property name=”hibernate.connection.driver_class”>com.mysql.jdbc.Driverandlt;/propertyandgt; <property name=”hibernate.connection.url”>jdbc:mysql://192.168.10.13:3306/data </propertyandgt; <property name=”hibernate.connection.username”>rootandlt;/propertyandgt; <property name=”hibernate.connection.password”>rootandlt;/propertyandgt; <property name=”hibernate.connection.pool_size”>10andlt;/propertyandgt; <property name=”show_sql”>trueandlt;/propertyandgt; <property name=”dialect”>org.hibernate.dialect.MySQLDialectandlt;/propertyandgt; <property name=”hibernate.current_session_context_class”>threadandlt;/propertyandgt; </session-factoryandgt; </hibernate-configurationandgt;

Hibernate Session Mỗi một đối tượng người tiêu dùng session được Session factory tiết ra sẽ tạo một kết nối đến database. Transation Là transaction lành mạnh tính toàn vẹn của phiên thao tác làm việc với cớ sở tài liệu. Tức là nếu có một lỗi xẩy ra trong transaction thì tất cả những tác vụ tiến hành sẽ thất bại. Query Hibernate hỗ trợ những câu chuy vấn HQL (Hibernate Query Language) tới database và map thành phẩm trả về với đối tượng người tiêu dùng tương ứng của ứng dụng Java.

3. Sau đấy là những lý do khiến ta chọn Hibernate thay vì JDBC.

1. Object Mapping

Xem Thêm : Thyristor SCR là gì?, nguyên lý hoạt động, ứng dụng của Thyristor

Với JDBC ta phải map những trường trong bảng với những tính chất của Java object một kiểu “thủ công”. Với Hibernate sẽ tương trợ ta map một kiểu “tự động hóa” trải qua những file thông số kỹ thuật map XML hay tận dụng những anotation. JDBC sẽ map Java object với table như sau.

//rs là ResultSet trả về từ câu query get tài liệu bảng user. Listandlt;Userandgt; users=new ArrayListandlt;Userandgt;(); while(rs.next()) { User user = new User(); user.setUserId(rs.getString(“UserId”)); user.setName(rs.getString(“FirstName”)); user.setEmail(rs.getString(“E-Mail”)); users.add(user); }

Cũng với table user đó tận dụng những anotaion để Hibernate hoàn toàn có thể map một kiểu “tự động hóa” như sau.

@Entity @Table(name = “user”) public class UserModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private BigInteger id; @NotEmpty @Column(name = “email”, unique = true) private String email; @NotEmpty @Column(name = “name”) private String name; public BigInteger getId() { return this.id; } public void setId(BigInteger id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }

2. HQL

Hibernate hỗ trợ những câu lệnh truy vấn tương tự SQL, HQL của Hibernate tương trợ không thiếu những truy vấn đa hình như, HQL “hiểu” những khái niệm như thừa kế (inheritance), đa hình (polymorphysm), và liên kết (association). Sau đấy là ví dụ về câu lệnh HQL.

… Session session = null; try { session = sessionFactory.openSession(); Query query = session.createQuery(“select s.empId, s.name, s.salary from Salary s “); Iterator sal = query.iterate(); System.out.println(“EmpId t Name t Salary”); while(sal.hasNext()) { Object[] obj = (Object[]) sal.next(); System.out.println(obj[0]+” t “+ obj[1]+ ” t “+ obj[2]); } } catch(Exception e) { System.out.println(e.getMessage()); } finally { session.close(); }

3. Database Independent

Code tận dụng Hibernate là độc lập với hệ quản trị cơ sở tài liệu, tức là ta không cần thay đổi câu lệnh HQL khi ta chuyển từ hệ quản trị CSDL MySQL sang Oracle, hay những hệ quản trị CSDL khác… Do đó rất dễ để ta thay đổi CSDL quan hệ, giản dị bằng phương pháp thay đổi thông tin thông số kỹ thuật hệ quản trị CSDL trong file thông số kỹ thuật.

//used MySQL <property name=”hibernate.connection.driver_class”>com.mysql.jdbc.Driverandlt;/propertyandgt; // used Oracle <property name=”hibernate.connection.driver_class”>oracle.jdbc.driver.OracleDriverandlt;/propertyandgt;

Ví dụ khi ta muốn lấy 10 bạn dạng ghi tài liệu của một table từ 2 CSDL không giống nhau Với JDBC ta có câu truy vấn như sau.

Xem Thêm : KT3 là gì? Thủ tục đăng ký và những điều cần biết về KT3

#MySQL SELECT column_name FROM table_name ORDER BY column_name ASC LIMIT 10; #SQL Server SELECT TOP 10 column_name FROM table_name ORDER BY column_name ASC;

Với Hibernate câu truy vấn không thay đổi với cả hai CSDL.

Session.CreateQuery(“SELECT E.id FROM Employee E ORDER BY E.id ASC”).SetMaxResults(10).List();

4. Minimize Code Changes

Khi ta thay đổi (thêm) cột vào bảng, Với JDBC ta phải thay đổi những gì:

  • Thêm tính chất vào POJO class.
  • Thay đổi method chứa câu truy vấn “select”, “insert”, “update” để bổ sung cập nhật cột mới. Rất có thể có rất nhiều method, nhiều class chứa những câu truy vấn như trên. Với Hibernate ta chỉ việc:
  • Thêm tính chất vào POJO class.
  • Update Hibernate XML mapping file để thêm map column – property. Ta chỉ thay đổi duy nhất 2 file trên.

5. Lazy Loading

Với những ứng dụng Java thao tác làm việc với cơ sở tài liệu lớn hàng trăm triệu bạn dạng ghi, việc có tận dụng Lazy loading trong truy xuất tài liệu từ database mang lại lợi ích rất rộng. Nó tựa như việc ta hoàn toàn có thể bẻ từng chiếc đũa của bó đũa to thay vì bẻ cả bó đũa. Ví dụ những file tài liệu do người tiêu dùng upload được lưu ở bảng document. Bảng user có quan hệ một-nhiều với bảng document. Trong trường hợp này class User là class thân phụ, class Document là class con. Bảng document nhanh gọn đầy lên theo thời hạn. Mỗi một khi ta lấy thông tin user và docment tương ứng từ database giả sử tài liệu document là rất rộng, để ứng dụng không xẩy ra chậm vì phải mất nhiều bộ nhớ để chứa toàn bộ document của toàn bộ user, ta ứng dụng Lazy loading cho từng user như sau.

// Declaring fetch type for one to many association in your POJO @OneToMany(mappedBy = “user”, fetch = FetchType.LAZY) private Setandlt;Documentandgt; documents = new HashSetandlt;Documentandgt;(); // To fetch user with document use initialize() method as follows User user = (User)session.get(User.class, new Integer(100)); //This code will fetch all products for user 100 from database ‘NOW’ documents = user.getDocuments();

6. Loại bỏ Try-Catch Blocks

Tận dụng JDBC nếu lỗi xảy khi tao tác với database thì sẽ được exception SQLexception bắn ra. Vì thế ta phải tận dụng try-catch block để xử lý ngoại lệ. Hibernate xử lý việc này giúp fan bằng phương pháp nó override toàn bộ JDBC exception thành Uncheck xeption, và ta không cần viết try-catch trong code của tớ nữa.

7. Quản lý và vận hành commit/rollback Transaction

Transaction là nhóm những hoạt động và sinh hoạt (với database) của một tác vụ. Nếu một hoạt động và sinh hoạt không thành công thì toàn bộ tác vụ không thành công. Với JDBC lập trình viên phải dữ thế chủ động tiến hành commit khi toàn bộ hoạt động và sinh hoạt của tác vụ thành công, hay phải rollback khi có một hoạt động và sinh hoạt không thành công để kết thúc tác vụ. Với Hibernate thì ta không cần quan tâm đến commit hay rollback, Hibernate đã vận hành nó giúp ta rồi.

8. Hibernate Caching

Hibernate hỗ trợ một cơ chế bộ nhớ đệm, giúp làm giảm số lần truy vấn vào database của ứng dụng càng nhiều càng tốt. Điều này sẽ được tác dụng tăng performance đáng kể cho ứng dụng của fan. Hibernate lưu trữ những đối tượng người tiêu dùng trong session khi transation được kích hoạt. Khi một query được tiến hành liên tục, giá trị được lưu trữ trong session được tận dụng lại. Khi một transaction mới chính thức, tài liệu được lấy lại từ database và được lưu trữ session. Hibernate hỗ trợ hai Lever Cach, mình sẽ được bài cụ thể hơn về Cach trong Hibernate.

Tài liệu xem thêm

  • Dzone
  • Way2Java
  • HowToDoInJava

You May Also Like

About the Author: v1000