大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。我会在这里分享关于 独立开发
、编程技术
、思考感悟
等内容,欢迎关注。
加入技术群
或 与我交朋友
请在个人网站联系我,网站 1️⃣:chensuiyi.me,网站 2️⃣:me.yicode.tech。
如果你觉得本文有用,一键三连 (点赞
、评论
、转发
),就是对我最大的支持~
今天是2025年8月19日,最近大概半个月的时间,我都没怎么冒泡,没怎么聊天,没怎么发帖,更没怎么写文章。
因为我沉浸到另外一个事情里面去了------完善为自己量身打造的开源项目
。

什么意思呢?就是项目都是开源的,但是只给自己用,并不打算写各种文档,教程,手册什么的。

当然,如果大家有兴趣,我也不拦着,可以前往仓库 https://github.com/chenbimo/opensource
自行查看即可。
很庆幸,也很幸运,在这个而立的年纪里,还能沉浸在自己的喜好里埋头苦干,不为取悦他人,只为自己开心而已。

这段时间,我都是一边看视频,一边敲代码,已经看完了 28 集的 《扫毒风暴》
,122 集的 《遮天》
,56 集的 《平凡的世界》
,电影 《hello!树先生》
,同时也在追更 《凡人修仙传》
,《仙逆》
,《完美世界》
。

给人印象最深的,还是 《平凡的世界》
,这个10年前的电视剧,让人思绪良多。
不管是电影还是电视剧,我都不喜欢快进或者跳着看,所以这个 56 集的电视剧,足足花了我一周时间才看完。
如果自我分析起来,我可能有着孙少平的理想主义,也有着孙少安的乐观主义,弹幕里面很多人都觉得孙少安自私,自我。
但我应该或多或少能理解,当你是一个像孙少平一样的理想主义者的时候,爱好和兴趣被剥夺的痛苦有多么强烈。
只要能一直做自己喜欢的,感兴趣的事情,就算收入微薄,也会无比开心,所以我的精神世界是很富足的,比很多人都富足。
短视频
和 游戏
就像科技时代的鸦片,令很多人沉迷其中,无法自拔。
人在负面情绪的时候,需要 短视频
和 游戏
的刺激,而这种刺激,只不过是一种对现实的短暂逃离。
就王者荣耀来说,我的好友里面,不少都是把空闲时间都花在了游戏上面,玩了 6000 多把游戏的比比皆是。
问题,总归是要解决的,逃离不是办法,如果你实在焦虑地无处安放,那么我强烈推荐看一看 《平凡的世界》
这种长篇电视剧,可以有效地把人的焦躁降低。
再说一说技术方面的东西,这段时间沉迷开源主要是 yite-cli
和 befly
两个项目。

yite-cli
是为 vue3
量身打造的脚手架,作用其实很简单,就是把上图中的这些 开发依赖
不要在每个项目中都安装一次,同时支持文件结构即路由,方便快捷地开发项目,不用手动配置路由等。

befly
则是为 Bun 量身打造的接口框架,用到了 Bun 独有的一些 API,只能在 Bun 中运行,这也是我自从 All in Bun
后的一个技术基建框架。
同时呢,除了 mysql
依赖,befly
就没有其他任何依赖了,redis
用的是 Bun 自身的实现,而 Jwt
、Cors
、Logger
、xml解析
等等,都是用 AI 做了极简的实现。

前两天我问 Bun 官方,bun.sql
什么时候支持 mysql
,官方的答复是正在进行中,估计不久的将来将会发布,那么届时 befly
将不需要任何第三方依赖。
可能有人会说,AI 时代,技术已经不是瓶颈了,用 AI 实现能跑能用就行。
我不否认这种想法,但也认为,能有一些技术上面的小执着,能耐心打磨雕刻自己眼中的艺术品,是作为技术人的一种幸福。

重构后的代码已经能正常运行了,下面分享增,删,改,查的用法。
getDetail - 获取单条记录
javascript
// 基础用法
const user = await db.getDetail('users', { id: 1 });
// 指定字段
const user = await db.getDetail('users', {
where: { id: 1 },
fields: ['id', 'name', 'email']
});
// 支持表别名
const user = await db.getDetail('users u', {
where: { 'u.id': 1, 'u.status': 1 }
});
getList - 获取列表 (支持分页)
javascript
// 基础分页查询
const result = await db.getList('users', {
where: { status: 1 },
orderBy: ['created_at#DESC'],
page: 1,
pageSize: 10
});
// 返回结果结构
{
list: [...], // 数据列表
total: 100, // 总记录数
page: 1, // 当前页
pageSize: 10 // 每页大小
}
// 复杂查询
const result = await db.getList('users', {
where: {
status: 1,
role: 'admin'
},
fields: ['id', 'name', 'email', 'created_at'],
orderBy: ['created_at#DESC', 'name#ASC'],
page: 1,
pageSize: 20
});
getAll - 获取所有记录
javascript
// 获取所有符合条件的记录
const users = await db.getAll('users', {
where: { status: 1 },
orderBy: ['name#ASC']
});
// 限制字段
const users = await db.getAll('users', {
where: { status: 1 },
fields: ['id', 'name'],
orderBy: ['created_at#DESC']
});
getCount - 获取记录总数
javascript
// 基础计数
const count = await db.getCount('users', {
where: { status: 1 }
});
// 支持 leftJoin 的计数
const count = await db.getCount('users u', {
where: { 'u.status': 1, 'p.status': 1 },
leftJoins: ['posts p ON u.id = p.user_id']
});
// 使用高级 where 条件
const count = await db.getCount('users', {
where: {
status: 1,
created_at: { $gte: '2024-01-01' },
role: { $in: ['admin', 'user'] }
}
});
insData - 插入数据
javascript
// 插入单条记录
const result = await db.insData('users', {
name: 'John Doe',
email: 'john@example.com',
status: 1,
created_at: new Date()
});
// 获取插入的 ID
console.log(result.insertId);
upData - 更新数据
javascript
// 更新数据
const result = await db.upData(
'users',
{
name: 'Updated Name',
updated_at: new Date()
},
{ id: 1 } // where 条件
);
// 获取影响的行数
console.log(result.affectedRows);
delData - 删除数据
javascript
// 删除数据(软删除)
const result = await db.delData('users', {
id: 1,
status: 0
});
// 批量删除
const result = await db.delData('users', {
status: 0,
created_at: { $lt: '2023-01-01' }
});
batchInsert - 批量插入
javascript
// 批量插入
const users = [
{ name: 'User1', email: 'user1@example.com' },
{ name: 'User2', email: 'user2@example.com' },
{ name: 'User3', email: 'user3@example.com' }
];
const result = await db.batchInsert('users', users);
何以解忧,唯有代码,欢迎一起探讨技术,交流副业与搞钱。