递归火山软件开发平台

标题: ORM类库,用新语法重新封装了一遍 [打印本页]

作者: 龙纹    时间: 2025-4-24 17:33
标题: ORM类库,用新语法重新封装了一遍
本帖最后由 龙纹 于 2025-5-20 20:06 编辑

这是我之前封装过的一个ORM类库的重新封装:火山ORMPP库, 简化数据库操作, 支持sqlite, mysql, pg
当时封装这个类库,又是宏又是骚操作的,折腾了很久,封装出来了还有很多限制。

前两天看到类库征集帖子里的回复,有人提到了ORM类库。几年过去了,原始类库也更新了很多,想着更新一下。这次使用了@别名类型-本地类,封装过程格外的轻松。除了获取表名需要修改原始项目中某个函数,没碰到什么难题。

目前主要功能如下:
  支持SQLite3、MySQL、PostgreSQL三种数据库随意切换。
  类方法:连接、创建数据表、创建数据表_注册键信息、插入数据、插入数据_返回自增ID、更新数据、更新数据_指定字段、删除所有数据、删除数据_条件、cha询数据、cha询数据_条件、执行原生SQL、开始事务、提交事务、回滚。
  MySQL连接池、PostgreSQL连接池。

5月20日:
  增加PostgreSQL连接池,处理PostgreSQL的依赖DLL。
目前已知问题:使用PostgreSQL,如果密码为空,会导致创建表到postgres数据库中,修改密码不为空即可。

4月27日:
  增加MySQL数据库连接池与对应例程,注意获取连接后需要调用"自动管理连接"方法,这样连接使用完后会归还给连接池。
  增加 插入数据_返回自增ID 方法,用于获取插入数据后的自增ID。



模块安装包和例程:蓝奏云




作者: rinipp    时间: 2025-4-24 18:23
兹磁
作者: 冰山一角    时间: 2025-4-24 19:03
支持大佬,如果感觉成熟可以给吴总弄到pc里面去
作者: 高山!&流水    时间: 2025-4-24 19:10
本帖最后由 高山!&流水 于 2025-4-24 19:12 编辑

希望尽快封装完成,能否防止SQL、注、入,如果能希望给一个例子。
作者: numbersir    时间: 2025-4-24 20:01
看到大佬们都在我学火山就对了
作者: 龙纹    时间: 2025-4-24 20:05
高山!&流水 发表于 2025-4-24 19:10
希望尽快封装完成,能否防止SQL、注、入,如果能希望给一个例子。

现在放出来是先给各位看看,实际使用是不是有问题,有没有什么建议。
底层库已经做了防、注、入的工作,直接使用即可。
作者: niuyanbo2021    时间: 2025-4-24 21:03
支持sqlite, mysql, pg   这正是我需要的范围。太巧了
作者: 朕的    时间: 2025-4-24 21:07
支持大佬发电
作者: urenai    时间: 2025-4-24 22:16
龙老板 有没有空研究一下 service dll
搞不定,放弃了 Service DLL - 火山平台俱乐部 - 递归火山软件开发平台 - Powered by Discuz!

作者: Snail    时间: 2025-4-24 23:38

支持大佬发电
作者: nurjay    时间: 2025-4-24 23:40
希望继续完善,有几个疑虑
1、你或者也要定义数据模型吗?定义的方法跟火山go一样吗?
2、事务操作功能如何?
3、连接池管理数据库连接
作者: 龙纹    时间: 2025-4-25 05:12
nurjay 发表于 2025-4-24 23:40
希望继续完善,有几个疑虑
1、你或者也要定义数据模型吗?定义的方法跟火山go一样吗?
2、事务操作功能如何 ...

1、需要定义一个映射类,下面是定义代码:
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 类 个人信息 <公开 注释 = "类和成员变量名的输出名一定要改!!!" @输出名 = "person">
  3. {

  4.     # @begin
  5.     # // 注册自增主键,类名(主键字段名)
  6.     # REGISTER_AUTO_KEY(person, id)
  7.     # // 注册冲突主键,类名(冲突主键字段名)
  8.     # // REGISTER_CONFLICT_KEY(person, name)
  9.     # // REGISTER_CONFLICT_KEY(person, name, age) // 如果是多个
  10.     #
  11.     # // 生成映射类所需的一些信息,这里填入 类名(字段名1,字段名2,...)
  12.     # YLT_REFL(person, id, age, name)
  13.     # @end
  14.     #

  15.     变量 id <公开 类型 = 整数 @输出名 = "id">
  16.     变量 age <公开 类型 = 整数 @输出名 = "age">
  17.     变量 name <公开 类型 = 标准文本类 @输出名 = "name">

  18.     #
  19. }

  20. 类 个人信息数组类 <公开 基础类 = 标准数组模板类 @模板实现类 = "个人信息">
  21. {

  22.     #
  23. }
复制代码
此外还有其他操作,比如表名能设置别名,不强制要求跟类输出名一致,字段同样,可以参考Github项目内的示例。

