1.What's Mirage-SQL? Mirage-SQL là thư viện cho phép truy cập cơ sở dữ liệu dễ dàng và mạnh mẽ. Trong ngôn ngữ Java, chắc chúng ta đều biết có nhiều ORM tồn tại trước đó, nhưng chúng không thể xử lý tốt những câu truy vấn phức tạp. Trong các ứng dụng thực tế, sẽ có những lúc cần xử lý các câu truy vấn native. Một số ORM vẫn có hỗ trợ native SQL, nhưng hầu hết không thể xử lý những câu truy vấn động (MyBatis là một trong số ít ngoại lệ).
Mirage-SQL sử dụng file SQL để viết câu truy vấn (tương tự MyBatis viết truy vấn trên xml) và chạy trực tiếp trên source code. Parameter và truy vấn động của Mirage được hỗ trợ bằng cách tận dụng SQL comment. File sql sử dụng trong Mirage là một dynamic sql template, nhưng nó vẫn chỉ là sql và sử dụng comment theo quy tắc nhất định để làm điều kiện cho câu truy vấn động và các parameter. Tính năng dynamic sql template trong MirageSQL được gọi là 2WaySQL.
Vậy 2WaySQL có gì hay? Đó là khi chúng ta muốn copy câu truy vấn ở source code và chạy trực tiếp trên client tool, với các ORM khác thì phải sửa lại câu truy vấn khá nhiều để có thể chạy được, điều này gây phiền toái cho các developer. Nhưng với 2WaySQL, chúng ta có thể copy câu truy vấn từ source code và chạy trực tiếp trên các client tool mà ít phải chỉnh sửa nhất. Ví dụ sau đây sẽ minh hoạ về truy vấn động và tính năng 2WaySQL:
SELECT * FROM BOOK
/*BEGIN*/ WHERE /*IF author != null */ AUTHOR = /*author*/'Naoki Takezoe' /*END*/ /*IF minPrice != null */ AND PRICE >= /*minPrice*/20 /*END*/ /*IF maxPrice != null */ AND PRICE <= /*maxPrice*/100 /*END*/
/*END*/
ORDER BY BOOK_ID ASC
2. 2WaySQL: Như đã đề cập, MirageSQL hỗ trợ tính năng 2WaySQL. Nó được lấy cảm hứng từ S2JDBC, một ORM của người Nhật. 2WaySQL là một template SQL mà ở đây bạn có thể chỉ định các parameter và điều kiện bằng cách sử dụng cú pháp comment trong sql. Vì lý do này mà bạn có thể chạy trực tiếp câu truy vấn trên các client tool. Như ở ví dụ ở trên bạn có thể thấy phía sau comment có các giá trị mặc định, các giá trị này được sử dụng khi chạy trên client tool, còn khi chạy trên MirageSQL nó sẽ sử dụng giá trị từ các param. Khi chạy, Mirage sẽ thay thế các param bằng ? và bỏ các giá trị mặc định. Vì vậy khi mirage chạy câu truy vấn sẽ có dạng sau:
SELECT * FROM BOOK WHERE AUTHOR = ? AND PRICE >= ? AND PRICE <= ?
ORDER BY BOOK_ID ASC
Mirage cũng hỗ trợ map các cột từ bảng với entity bằng cách sử dụng các annotation, và cũng có thể sử dụng với Spring Framework Mặc định Mirage hỗ trợ các phương thức CRUD : save, update, delete, findOne, findAll mà không cần phải viết sql.
Nếu có hứng thú với thư viện này, bạn có thể tìm hiểu thêm ở github. mình có để link ở dưới
Nguồn tham khảo : https://github.com/mirage-sql/mirage/wiki/Introduction