Akita   ![Build Status] ![Latest Version] ![akita: rustc 1.13+] ![akita_derive: rustc 1.31+]

Akita - Mini orm for rust

This create offers: * MySql database's helper in pure rust; * SQLite database's helper in pure rust; * A mini orm framework (With MySQL/SQLite)。

Features:

You may be looking for:

Akita in action

Click to show Cargo.toml. Run this code in the playground.

```toml [dependencies]

The core APIs, including the Table traits. Always

required when using Akita. using #[derive(AkitaTable)]

to make Akita work with structs defined in your crate.

akita = { version = "0.3.0", features = ["akita-mysql"] }

```

API Documentation

```rust use akita::; use akita::prelude::;

/// Annotion Support: AkitaTable、table_id、field (name, exist)

[derive(AkitaTable, Clone, Default)]

[table(name = "tsystemuser")]

pub struct User { #[tableid(name = "id")] pub pk: i64, pub id: String, pub headline: Option, /// 状态 pub status: u8, /// 用户等级 0.普通会员 1.VIP会员 pub level: u8, /// 生日 pub birthday: Option, /// 性别 pub gender: u8, #[field(exist = "false")] pub isorg: bool, #[field(name = "token")] pub url_token: String, }

### CRUD with EntityManager rust

fn main() { let dburl = String::from("mysql://root:password@localhost:3306/akita"); let cfg = AkitaConfig::new(dburl).setconnectiontimeout(Duration::fromsecs(6)) .setloglevel(LogLevel::Debug).setmaxsize(6); let mut pool = Pool::new(cfg).expect("must be ok"); let mut entitymanager = pool.entitymanager().expect("must be ok"); // The Wrapper to build query condition let wrapper = Wrapper::new() .eq("username", "ussd") // username = 'ussd' .gt("age", 1) // age > 1 .lt("age", 10) // age < 10 .inside("usertype", vec!["admin", "super"]); // usertype in ('admin', 'super') // CRUD with EntityManager let insertid: Option = entitymanager.save(&User::default()).unwrap(); let insertids: Vec>= entitymanager.savebatch(&[&User::default()]).unwrap(); // Update with wrapper let res = entitymanager.update(&User::default(), Wrapper::new().eq("name", "Jack")).unwrap(); // Update with primary id let res = entitymanager.updatebyid(&User::default()); // Query return List let list: Vec = entitymanager.list(Wrapper::new().eq("name", "Jack")).unwrap(); // Query return Page let pageNo = 1; let pageSize = 10; let page: IPage = entitymanager.page(pageNo, pageSize, Wrapper::new().eq("name", "Jack")).unwrap(); // Remove with wrapper let res = entitymanager.remove::(Wrapper::new().eq("name", "Jack")).unwrap(); // Remove with primary id let res = entitymanager.removebyid::(0).unwrap(); // Get the record count let count = entitymanager.count::(Wrapper::new().eq("name", "Jack")).unwrap(); // Query with original sql let user: User = entitymanager.executefirst("select * from tsystemuser where name = ? and id = ?", ("Jack", 1)).unwrap(); // Or let user: User = entitymanager.executefirst("select * from tsystemuser where name = :name and id = :id", params! { "name" => "Jack", "id" => 1 }).unwrap(); let res = entitymanager.execute_drop("select now()", ()).unwrap(); } ### CRUD with Entity rust

fn main() { let dburl = String::from("mysql://root:password@localhost:3306/akita"); let cfg = AkitaConfig::new(dburl).setconnectiontimeout(Duration::fromsecs(6)) .setloglevel(LogLevel::Debug).setmaxsize(6); let mut pool = Pool::new(cfg).expect("must be ok"); let mut entitymanager = pool.entitymanager().expect("must be ok"); // CRUD with Entity let model = User::default(); // insert let insertid = model.insert::, >(&mut entitymanager).unwrap(); // update let res = model.updatebyid::<_>(&mut entitymanager).unwrap(); // delete let res = model.deletebyid::(&mut entitymanager, 1).unwrap(); // list let list = User::list::<_>(Wrapper::new().eq("name", "Jack"), &mut entitymanager).unwrap(); // page let page = User::page::<_>(pageNo, pageSize, Wrapper::new().eq("name", "Jack"), &mut entitymanager).unwrap(); } ### Fast with Akita rust

fn main() { let dburl = String::from("mysql://root:password@localhost:3306/akita"); let cfg = AkitaConfig::new(dburl).setconnectiontimeout(Duration::fromsecs(6)) .setloglevel(LogLevel::Debug).setmaxsize(6); let mut pool = Pool::new(cfg).expect("must be ok"); let mut entitymanager = pool.entitymanager().expect("must be ok"); // Fast with Akita let list: Vec = Akita::new().conn(pool.database().unwrap()) .table("tsystem_user") .wrapper(Wrapper::new().eq("name", "Jack")) .list::().unwrap();

let page: IPage<User> = Akita::new().conn(pool.database().unwrap())
    .table("t_system_user")
    .wrapper(Wrapper::new().eq("name", "Jack"))
    .page::<User>(1, 10).unwrap();

// ...

// Transaction
entity_manager.start_transaction().and_then(|mut transaction| {
    let list: Vec<User> = transaction.list(Wrapper::new().eq("name", "Jack"))?;
    let insert_id: Option<i32> = transaction.save(&User::default())?;
    transaction.commit()
}).unwrap();

} ```

### Wrapper ```ignore

let mut wrapper = Wrapper::new().like(true, "column1", "ffff") .eq(true, "column2", 12) .eq(true, "column3", "3333") .inside(true, "column4", vec![1,44,3]) .not_between(true, "column5", 2, 8) .set(true, "column1", 4);

```

Feature.

Annotions.

Support Field Types.

Developing

To setup the development envrionment run cargo run.

Contributers

MrPan <1049058427@qq.com>

Getting help

Akita is a personal project. At the beginning, I just like Akita dog because of my hobbies. I hope this project will grow more and more lovely. Many practical database functions will be added in the future. I hope you can actively help this project grow and put forward suggestions. I believe the future will be better and better.


License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Akita by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.