JDBC là khí cụ cổ hủ nhất, mộc mạc độc nhất vô nhị đỡ đần ta liên kết DataBase trong vận dụng Java. Và rồi Hibernate Ra đời, nó đem vào mình các nguyên lý hữu dụng giúp cho bài toán kết nối cùng với cơ sở dữ liệu một bí quyết thuận tiện, dễ ợt hơn.

Bạn đang xem: Hibernate java là gì

Thứ nhất tôi xin liệt kê một số "vấn đề" chạm chán đề nghị Khi áp dụng JDBC.

Ta nên lặp đi lặp lại hồ hết mẫu code như thể nhau vào ứng dụng chỉ để đưa tài liệu từ bỏ database.Chúng ta buộc phải vất vả vởi vấn đề bản đồ thân Object Java với những table khớp ứng vào database.Tốn những sức lực nhằm biến đổi tự hệ cai quản trị cơ sở dữ liệu này (MySQL) sang 1 hệ quản trị DataBase không giống (Oracle).Khó khăn vào bài toán sản xuất các giao tiếp/contact giữa những table, lập trình sẵn OOPs.

Nhưng với Hibernate ta rất có thể giải phóng được các "vấn đề" bên trên. Nhưng trước tiên ta xem xét lại những khái niệm cơ phiên bản JDBC cùng Hibernate là gì?

1. JDBC là gì?

JDBC là viết tắt của Java Database Connectivity, nó là áp dụng mã mối cung cấp msinh sống đến Java, giúp áp dụng Java tiến hành liên kết, thao tác làm việc với CSDL.Nó được cho phép ta tiến hành những thao tác chuy xuất, update dữ liệu với CSDL tình dục bởi Việc thực hiện những câu lệnh SQL.

JDBC Workflow

*
Ứng dụng Java thực hiện JDBC thao tác làm việc cùng với cơ sở dữ liệu trải qua trình từ 7 bước như sau.

Tạo liên kết mang đến databaseGửi SQL query mang đến database thực hiện JDBC driver tương ứngJDBC driver kết nối mang lại databaseThực thi câu lệnh query để mang hiệu quả trả về (số bản ghi mang được, số phiên bản ghi được update/delete)Gửi tài liệu mang đến áp dụng trải qua Driver ManagerXử lý tài liệu trả vềĐóng (giải phóng) kế nối đến database

2. Hibernate là gì?

Hibernate là 1 trong những thỏng viện ORM (Object Relational Mapping) mã nguồn msống giúp lập trình sẵn viên viết vận dụng Java hoàn toàn có thể map các objects (pojo) cùng với hệ quản lí trị cơ sở tài liệu quan hệ tình dục,và hỗ trợ triển khai các định nghĩa xây dựng hướng đối tượng người tiêu dùng với cớ tài liệu quan hệ nam nữ.Hibernate Workflow

*
Persistence objectChính là các POJO object maps với những table tương xứng của cửa hàng dữ liệu quan hệ nam nữ. Nó như thể đầy đủ "thùng xe" cất dữ liệu từ ứng dụng để ghi xuống database, giỏi đựng dữ liệu sở hữu lên vận dụng từ database.Session FactoryLà một interface góp tạo nên session kết nối cho database bằng phương pháp phát âm các cấu hình vào Hibernate configuration. Mỗi một database đề nghị có một session factory. lấy một ví dụ nếu ta áp dụng MySquốc lộ, cùng Oracle đến vận dụng Java của bản thân thì ta cần có một session factory cho MySQL, cùng một session factory mang đến Oracle.File thông số kỹ thuật hibernate.cfg.xml có nlỗi sau.

hibernate-configuration>session-factory>property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>property name="hibernate.connection.url">jdbc:mysql://192.168.10.13:3306/dataproperty>property name="hibernate.connection.username">rootproperty>property name="hibernate.connection.password">rootproperty>property name="hibernate.connection.pool_size">10property>property name="show_sql">trueproperty>property name="dialect">org.hibernate.dialect.MySQLDialectproperty>property name="hibernate.current_session_context_class">threadproperty>session-factory>hibernate-configuration>Hibernate SessionMỗi một đối tượng session được Session factory tạo nên sẽ khởi tạo một kết nối đến database.TransationLà transaction bảo đảm tính toàn vẹn của phiên thao tác làm việc cùng với cớ ssinh sống tài liệu. Tức là trường hợp có một lỗi xẩy ra vào transaction thì tất cả những tác vụ tiến hành đang thất bại.QueryHibernate hỗ trợ các câu chuy vấn HQL (Hibernate Query Language) cho tới database với bản đồ hiệu quả trả về với đối tượng tương ứng của ứng dụng Java.

3. Sau đấy là những nguyên nhân khiến cho ta chọn Hibernate vậy bởi vì JDBC.

Xem thêm: On The Back Of Là Gì ? Nghĩa Của Từ Back Trong Tiếng Việt On The Back Of An Envelope Nghĩa Là Gì

1. Object Mapping

Với JDBC ta nên bản đồ các ngôi trường trong bảng cùng với các thuộc tính của Java object một biện pháp "thủ công". Với Hibernate vẫn cung cấp ta bản đồ một giải pháp "từ bỏ động" trải qua các tệp tin cấu hình maps XML hay được dùng các anotation.JDBC đã bản đồ Java object với table nhỏng sau.

