Hibernate java là gì

JDBC là nguyên lý cổ hủ độc nhất vô nhị, mộc mạc nhất tạo điều kiện cho ta kết nối DataBase trong áp dụng Java. Và rồi Hibernate ra đời, nó sẽ đem vào mình nhiều chế độ có lợi hỗ trợ cho bài toán kết nối với cơ sở dữ liệu một cách dễ dàng, thuận lợi hơn.

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

Trước hết tôi xin liệt kê một trong những "vấn đề" chạm chán buộc phải khi thực hiện JDBC.

Ta đề nghị lặp đi tái diễn rất nhiều loại code giống như nhau trong vận dụng chỉ để đưa dữ liệu trường đoản cú database.Chúng ta nên vất vả vởi việc map giữa Object Java với các table tương ứng vào database.Tốn các sức lực để biến đổi tự hệ quản ngại trị CSDL này (MySQL) sang 1 hệ quản ngại trị cơ sở dữ liệu không giống (Oracle).Khó khăn trong bài toán tạo những giao tiếp/liên hệ giữa các table, xây dựng OOPs.

Nhưng cùng với Hibernate ta có thể giải hòa được các "vấn đề" bên trên. Nhưng trước tiên ta xem xét lại các có mang cơ bạn dạng JDBC cùng 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 msống mang đến Java, góp ứng dụng Java triển khai liên kết, làm việc với DataBase.Nó cho phép ta thực hiện các làm việc chuy xuất, update dữ liệu với CSDL quan hệ tình dục bởi câu hỏi sử dụng các câu lệnh SQL.

JDBC Workflow

*
Ứng dụng Java sử dụng JDBC thao tác với DataBase thông qua trình từ bỏ 7 bước như sau.

Tạo liên kết cho databaseGửi SQL query đế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 để đưa kết quả trả về (số phiên bản ghi rước được, số bản ghi được update/delete)Gửi tài liệu mang đến ứng dụng trải qua Driver ManagerXử lý tài liệu trả vềĐóng (giải phóng) kế nối cho database

2. Hibernate là gì?

Hibernate là 1 thỏng viện ORM (Object Relational Mapping) mã nguồn mnghỉ ngơi góp lập trình sẵn viên viết áp dụng Java hoàn toàn có thể map các objects (pojo) với hệ quản ngại trị đại lý dữ liệu quan hệ,với cung cấp thực hiện các có mang xây dựng phía đối tượng người sử dụng cùng với cớ dữ liệu quan hệ tình dục.Hibernate Workflow

*
Persistence objectChính là các POJO object bản đồ cùng với các table tương ứng của đại lý dữ liệu quan hệ. Nó như thể mọi "thùng xe" đựng dữ liệu từ áp dụng nhằm ghi xuống database, tốt chứa tài liệu cài lên áp dụng tự database.Session FactoryLà một interface giúp tạo nên session liên kết cho database bằng phương pháp phát âm những thông số kỹ thuật vào Hibernate configuration. Mỗi một database nên tất cả một session factory. Ví dụ ví như ta sử dụng MySquốc lộ, với Oracle mang lại ứng dụng Java của chính bản thân mình thì ta cần có một session factory mang lại MySquốc lộ, và một session factory đến Oracle.File cấu hình 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 người dùng session được Session factory tạo nên sẽ tạo một liên kết cho database.TransationLà transaction bảo vệ tính toàn vẹn của phiên làm việc với cớ ssinh hoạt dữ liệu. Tức là ví như gồm một lỗi xảy ra vào transaction thì tất cả những tác vụ thực hiện sẽ không thắng cuộc.QueryHibernate cung cấp những câu chuy vấn HQL (Hibernate Query Language) tới database cùng map công dụng trả về cùng với đối tượng người tiêu dùng khớp ứng của ứng dụng Java.

3. Sau đây là những nguyên do khiến ta lựa chọn Hibernate cố vì JDBC.

Xem thêm: Giải Mã Bọ Hung Bay Vào Nhà Là Điềm Gì? Bọ Hung Bay Vào Nhà Là Điềm Báo Gì, Có Sao Không

1. Object Mapping

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

