TopDev
Sort by
1 results
HIGHLIGHT COMPANY

COMPANY INFORMATION

job-imageNgân hàng TMCP Hàng Hải Việt Nam (MSB)MSB - Cùng vươn tầm
Thành phố Hà Nội, Thành phố Hồ Chí Minh Hơn 1000

RELATED POSTS

Marketplace Illustration
Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate

Bài viết được sự cho phép của tác giả Lê Hồng Kỳ Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate sẽ bao gồm 4 xử lý cơ bản đó là thêm (C), lấy dữ liệu (R), cập nhật dữ liệu (U) và xóa dữ liệu (D). Trong những bài hướng dẫn trước, chúng tôi đã trình bày cách tạo một Web application với Spring MVC nhưng chưa có phần xử lý database. Và để xử lý database, chúng ta phải cần đến Hibernate. Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate – Các bước thực hiện 1/ Tạo một Maven Web Application Project Các bạn có thể tạo mới một Project. Trong bài hướng dẫn này, chúng tôi sử dụng lại project của bài Hướng dẫn validation trong Spring MVC 5 2/ Mở file pom.xml và thêm dependency <!-- Spring ORM --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.1.0.RELEASE</version> </dependency> <!-- Hibernate Core --> <dependency> <groupId>org.hibernate</groupId& [...]

Marketplace Illustration
Hibernate Batch Processing là gì? Batch Processing trong Hibernate

Bài viết được sự cho phép của tác giả Trần Hữu Cương 1. Hibernate Batch Processing là gì? Ta có tình huống như sau: cần insert 10000 bản ghi vào database Nếu insert lần lượt và đẩy từng đối tượng một thì thời gian sẽ rất lâu vì phải mở/đóng connection nhiều lần Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); session.flush(); session.clear(); } tx.commit(); session.close(); Nếu insert và đẩy đồng thời cùng 1 lúc 10000 bản ghi thì sẽ xảy ra lỗi OutOfMemoryException (Lý do là hibernate sẽ lưu tất cả 10000 bản ghi vào bộ nhớ cache nhưng bộ nhớ cache không đủ) Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); } tx.commit(); session.close(); => Giải pháp: Batch Processing Vậy Batch Processing là gi? Batch Processing là xử lý theo lô, tức là ta sẽ insert và đẩy từng lô bản ghi vào database. Ví dụ ở đây ta sẽ insert và đẩy 50 bản ghi vào database cùng 1 lúc, như thế sẽ giảm số lượng connection tới database, đồng thời trá [...]

Marketplace Illustration
Phân biệt save, persist, update, merge, saveOrUpdate trong hibernate

Bài viết được sự cho phép của tác giả Trần Hữu Cương Ở bài này chúng ta sẽ thảo luận về sự khác nhau giữa vài method của Session interface: save, persist, update, merge, saveOrUpdate. (Các framework ORM khác có thể không dùng interface session mà dùng interface entityManager nên sẽ có sự khác nhau giữa tên của các method) 1. Session là 1 cài đặt của Persitence Context Session interface có một và method thực hiện lưu dữ liệu vào database như persist, save, update, merge, saveOrUpdate. Để hiểu sự khác nhau giữa những method này trước hết ta cần phải hiểu mục đích của Session interface và các trạng thái/quan hệ của 1 thể hiện entity với Session Chúng ta cũng nên hiểu một chút về lịch sử phát triển của Hibernate, điều gì dẫn tới sự trùng lặp một số API method. 1.1. Quản lý các thể hiện entity Ngoài mối quan hệ giữa các object, một vấn đề khác được Hibernate dự định giải quyết là vấn đề quản [...]

Marketplace Illustration
Các lưu ý về strategy của GeneratedValue khi sử dụng hibernate

Bài viết được sự cho phép của tác giả Trần Văn Dem Hiện nay việc tìm kiếm các hướng dẫn về sử dụng hibernate, spring jpa là rất dễ. Tuy nhiên các hướng dẫn này thường chỉ giới thiệu cách sử dụng, quản lý Id của Entity thông qua strategy : AUTO,TABLE,SEQUENCE,IDENTITY. Nhưng rất ít hoặc rất khó tìm bài hướng dẫn nào nói cụ thể về các kiểu strategy này và cách sử dụng hiệu trong dự án. Bài viết này tôi sẽ giúp các bạn hiểu rõ hơn về các loại strategy này từ đó có thể tự tin lựa chọn trong project tránh các lỗi không đáng có. 1. sequence vs auto_increment Trước khi tìm hiểu về các loại strategy thì chúng ta nên phân biệt các loại dữ liệu này. Trước tiên thì 2 loại này sẽ là cách cơ sở dữ liệu của bạn dùng để tạo id cho bảng lưu trữ dữ liệu. auto increment Cá [...]