2、已经封装了开始事务、提交事务、回滚。

3、Github项目是支持连接池的,只是暂未封装。

作者: 龙纹    时间: 2025-4-25 11:33
已经更新,现在支持SQLite3、MySQL、PostgreSQL三种数据库随意切换
作者: jcos    时间: 2025-4-25 11:59

超级牛X666
作者: Xelloss0618    时间: 2025-4-25 12:09
龙纹 发表于 2025-4-25 11:33
已经更新,现在支持SQLite3、MySQL、PostgreSQL三种数据库随意切换

模块安装包写错了,安装到安卓那边了……
作者: 龙纹    时间: 2025-4-25 12:27
Xelloss0618 发表于 2025-4-25 12:09
模块安装包写错了,安装到安卓那边了……

谢谢提醒,晚点重新更新。
顺便问一下,@别名类型-本地类,好像没办法支持嵌套?
实现类是sqlite3、mysql、pg,模板类dbng<sqlite|mysql|pg>是适配器,是不是只能把所有重复方法在每个类都写一遍。
作者: michardhl    时间: 2025-4-25 12:28
大佬,连接池可否加上?
作者: 龙纹    时间: 2025-4-25 12:29
michardhl 发表于 2025-4-25 12:28
大佬,连接池可否加上?

我得再找时间思考一下如何把连接池封装进来
作者: Xelloss0618    时间: 2025-4-25 12:43
龙纹 发表于 2025-4-25 12:27
谢谢提醒,晚点重新更新。
顺便问一下,@别名类型-本地类,好像没办法支持嵌套?
实现类是sqlite3、mysql ...

可以用模板基础类的,也可以用个基类写重复的方法,然后继承它,在实现类写上别名即可。
基类我建议你随便写个别名,比如"\\",避免出现对象类那些方法。
作者: yifan09    时间: 2025-4-25 14:03
支持
作者: lxhabc123l    时间: 2025-4-25 16:13
大佬,文件呢,正需要
作者: 龙纹    时间: 2025-4-25 21:00
lxhabc123l 发表于 2025-4-25 16:13
大佬,文件呢,正需要

更新好了
作者: 高山!&流水    时间: 2025-4-26 23:42
龙纹 发表于 2025-4-24 20:05
现在放出来是先给各位看看,实际使用是不是有问题,有没有什么建议。
底层库已经做了防、注、入的工作, ...

谢谢大佬无私奉献,希望继续加油,把连接池封装进来,虽然我不常用,但是不排除有些项目会用到,再次感谢大佬!!!
作者: 上等兵    时间: 2025-4-27 09:53
这个真不错,要是再有mssql就更完美了,呵
作者: 龙纹    时间: 2025-4-27 19:53
nurjay 发表于 2025-4-24 23:40
希望继续完善,有几个疑虑
1、你或者也要定义数据模型吗?定义的方法跟火山go一样吗?
2、事务操作功能如何 ...

已增加MySQL连接池
作者: 龙纹    时间: 2025-4-27 19:54
michardhl 发表于 2025-4-25 12:28
大佬,连接池可否加上?

已增加MySQL连接池
作者: 龙纹    时间: 2025-4-27 19:57
高山!&流水 发表于 2025-4-26 23:42
谢谢大佬无私奉献,希望继续加油,把连接池封装进来,虽然我不常用,但是不排除有些项目会用到,再次感谢 ...

已增加MySQL连接池
作者: gzylove    时间: 2025-4-30 11:29
大佬nb......................
作者: niuyanbo2021    时间: 2025-5-17 22:04
龙纹 发表于 2025-4-27 19:57
已增加MySQL连接池

给力
作者: amwji    时间: 2025-5-18 20:19
大佬NB
作者: 龙纹    时间: 2025-5-20 20:18
5-20更新:处理PostgreSQL依赖、增加了PostgreSQL连接池。感谢 @niuyanbo2021 的赞助。

作者: 上等兵    时间: 昨天 14:38
看着有点复杂
作者: dengzf    时间: 昨天 17:20
连接池没看明白用法......是一定要先用mysql连接成功一个数据库后,才可以使用连接池?

作者: 龙纹    时间: 昨天 17:40
dengzf 发表于 2025-6-15 17:20
连接池没看明白用法......是一定要先用mysql连接成功一个数据库后,才可以使用连接池?
...

先初始化连接池,再从连接池获取mysql连接。
1、ORMPP_MySQL连接池.初始化(...)
2、连接 = ORMPP_MySQL连接池.获取连接 ()
3、自动管理连接 (连接)
作者: dengzf    时间: 昨天 23:00
龙纹 发表于 2025-6-15 17:40
先初始化连接池,再从连接池获取mysql连接。
1、ORMPP_MySQL连接池.初始化(...)
2、连接 = ORMPP_MySQL连 ...

好的...现在明白了........因为看例子中 创建mysql时,,再用连接池是用了一个宏判断...........所以被搞晕了




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4