Warning
This post was published 35 days ago. The information described in this article may have changed.
Rbatis 4.6 brings a more concise API design, improved performance, and additional practical features, aiming to be the most efficient and user-friendly ORM framework in the Rust ecosystem. As a compile-time code generation ORM tool, Rbatis perfectly balances development efficiency, runtime performance, and stability, while supporting multiple databases and connection pool implementations.
?
as a unified placeholder, supporting all drivers#{arg}
and direct replacement ${arg}
, meeting different scenario requirementsif
, for
, choose/when/otherwise
, bind
, trim
structures and collection operationsSimplified CRUD API:
// Generate all CRUD operations with just one line of code
crud!(BizActivity{});
// Or specify a table name
crud!(BizActivity{}, "activity");
More Flexible Query Conditions:
value!
macro to quickly build query conditions// Equality query
let data = BizActivity::select_by_map(&rb, value!{"id":"2","name":"Activity 2"}).await;
// Fuzzy query
let data = BizActivity::select_by_map(&rb, value!{"name like ":"%Activity%"}).await;
// Greater than query
let data = BizActivity::select_by_map(&rb, value!{"id > ":"2"}).await;
// IN query
let data = BizActivity::select_by_map(&rb, value!{"id": &["1", "2", "3"]}).await;
Important: When using an empty array with IN queries, Rbatis intelligently handles this case. Instead of generating invalid SQL like select * from biz_activity where id in []
, it will generate a clean query without the IN condition: select * from biz_activity
. This prevents SQL syntax errors and ensures your application continues to function correctly even with empty array inputs.
Enhanced Plugin System:
Optimized Performance:
[dependencies]
rbs = { version = "4.6"}
rbatis = { version = "4.6"}
# Choose database driver
rbdc-sqlite = { version = "4.6" }
# rbdc-mysql = { version = "4.6" }
# rbdc-pg = { version = "4.6" }
# rbdc-mssql = { version = "4.6" }
# Other dependencies
serde = { version = "1", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
log = "0.4"
fast_log = "1.6"
use rbatis::rbdc::datetime::DateTime;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BizActivity {
pub id: Option<String>,
pub name: Option<String>,
pub status: Option<i32>,
pub create_time: Option<DateTime>,
pub additional_field: Option<String>,
}
// Automatically generate CRUD methods
crud!(BizActivity{});
#[tokio::main]
async fn main() {
// Configure logging
fast_log::init(fast_log::Config::new().console()).expect("rbatis init fail");
// Initialize rbatis
let rb = RBatis::new();
// Connect to database
rb.init(SqliteDriver {}, "sqlite://target/sqlite.db").unwrap();
// Insert data
let activity = BizActivity {
id: Some("1".into()),
name: Some("Test Activity".into()),
status: Some(1),
create_time: Some(DateTime::now()),
additional_field: Some("Additional Information".into()),
};
let data = BizActivity::insert(&rb, &activity).await;
// Query using map conditions
let data = BizActivity::select_by_map(&rb, value!{"name like ":"%Activity%"}).await;
// Batch delete
let data = BizActivity::delete_by_map(&rb, value!{"id": &["1", "2", "3"]}).await;
// Empty array handling demonstration
let empty_ids: Vec<String> = vec![];
let data = BizActivity::select_by_map(&rb, value!{"id": &empty_ids}).await;
// This generates: "SELECT * FROM biz_activity" instead of invalid SQL
}
// HTML style
#[html_sql(r#"
<select id="select_by_condition">
`select * from activity`
<where>
<if test="name != ''">
` and name like #{name}`
</if>
<choose>
<when test="status >= 0">
` and status = #{status}`
</when>
<otherwise>
` and status = 0`
</otherwise>
</choose>
</where>
</select>"#)]
async fn select_by_condition(
rb: &dyn Executor,
name: &str,
status: i32,
) -> rbatis::Result<Vec<Activity>> {
impled!()
}
// Python style
#[py_sql(r#"
`select * from activity where delete_flag = 0`
if name != '':
` and name=#{name}`
if !ids.is_empty():
` and id in `
${ids.sql()}"#)]
async fn py_select(rb: &dyn Executor, name: &str, ids: &[i32]) -> Result<Vec<Activity>, Error> {
impled!()
}
Rbatis 4.6 supports multiple databases, including:
rbdc-mysql
rbdc-pg
rbdc-sqlite
rbdc-mssql
rbdc-oracle
rbdc-tdengine
Rbatis 4.6 maintains high performance while further optimizing API design, making the development experience smoother and more intuitive. Whether it's simple CRUD operations or complex dynamic SQL building, Rbatis provides elegant and efficient solutions. As an important ORM framework in the Rust ecosystem, Rbatis continues to evolve and improve, providing Rust developers with better database access tools.
Start using Rbatis 4.6 now and experience a new way of Rust ORM development!
1 post - 1 participant
🏷️ rust_feed