Marketplace Illustration
Cài đặt và sử dụng Hibernate

Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước chúng ta đã cùng tìm hiểu các khái niệm về JPA và Hibernate. Trong bài này, chúng ta sẽ cùng tìm hiểu cách cài đặt và sử dụng Hibernate. Để sử dụng Hibernate, chúng ta sẽ lần lượt thực hiện các bước sau: Tạo maven project. Khai báo thư viện Hibernate và thư viện JDBC ứng với loại database cần sử dụng. Tạo các Entity và các mapping. Tạo file cấu hình Hibernate. Tạo đối tượng SessionFactory Sử dụng SessionFactory để thực hiện các câu lệnh truy vấn đến database. [irp posts="40410" name="Hibernate Batch processing"] [irp posts="40216" name="Hibernate Interceptor & StatementInspector"] Xem thêm nhiều việc làm Data Engineer lương cao trên TopDev Cài đặt Hibernate Tạo maven project và trong file pom.xml khai báo thư viện Hibernate 5, và thư viện JDBC tương ứng cho các loại Database khác nhau MySQL, PostgreSQL, Oracle, SQL Server, … Trong bài này, tôi sẽ sử dụng database MySQL. Nội dung file pom.xml  [...]

Marketplace Illustration
Hibernate mapping type

Bài viết được sự cho phép của tác giả Giang Phan Khi tạo Entity trong Hibernate, chúng ta phải ánh xạ (mapping) các kiểu dữ liệu Java vào các kiểu dữ liệu trong database. Việc mapping này rất quan trọng, nó giúp Hibernate có thể chuyển đổi từ kiểu dữ liệu Java sang SQL và ngược lại một cách chính xác. Trong bài này, tôi sẽ tổng hợp lại các kiểu dữ liệu tương ứng giữa Java, Hibernate và JDBC. [irp posts="44690" name="Các Annotation của Hibernate"] [irp posts="40576" name="Hibernate Cache"] Các kiểu dữ liệu nguyên thủy Mapping type Java type JDBC type Hibernate type (org.hibernate.type package) integer int hoặc java.lang.Integer INTEGER IntegerTypes long long hoặc java.lang.Long BIGINT LongType short short hoặc java.lang.Short SMALLINT ShortType float float hoặc java.lang.Float FLOAT FloatType double double hoặc java.lang.Double DOUBLE DoubleType big_decimal java.math.BigDecimal NUMERIC BigDecimalType character java.lang.String CHAR(1) CharacterType string java.lang.String VARCHAR StringType byte byte hoặc java.lang.Byte TINYINT ByteType boolean boolean hoặc java.lang.Boolean BIT BooleanType yes/no boolean hoặc java.lang.Boolean CHAR(1) (‘Y’ hoặ [...]

Marketplace Illustration
Các Annotation của Hibernate

Bài viết được sự cho phép của tác giả Giang Phan Hibernate sử dụng các Annotation để mô tả các thông tin cho một Entity. Chúng ta có thể sử dụng các Annotation nằm trong package javax.persistence của Java Persistence API hoặc sử dụng các annotation trong API của hibernate nằm trong package org.hibernate.annotations. Tuy nhiên, tôi khuyến khích các bạn sử dụng các Annotation của Java Persistence API bởi vì sau này chúng ta muốn chuyển sang một ORM khác sẽ dễ dàng hơn mà không phải thay đổi code. Trong bài này, tôi sẽ hướng dẫn các Annotation thông dụng nhất của Java Persistence API để mô tả thông tin cho một Entity. [irp posts="40410" name="Hibernate Batch processing"] [irp posts="44290" name="Hibernate Criteria Query Language (HCQL)"] @Entity @Entity được sử dụng để chú thích một class là một Entity. Thuộc tính name của @Entity là không bắt buộc. Việc chỉ định rõ name của @Entity cho phép viết ngắn câu HSQL. Entity khớp với một bảng lấy theo tên theo thứ tự ưu [...]

Marketplace Illustration
Sử dụng Hibernate Tool tạo các Hibernate Entity một cách tự động từ các table

Bài viết được sự cho phép của tác giả Giang Phan Trong bài viết trước tôi đã giới thiệu với các bạn các Annotation của Hibernate và cách tạo các Entity từ các table của database. Trong bài viết này, tôi sẽ hướng dẫn các bạn có thể tạo tự động ra các Entity mapping database và Annotation code nhanh chóng bằng việc sử dụng công cụ Hibernate Tool. Chuẩn bị Công cụ và môi trường phát triển Java 8 Eclipse MySQL JBoss / Hibernate Tools [irp posts="40410" name="Hibernate Batch processing"] [irp posts="40216" name="Hibernate Interceptor & StatementInspector"] Xem thêm các việc làm Entity hấp dẫn trên TopDev Cơ sở dữ liệu Chúng ta có mộ hình cơ sở quan hệ các table như sau: Tạo database và chạy sql sau để tạo các bảng sử dụng trong bài viết này. Chẳng hạn tạo database, gp_cms_system. Cài đặt Hibernate Tool vào Eclipse Tìm link download Jboss tool tại đây: https://tools.jboss.org/downloads/ Có 2 cách để cài JBoss Tools vào Eclipse, tương tự như cài các [...]

Marketplace Illustration
Tạo database table tự động từ Hibernate Entity

Bài viết được sự cho phép của tác giả Giang Phan Trong bài trước tôi đã hướng dẫn các bạn sử dụng các Annotation và mapping type để tạo các Hibernate Entity cho các table trong database. Giả sử bây giờ chúng ta không có database từ trước, khách hàng chỉ cung cấp source code với các Hibernate Entity. Để chạy được ứng dụng chúng ta cần phải có database để lưu trữ dữ liệu. Chúng ta, có thể tạo database và tạo từng table cũng như các quan hệ của nó một cách thủ công. Tuy nhiên, cách làm này tốn rất nhiều công sức, dễ sai sót và không cần thiết. [irp posts="44290" name="Hibernate Criteria Query Language (HCQL)"] [irp posts="40410" name="Hibernate Batch processing"] Xem thêm các việc làm Entity lương cao trên TopDev Với Hibernate, nó đã cung cấp một tính năng rất tiện lợi và dễ dàng cấu hình để tạo các table một cách tự động dựa vào các Hibernate Entity. Chúng ta sẽ cùng tìm hiể [...]

Marketplace Illustration
Hibernate reverse engineering – Customize code generation sử dụng custom strategy class

Bài viết được sự cho phép của tác giả Giang Phan Trong bài viết trước tôi đã giới thiệu với các bạn sử dụng tính năng Reverse Engineering của Hibernate Tool để Generate code domain model classes, annotated EJB3 entity, Hibernate mapping files một cách tự động. Có một số trường hợp, chúng ta cần customize code generation chẳng hạn database được thiết kế có prefix “gp_” cho tất cả table. Tuy nhiên, trong code chúng ta không muốn có prefix này, ví dụ gp_user thì cần generate class là User. Để giải quyết vấn đề này, ta có thể tạo một Custom Strategy Class để tùy chỉnh việc tạo các tên class được generate. [irp posts="44290" name="Hibernate Criteria Query Language (HCQL)"] [irp posts="40410" name="Hibernate Batch processing"] Giới thiệu ReverseEngineeringStrategy Bên cạnh việc sử dụng XML trong file hibernate.reveng.xml, chúng cũng có thể tùy chỉnh việc generate bằng mã Java. Điều này có thể được thực hiện bằng cách tạo một lớp Java implements ReverseEngineeringStrategy hoặc extends DelegatingReverseEngineeringStrargetyclass. Cả hai đều nằm trong package org.hibernate.cfg.reveng. Có rấ [...]

Marketplace Illustration
Sử dụng Hibernate Tools tạo các Entity và DAO class

Bài viết được sự cho phép của tác giả Giang Phan Trong bài viết trước, tôi đã hướng dẫn các bạn sử dụng Hibernate Tool tạo các Hibernate Entity một cách tự động từ các table. Trong bài này, tôi sẽ hướng dẫn các bạn cách custom template generate các Entity để sử dụng Lombok cho các getter và setter và tạo các Data Access Object (DAO) class một cách tự động sử dụng Hibernate Tools. [irp posts="44290" name="Hibernate Criteria Query Language (HCQL)"] [irp posts="36907" name="Hibernate là gì? Sao phải dùng nó thay JDBC?"] Custom template generate các Hibernate Entity để sử dụng Lombok cho getter và setter Tạo project và khai báo thư viện cần thiết Tạo maven project và khai báo các dependency sau: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency>     <groupId>org.projectlombok</groupId>     <artifactId>lombok</artifactId>     <version>1.18.10</version> </dependency> <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-tools --> <dependency>     <groupId>org.hibernate</groupId>     <artifactId>hibernate-tools</artifactId>     <version>5.4.10.Final</version> </dependency> <! [...]

Marketplace Illustration
Hibernate Query Language (HQL)

Bài viết được sự cho phép của tác giả Giang Phan Hibernate cung cấp một vài cách để thao tác dữ liệu với database như Hibernate Query Language (HQL), Hibernate Criteria Queries, Native Queries, … Trong bài viết này, tôi sẽ giới thiệu với các bạn Hibernate Query Language (HQL), trong các bài viết tiếp theo chúng ta sẽ lần lượt tìm hiểu các cách còn lại. [irp posts="36907" name="Hibernate là gì? Sao phải dùng nó thay JDBC?"] [irp posts="40576" name="Hibernate Cache"] Giới thiệu Hibernate Query Language (HQL) Hibernate Query Language (HQL) là một ngôn ngữ truy vấn hướng đối tượng (OOP), tương tự như SQL (Structured Query Language) nhưng thay vì làm việc trên các bảng và cột, HQL làm việc với các đối tượng persistent và các thuộc tính của chúng. Các truy vấn HQL được  đổi bởi Hibernate thành các truy vấn SQL thông thường, lần lượt thực hiện các công việc trên cơ sở dữ liệu. Nhờ vậy mà nó là một ngôn ngữ truy [...]

Marketplace Illustration
Hibernate Criteria Query Language (HCQL)

Bài viết được sự cho phép của tác giả Giang Phan Trong bài trước, chúng ta đã cùng tìm hiểu về cách sử dụng Hibernate Query Language (HQL) để truy vấn cơ sở dữ liệu và nhận kết quả. Trong bài này, chúng ta sẽ cùng tìm hiểu về Hibernate Criteria Query Language – một cách khác để lấy dữ liệu dựa vào các tiêu chí (Criteria) cụ thể. [irp posts="40216" name="Hibernate Interceptor & StatementInspector"] [irp posts="40410" name="Hibernate Batch processing"] Giới hiệu Hibernate Criteria Query Language (HCQL) Hibernate Criteria API cung cấp cách tiếp cận hướng đối tượng để truy vấn cơ sở dữ liệu và nhận kết quả. Criteria cho phép chúng ta xây dựng câu lệnh một cách linh động (dynamic) và không bị hardcode trong một chuỗi truy vấn và có thể tái sử dụng. Một số trường hợp sử dụng phổ biến của Hibernate Criteria Query: Sử dụng các hàm tập hợp như sum(), min(), max(), … Truy vấn một vài column cụ thể. Sử dụng để join nhiều table với nhau. Giới hạn [...]

Marketplace Illustration
Hibernate Lifecycle

Bài viết được sự cho phép của tác giả Giang Phan Trong Hibernate, chúng ta sẽ tạo một đối tượng từ một Entity (thực thể) và lưu nó vào cơ sở dữ liệu hoặc chúng ta lấy dữ liệu từ cơ sở dữ liệu. Ở đây, mỗi Entity được liên kết với lifecycle (vòng đời), chịu sự quản lý của Session. Đối tượng Entity đi qua các giai đoạn khác nhau của lifecycle. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về các giai đoạn này. [irp posts="40410" name="Hibernate Batch processing"] [irp posts="36907" name="Hibernate là gì? Sao phải dùng nó thay JDBC?"] Giới thiệu Hibernate Lifecycle Khi nói về trạng thái (state) của object trong Hibernate, chúng ta nói một đối tượng có quan hệ với Session, nghĩa là Session có tham chiếu đến đối tượng đó, hay một cách khác là chịu sự quản lý của Session. Session được coi là một loại của Persistence Context. Quản lý các Entity Ngoài việc map đối tượng Java đến bản ghi trong CSDL (tức là [...]

Marketplace Illustration
Hibernate Native SQL Queries

Bài viết được sự cho phép của tác giả Giang Phan Trong Hibernate, HQL hoặc Criteria Query cho phép chúng ta thực hiện hầu hết mọi truy vấn SQL mong muốn. Tuy nhiên, đôi khi về câu lệnh SQL được tạo ra bởi Hibernate chậm hoặc cần viết câu lệnh phức tạp và thích tạo câu lệnh SQL (SQL gốc) của riêng mình hơn. Với Hibernate cho chúng ta sử dụng Native SQL để thao tác với cơ sở dữ liệu, bao gồm các stored procedures, và tất cả các thao tác create, update, delete và select. Tương tự như HQL hay Creteria, để tạo đối tượng Native Query chúng ta sẽ sử dụng phương thức createNativeQuery() từ đối tượng Session: org.hibernate.query.NativeQuery createNativeQuery(java.lang.String s); <R> org.hibernate.query.NativeQuery<R> createNativeQuery(java.lang.String s, java.lang.Class<R> aClass); Scalar queries Các truy vấn SQL cơ bản nhất là để có được một danh sách các giá trị scalars (column) từ một hoặc nhiều bảng. Ví dụ lấy tất cả cá [...]