当前位置: 首页 > 后端技术 > Java

Rust精简版MybatisPlus-让你在一天之内从Java切换到Rust

时间:2023-04-01 23:51:59 Java

算起来,距离真正开始使用Rust进行项目开发也快一年了,对Rust的喜爱也越来越深;过程中踩了很多坑。色狼还得补一大堆废知识;当然,他对电脑的理解加深了,头发自然也变稀疏了。“圈子”法则正式传下来,今天给大家分享一个我自己的crate,因为这几年转Rust的朋友越来越多,其中有不少是从Java工作转过来的。他们转移到的第一件事是疯狂的。想找一个好用的ORM框架,不过目前Rust中比较好用的相关数据库框架有diesel、sqlx等,基本可以满足日常工作需要。为了让更多的朋友更容易过渡到Rust,我搭建了一个小框架,参考了MyBatisPlus的相关API。相信只要用过框架,应该都能无缝过渡。目前已经过渡到0.2.0版本。基本上,更新比较频繁。因为前期想法很多,没有固定的方向,所以经常推翻再重新开始。这个箱子叫akita,翻译过来就是秋田犬的意思,也有乖巧可爱的意思。基本的实现思路是通过Rust的process宏完成数据库表结构的映射,然后封装一些方便的SQL组装的工具和方法。目前项目暂时只支持MySQL,使用的线程池为r2d2。即将计划支持ClickHouse、SQLite、MSSQL、ORACLE等数据库。直接开码就不多说了。让我们尝试使用一个看看它是否有效。首先添加依赖,现在当前版本是0.2.4。[dependencies]#核心API,包括Tabletraits。使用Akita时始终需要#。使用#[derive(Table)]#让Akita使用你的crate.akita={version="0.2.0"]}中定义的结构首先,我们定义一个结构SystemUser。Akita提供了三个trait,分别是FromAkita、ToAkita和Table,主要用于解析结构体的字段结构,生成基本的CRUD成员方法。另外提供了表注解来标注数据库表名,field和table_id标注了列名和主键,各有一个name属性,同时保留了MyBatisPlus中的exist属性。#[derive(Debug,Fr??omAkita,ToAkita,Table,Clone)]#[table(name="t_system_user")]structSystemUser{#[field="name"]id:Option,#[table_id]用户名:String,#[field(name="ages",exist="false")]age:i32,}来来来,Akita提供了两个公共管理器,AkitaManager和AkitaEntityManager,前者主要封装了一些原始的SQL操作,后者增加了一个比较完整的API,并在结构体中实现这些API。我们以CRUD操作为例:useakita::*;useakita::prelude::*;fnmain(){letmutpool=Pool::new(AkitaConfig{max_size:None,url:String::from("mysql://root:password@localhost:3306/akita"),log_level:None}).unwrap();letmutem=pool.entity_manager().expect("一定没问题");让user=SystemUser{id:1.into(),username:"fff".to_string(),age:1};//添加匹配em.save(&user){Ok(res)=>{}Err(err)=>{}}///结构示例matchuser.insert(&mutem){Ok(res)=>{}Err(err)=>{}}//删除匹配em.remove_by_id::("id".to_string()){Ok(res)=>{}Err(err)=>{}}//修改匹配em.update_by_id(&user,"id"){Ok(res)=>{}Err(err)=>{}}//查询页面letmutwrapper=UpdateWrapper::new();wrapper.eq("用户名","ussd").eq("id",1);匹配em.page::(1,10,&mutwrapper){Ok(res)=>{}Err(err)=>{}}//查询单个匹配项em.select_one::(&mutwrapper){Ok(res)=>{}Err(err)=>{}}...}看完是不是很感动呢?对于手写了半年多SQL的我来说简直是福音。。。另外还有很多我们在性能方面正在优化的地方,比如大数据的量化分页以及相关的慢SQL拦截而其他一些优化方案项目目前只有少数人在维护,所以以后更新速度不会很快。我们也会在生产中使用这个框架,并逐步优化它。未来我们打算做的:支持ORACLE、ClickHouse、SQLite、MSSQL多种特性增强注解,增加配置映射,支持更多自定义注解,支持更多数据结构,优化内部参数处理,完善自动代码生成工具,减少重复写完工码就跑(偷懒)所以接下来就是你的时间了,该抄的就抄,该抄的就溜。(逃脱