JDBC là chế độ thô sơ duy nhất, mộc mạc độc nhất vô nhị hỗ trợ chúng ta kết nối DataBase vào vận dụng Java. Và rồi Hibernate thành lập và hoạt động, nó sẽ đem vào mình nhiều vẻ ngoài có ích giúp cho Việc kết nối cùng với DataBase một bí quyết dễ ợt, dễ dãi rộng.
Bạn đang xem: Hibernate là gì
Thứ nhất tôi xin liệt kê một số "vấn đề" chạm mặt bắt buộc khi thực hiện JDBC.
Ta đề nghị lặp đi tái diễn những dòng code như thể nhau vào áp dụng chỉ để đưa tài liệu từ bỏ database.Chúng ta yêu cầu vất vả vởi việc map giữa Object Java với các table tương xứng trong database.Tốn nhiều công sức của con người để biến hóa từ hệ quản lí trị DataBase này (MySQL) qua một hệ quản trị DataBase không giống (Oracle).Khó khnạp năng lượng vào bài toán sinh sản những giao tiếp/contact thân những table, thiết kế OOPs.Nhưng với Hibernate ta hoàn toàn có thể giải tỏa được các "vấn đề" bên trên. Nhưng trước tiên ta xem lại những có mang cơ phiên bản JDBC với Hibernate là gì?
1. JDBC là gì?
JDBC là viết tắt của Java Database Connectivity, nó là ứng dụng mã mối cung cấp msống đến Java, giúp áp dụng Java triển khai kết nối, thao tác làm việc với cơ sở dữ liệu.Nó chất nhận được ta thực hiện các thao tác làm việc chuy xuất, update dữ liệu cùng với DataBase quan hệ giới tính bằng Việc sử dụng các câu lệnh Squốc lộ.
JDBC Workflow

2. Hibernate là gì?
Hibernate là một trong thư viện ORM (Object Relational Mapping) mã mối cung cấp mnghỉ ngơi góp lập trình viên viết ứng dụng Java có thể map những objects (pojo) với hệ quản trị các đại lý dữ liệu tình dục,với cung ứng triển khai những có mang thiết kế phía đối tượng người dùng với cớ tài liệu quan hệ tình dục.Hibernate Workflow

3. Sau đó là các nguyên do khiến cho ta chọn Hibernate thay vày JDBC.
1. Object Mapping
Với JDBC ta đề xuất map những ngôi trường vào bảng với những trực thuộc tính của Java object một phương pháp "thủ công". Với Hibernate đã hỗ trợ ta map một biện pháp "từ bỏ động" trải qua các file cấu hình maps XML hay được dùng những anotation.JDBC đã bản đồ Java object với table nlỗi sau.
Xem thêm: Tên Tiếng Anh Cục Cảnh Sát Tiếng Anh Là Gì ? Cục Cảnh Sát Tiếng Anh Là Gì
//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 nhằm Hibernate hoàn toàn có thể bản đồ một giải pháp "từ bỏ độ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.tin nhắn = email; public String getName() return this.name; public void setName(String name) this.name = name; }
2. HQL
Hibernate cung ứng những câu lệnh truy vấn vấn tương tự Squốc lộ, HQL của Hibernate cung cấp vừa đủ những truy nã vấn nhiều dường như, HQL "hiểu" các quan niệm nlỗi kế thừa (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 áp dụng Hibernate là hòa bình cùng với hệ quản lí trị cơ sở dữ liệu, nghĩa là ta không yêu cầu biến đổi câu lệnh Hquốc lộ lúc ta đưa tự hệ quản lí trị CSDL MySQL lịch sự Oracle, giỏi những hệ quản ngại trị DataBase khác... Do kia rất dễ nhằm ta chuyển đổi DataBase quan hệ giới tính, dễ dàng và đơn giản bằng cách chuyển đổi biết tin cấu hình hệ quản ngại trị cơ sở dữ liệu vào file cấu hình.//used MySQLproperty name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>// used Oracleproperty name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriverproperty>ví dụ như Khi ta mong mang 10 bạn dạng ghi dữ liệu của một table từ bỏ 2 DataBase không giống nhauVới JDBC ta bao gồm câu truy hỏi 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 nã vấn không thay đổi đối với tất cả 2 cơ sở dữ liệu.
Session.CreateQuery("SELECT E.id FROM Employee E ORDER BY E.id ASC").SetMaxResults(10).List();
4. Minimize Code Changes
khi ta biến hóa (thêm) cột vào bảng,Với JDBC ta buộc phải biến đổi đông đảo gì:Thêm nằm trong tính vào POJO class.Ttốt đổi method cất câu truy tìm vấn "select", "insert", "update" để bổ sung cột bắt đầu.Có thể có khá nhiều method, các class cất những câu truy vấn nhỏng trên.Với Hibernate ta chỉ cần:Thêm trực thuộc tính vào POJO class.Cập nhật Hibernate XML mapping tệp tin để thêm maps column - property.Ta chỉ đổi khác độc nhất 2 file bên trên.5. Lazy Loading
Với hầu hết áp dụng Java làm việc với cửa hàng tài liệu mập hàng ngàn triệu bạn dạng ghi, bài toán bao gồm sử dụng Lazy loading vào truy tìm xuất tài liệu từ database mang về ích lợi rất to lớn. Nó giống như vấn đề ta rất có thể bẻ từng mẫu đũa của bó đũa to cụ bởi vì bẻ cả bó đũa.Ví dụ phần đông file tài liệu bởi người tiêu dùng upload được lưu giữ làm việc bảng document. Bảng user bao gồm tình dục một-các cùng với bảng document. Trong trường hợp này class User là class thân phụ, class Document là class nhỏ. Bảng document mau lẹ đầy lên theo thời gian. Mỗi Lúc ta rước công bố user với docment tương ứng từ bỏ database trả sử dữ liệu document là không nhỏ, nhằm áp dụng không trở nên chậm rãi bởi đề nghị mất quá nhiều bộ nhớ lưu trữ nhằm cất toàn cục document của toàn cục user, ta vận dụng Lazy loading mang lại từng user nhỏng 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 bỏ Try-Catch Blocks
Sử dụng JDBC ví như lỗi xảy lúc tao tác cùng với database thì sẽ sở hữu được exception SQLexception phun ra. do vậy ta bắt buộc thực hiện try-catch bloông xã nhằm giải pháp xử lý nước ngoài lệ.Hibernate xử trí vấn đề này khiến cho bạn bằng phương pháp nó override toàn bộ JDBC exception thành Unkiểm tra xeption, và ta ko đề nghị viết try-catch vào code của chính bản thân mình nữa.7. Quản lý commit/rollbachồng Transaction

8. Hibernate Caching