//rs là ResultSet trả về từ câu query get dữ liệu bảng user.ListUser> users=new ArrayListUser>();while(rs.next()) User user = new User(); user.setUserId(rs.getString("UserId")); user.setName(rs.getString("FirstName")); user.setEmail(rs.getString(“Email”)); users.add(user); Cũng với table user kia áp dụng các anotaion để Hibernate có thể map một phương pháp "tự động" như sau.


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.gmail = 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 tầm nã vấn tương tự như SQL, HQL của Hibernate hỗ trợ không thiếu thốn các truy tìm vấn đa chừng như, Hquốc lộ "hiểu" các định nghĩa như kế thừa (inheritance), nhiều hình (polymorphysm), với links (association). Sau đó là ví dụ về câu lệnh Hquốc lộ.

...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 Name Salary"); while(sal.hasNext()) Object<> obj = (Object<>) sal.next(); System.out.println(obj<0>+" "+ obj<1>+ " "+ obj<2>); catch(Exception e) System.out.println(e.getMessage()); finally session.close();

3. Database Independent

Code sử dụng Hibernate là độc lập với hệ quản trị cửa hàng dữ liệu, tức thị ta ko yêu cầu đổi khác câu lệnh Hquốc lộ Lúc ta đưa tự hệ quản trị CSDL MySQL sang trọng Oracle, tuyệt các hệ cai quản trị DataBase khác... Do đó rất đơn giản để ta chuyển đổi cơ sở dữ liệu dục tình, đơn giản bằng phương pháp đổi khác báo cáo cấu hình hệ quản trị DataBase vào file thông số kỹ thuật.

//used MySQLproperty name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>// used Oracleproperty name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriverproperty>lấy ví dụ như khi ta mong rước 10 bạn dạng ghi tài liệu của một table từ 2 cơ sở dữ liệu khác nhauVới JDBC ta bao gồm câu truy vấn nlỗi sau.

#MySQLSELECT 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 tìm vấn không biến hóa với tất cả 2 CSDL.

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

4. Minimize Code Changes

lúc ta biến đổi (thêm) cột vào bảng,Với JDBC ta đề nghị biến hóa hầu như gì:

Thêm ở trong tính vào POJO class.Thay thay đổi method cất câu truy vấn "select", "insert", "update" để bổ sung cột new.cũng có thể có rất nhiều method, những class đựng những câu tróc nã vấn nhỏng bên trên.Với Hibernate ta chỉ cần:Thêm thuộc tính vào POJO class.Cập nhật Hibernate XML mapping tệp tin để thêm map column - property.Ta chỉ thay đổi tốt nhất 2 tệp tin trên.

5. Lazy Loading

Với hồ hết vận dụng Java làm việc cùng với các đại lý tài liệu to hàng ngàn triệu bạn dạng ghi, vấn đề có sử dụng Lazy loading trong truy xuất dữ liệu từ database đem về tiện ích không hề nhỏ. Nó hệt như vấn đề ta có thể bẻ từng mẫu đũa của bó đũa to lớn thay bởi vì bẻ cả bó đũa.lấy ví dụ như phần đông file tư liệu vị người tiêu dùng upload được lưu nghỉ ngơi bảng document. Bảng user có quan hệ một-các với bảng document. Trong ngôi trường vừa lòng này class User là class phụ thân, class Document là class con. Bảng document mau lẹ đầy lên theo thời gian. Mỗi lúc ta lấy thông tin user cùng docment khớp ứng trường đoản cú database trả sử dữ liệu document là không nhỏ, để áp dụng không bị lờ đờ bởi đề nghị mất nhiều bộ lưu trữ nhằm cất cục bộ document của toàn thể user, ta vận dụng Lazy loading đến từng user như sau.

// Declaring fetch type for one to many association in your POJO
OneToMany(mappedBy = "user", fetch = FetchType.LAZY)private Set documents = new HashSet();// To fetch user with document use initialize() method as followsUser 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 vứt Try-Catch Blocks

Sử dụng JDBC nếu như lỗi xảy Khi tao tác với database thì sẽ sở hữu được exception SQLexception phun ra. do đó ta buộc phải sử dụng try-catch bloông chồng để cách xử lý ngoại lệ.Hibernate cách xử lý vấn đề này khiến cho bạn bằng cách nó override toàn bộ JDBC exception thành Unkiểm tra xeption, và ta không đề nghị viết try-catch vào code của bản thân mình nữa.

7. Quản lý commit/rollback Transaction

*
Transaction là đội các hoạt động (với database) của một tác vụ. Nếu một vận động ko thành công xuất sắc thì toàn thể tác vụ không thành công xuất sắc.Với JDBC lập trình sẵn viên phải chủ động tiến hành commit Khi toàn cục hoạt động vui chơi của tác vụ thành công xuất sắc, tốt yêu cầu rollbaông xã Lúc tất cả một vận động không thành công để dứt tác vụ.Với Hibernate thì ta không yêu cầu quyên tâm đến commit hay rollbaông chồng, Hibernate đang quản lý nó giúp chúng ta rồi.

8. Hibernate Caching

*
Hibernate cung ứng một chế độ bộ nhớ đệm, góp sút tần số truy cập vào database của ứng dụng càng các càng giỏi. Vấn đề này sẽ có được tính năng tăng performance đáng kể mang đến áp dụng của khách hàng. Hibernate lưu trữ các đối tượng vào session lúc transation được kích hoạt. Khi một query được triển khai tiếp tục, quý giá được tàng trữ trong session được áp dụng lại. khi một transaction new bước đầu, tài liệu được lấy lại từ bỏ database với được lưu trữ session. Hibernate cung cấp nhì cấp độ Cach, bản thân sẽ có được bài bác chi tiết hơn về Cach trong Hibernate.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *