ORM là gì ?
ORM là 1 kỹ thuật lập trình giúp ánh xạ các record dữ liệu trong hệ quản trị cơ sở dữ liệu sang dạng đối tượng đang định nghĩa trong các class – một khái niệm phổ biến được sử dụng trong tất cả các ngôn ngữ hiện đại ngày nay như: Java, PHP, Ruby. Bạn có thể áp dụng kĩ thật này với bất cứ dự án nào bạn thích
Có hai patterns được áp dụng cho các cách thiết kế ORM khác nhau.
- Active Record: Một số ORM nổi tiếng sử dụng như: Eloquent, CachePHP, JOOQ, TOPLINK
- Data Mapper: Một số ORM nổi tiếng sử dụng như: Doctrine, Hibernate, SqlAlchemy
ORM hoạt động như thế nào ?
Cơ bản thì ORM gói gọn CSDL trong 1 object, 1 phần sẽ chứa data phần còn lại sẽ xử lý để biến nó thành CSDL quan hệ.
ORM biểu thị các đối tượng ở đó dữ liệu được hiển thị dưới dạng Object
Ưu nhược điểm của ORM
Ví dụ về lấy danh sách người dùng cùng với bài đăng mới nhất của mỗi người dùng:
$usersWithLatestPosts = DB::select('
SELECT u.*, p.*
FROM users u
LEFT JOIN (
SELECT user_id, MAX(created_at) AS latest_post_date
FROM posts
GROUP BY user_id
) latest_posts ON u.id = latest_posts.user_id
LEFT JOIN posts p ON u.id = p.user_id AND latest_posts.latest_post_date = p.created_at
');
Đây là cách sử dụng ORM trong laravel
$usersWithLatestPosts = User::with(['posts' => function ($query) {
$query->latest()->limit(1);
}])->get();
Như ví dụ ở trên chúng ta sẽ thấy rõ được 1 số ưu điểm khi sử dụng ORM đó là đoạn code sẽ ngắn gọn hơn, đọc vào dễ hiểu và thân thiện với coder hơn. Đó cũng là một ưu điểm nổi bật của ORM khi được áp dụng vào các dự án.
Ưu điểm:
- Dễ sử dụng và đọc
- Tính di động và linh hoạt
- Bảo mật dữ liệu
- Tương thích với quan hệ đối tượng
- Tiết kiệm thời gian phát triển
Nhược điểm:
- Hiệu suất không cao nhất
- Tùy chỉnh phức tạp
- Phụ thuộc vào ORM
- Tối ưu hóa không linh hoạt
Conclusion
Nên mix giữa ORM và Raw SQL sao cho hiệu quả. Với các truy vấn thông thường thì ORM là lựa chọn của mình. Với các tình huống phải thao tác với nhiều bản ghi, raw SQL có vẻ hợp lí hơn. Nhưng khi dùng raw sql bạn phải thực sự cẩn thận về vấn đề Sql Injection.
Cảm ơn các bạn đã theo dõi bài viết trên, trong bài viết có tham khảo từ một số nguồn khác. 🙏🙏🙏
1 comment
Zaproxy dolore alias impedit expedita quisquam.