//rs là ResultSet trả về từ bỏ câu query get tài 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 đó thực hiện những anotaion để Hibernate hoàn toàn có thể maps một bí quyết "tự động" nlỗi 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.email = email; public String getName() return this.name; public void setName(String name) this.name = name; }

2. HQL

Hibernate cung ứng các câu lệnh truy tìm vấn tương tự SQL, HQL của Hibernate cung ứng tương đối đầy đủ những truy hỏi vấn đa hình như, Hquốc lộ "hiểu" những tư tưởng nlỗi thừa kế (inheritance), đa hình (polymorphysm), và links (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 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à hòa bình với hệ quản ngại trị đại lý dữ liệu, tức thị ta không buộc phải chuyển đổi câu lệnh HQL lúc ta gửi từ hệ quản trị CSDL MySquốc lộ quý phái Oracle, tuyệt những hệ cai quản trị DataBase không giống... Do đó rất giản đơn nhằm ta thay đổi CSDL quan hệ tình dục, dễ dàng bằng cách đổi khác thông báo cấu hình hệ quản lí trị cơ sở dữ liệu 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 một ví dụ lúc ta mong mỏi đem 10 bản ghi dữ liệu của một table từ bỏ 2 cơ sở dữ liệu không giống nhauVới JDBC ta có câu truy vấn vấn như sau.

#MySQLSELECT column_name FROM table_name ORDER BY column_name ASC LIMIT 10; #SQL Server SELECT TOPhường 10 column_name FROM table_name ORDER BY column_name ASC;Với Hibernate câu truy hỏi vấn ko đổi khác với cả 2 DataBase.

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

4. Minimize Code Changes

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

Thêm nằm trong tính vào POJO class.Ttuyệt đổi method cất câu tầm nã vấn "select", "insert", "update" để bổ sung cột new.cũng có thể có khá nhiều method, các class chứa các câu truy vấn nlỗi 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 file để thêm maps column - property.Ta chỉ biến hóa tuyệt nhất 2 tệp tin bên trên.

5. Lazy Loading

Với mọi vận dụng Java thao tác với cơ sở dữ liệu béo hàng ngàn triệu bản ghi, Việc gồm sử dụng Lazy loading vào truy hỏi xuất tài liệu từ bỏ database đem lại tiện ích rất lớn. Nó y như câu hỏi ta hoàn toàn có thể bẻ từng cái đũa của bó đũa lớn vậy vày bẻ cả bó đũa.Ví dụ các file tài liệu vày người tiêu dùng upload được lưu giữ ở bảng document. Bảng user tất cả quan hệ một-các với bảng document. Trong trường hòa hợp này class User là class phụ thân, class Document là class nhỏ. Bảng document hối hả đầy lên theo thời hạn. Mỗi khi ta lấy thông báo user cùng docment tương xứng từ database trả sử dữ liệu document là rất lớn, nhằm áp dụng không trở nên chậm rì rì bởi vì bắt buộc mất quá nhiều bộ lưu trữ nhằm cất tổng thể document của toàn cục user, ta áp dụng Lazy loading đến từng user như sau.

// Declaring fetch type for one khổng lồ 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 quăng quật Try-Catch Blocks

Sử dụng JDBC nếu lỗi xảy lúc tao tác với database thì sẽ có được exception SQLexception phun ra. vì vậy ta bắt buộc sử dụng try-catch bloông xã nhằm cách xử lý ngoại lệ.Hibernate cách xử trí việc này khiến cho bạn bằng cách nó override tổng thể JDBC exception thành Uncheck xeption, cùng ta ko buộc phải viết try-catch trong code của mình nữa.

7. Quản lý commit/rollback Transaction

*
Transaction là đội những chuyển động (cùng với database) của một tác vụ. Nếu một chuyển động ko 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 chủ động triển khai commit Khi cục bộ buổi giao lưu của tác vụ thành công, giỏi đề xuất rollbaông chồng Lúc gồm một vận động ko thành công xuất sắc nhằm chấm dứt tác vụ.Với Hibernate thì ta ko yêu cầu quyên tâm mang đến commit tuyệt rollbachồng, Hibernate sẽ quản lý nó giúp ta rồi.

8. Hibernate Caching

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