uorm 0.8.0

Rust 下的轻量级 ORM 框架,借鉴了 Java MyBatis 的设计理念,强调 SQL 与业务逻辑分离。它结合 Rust 的类型系统与宏机制,支持编写原生 SQL 并自动映射结果,兼容 async/await,兼顾性能与可控性。
Documentation
#[cfg(feature = "mysql")]
use uorm::Param;
#[cfg(feature = "mysql")]
use uorm::Result;
#[cfg(feature = "mysql")]
use uorm::driver_manager::U;
#[cfg(feature = "mysql")]
use uorm::sql;
#[cfg(feature = "mysql")]
use uorm::udbc::mysql::pool::MysqlDriver;

#[cfg(feature = "mysql")]
#[sql("user")]
struct ChunkDao;

#[cfg(feature = "mysql")]
#[derive(Param)]
struct StateStats {
    total: i32,
    completed_count: i32,
    failed_count: i32,
}

#[cfg(feature = "mysql")]
impl ChunkDao {
    #[sql("create_table")]
    async fn create_table() -> Result<u64> {
        exec!()
    }

    #[sql("insert_chunk")]
    async fn insert_chunk(state: i32) -> Result<u64> {
        exec!()
    }

    #[sql("state_stats")]
    async fn state_stats() -> Result<StateStats> {
        exec!()
    }
}

#[cfg(feature = "mysql")]
#[tokio::test]
async fn test_mysql_sql_macro() -> Result<()> {
    let url = std::env::var("DATABASE_URL").unwrap_or_default();
    if url.is_empty() {
        return Ok(());
    }

    uorm::mapper_loader::clear();
    U.assets("tests/resources/**/*.xml")?;

    let driver = MysqlDriver::new(url).build()?;
    U.register(driver)?;

    ChunkDao::create_table().await?;
    ChunkDao::insert_chunk(3).await?;
    ChunkDao::insert_chunk(3).await?;
    ChunkDao::insert_chunk(4).await?;
    ChunkDao::insert_chunk(1).await?;
    let stats = ChunkDao::state_stats().await?;

    assert_eq!(stats.total, 4);
    assert_eq!(stats.completed_count, 2);
    assert_eq!(stats.failed_count, 1);
    Ok(())
}