3个版本

0.1.4 2024年3月27日
0.1.3 2024年3月25日
0.1.2 2024年2月18日
0.1.1 2024年2月18日
0.1.0 2024年2月7日

#703数据库接口

MIT 许可证

10KB
114

概述

这是一个简单模仿mybatis的CURD操作,目前仅支持mysql数据库。

如何使用?

第一步:

在项目根目录下添加db.yml配置文件,其中编写数据库相关配置。

host: 127.0.0.1
port: 3306
user: root
password: 123456
db-name: test

第二步:

假设你有一张sys_user表,其中主键名为user_id,那么在实体struct中, 需要添加一个entity_option_mapping的属性宏,该宏接收两个属性参数, 第一个是表名,第二个是主键名。 所有字段必须使用Option类型,且泛型的类型是基本类型或String。

use r2d2_mysql::mysql::params;
use r2d2_mysql_batis::macros::entity_option_mapping;
use serde::Serialize;

#[derive(Serialize, Debug)]
#[entity_option_mapping(sys_user, user_id)]
pub struct SysUser {
    pub user_id: Option<u64>,
    pub username: Option<String>,
    pub name: Option<String>,
    pub password: Option<String>,
    pub dept_id: Option<u64>,
    pub email: Option<String>,
    pub mobile: Option<String>,
    pub status: Option<i8>,
    pub user_id_create: Option<u64>,
    pub gmt_create: Option<String>,
    pub gmt_modified: Option<String>,
    pub sex: Option<i64>,
    pub birth: Option<String>,
    pub pic_id: Option<i64>,
    pub live_address: Option<String>,
    pub hobby: Option<String>,
    pub province: Option<String>,
    pub city: Option<String>,
    pub district: Option<String>,
}

第三步:

use crate::entity::SysUser;
use r2d2_mysql_batis::entity::Entity;
use r2d2_mysql_batis::service::Service;

#[tokio::test]
async fn tokio_test() {
        // 查询所有列表数据
        let list = SysUser::list().await.unwrap();
        
        // 根据主键查询单条数据
        let mut user = SysUser::find_by_id(1).await.unwrap().unwrap();
        println!("{user:?}");

        // 插入数据库
        user.add().await;

        // 根据主键更新(None值字段忽略)
        user.edit().await;

        // 根据主键删除
        SysUser::remove(999999).await;

        // 获取表名 返回类型为&str
        let table_name = SysUser::table_name();
        println!("{table_name}");

        // 获取主键名 返回类型为&str
        let primary_key = SysUser::primary_key();
        println!("{primary_key}");

        // 获取插入JPA SQL语句 返回类型为&str
        let insert_sql = SysUser::insert_sql();
        println!("{insert_sql}");

        // 获取根据主键更新JPA SQL语句(更新字段不包含None值)返回类型为String
        let update_by_id_sql = user.update_by_id_sql();
        println!("{update_by_id_sql}");

        // 设置主键值(数据库不更新)
        user.set_primary_key(1);
        
        // 自定义SQL查询
        let query_list = SysUser::query(String.from("SELECT * FROM `sys_user`")).await.unwrap();
        
        // 自定义JPA SQL查询
        let query_list = SysUser::jpa_query(String.from("SELECT * FROM `sys_user` WHERE `id` > :id"), params! {"id" => 0}).await.unwrap();
}

依赖项

~17–32MB
~533K SLoC