Skip to content

Commit 2f47139

Browse files
committed
回退demo
1 parent 73b5f4f commit 2f47139

File tree

1 file changed

+102
-80
lines changed

1 file changed

+102
-80
lines changed

src/test/demo.ts

Lines changed: 102 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,142 @@
11
/* eslint-disable @typescript-eslint/no-redeclare */
22
// @ts-nocheck
3-
import { $, _ } from 'coa-helper'
4-
import { RedisBin, RedisCache } from 'coa-redis'
5-
import { MysqlBin, MysqlCache } from '..'
3+
import { CoaMysql, MysqlBin, MysqlNative } from '..'
4+
65
// MySQL配置
76
const mysqlConfig = {
87
host: '127.0.0.1',
98
port: 3306,
109
user: 'root',
11-
password: '19990728',
10+
password: 'root',
1211
charset: 'utf8mb4',
1312
trace: true,
1413
debug: false,
1514
databases: {
16-
main: { database: 'mm-site-t1', ms: 7 * 24 * 3600 * 1000 },
15+
main: { database: 'test', ms: 7 * 24 * 3600 * 1000 },
16+
other: { database: 'other', ms: 7 * 24 * 3600 * 1000 },
1717
},
1818
}
1919

20-
const redisConfig = {
21-
host: '127.0.0.1',
22-
port: 6379,
23-
password: '',
24-
db: 1,
25-
prefix: '',
26-
trace: false,
27-
28-
}
29-
const redisBin = new RedisBin(redisConfig)
30-
const redisCache = new RedisCache(redisBin)
31-
3220
// 初始化Mysql基本连接,后续所有模型均依赖此实例
3321
const mysqlBin = new MysqlBin(mysqlConfig)
3422

23+
// 基本SQL操作
24+
25+
// 插入数据 https://knexjs.org/#Builder-insert
26+
await mysqlBin.io.table('user').insert({ userId: 'user-a', name: 'A', mobile: '15010001001', gender: 1, language: 'zh-CN', status: 1 })
27+
28+
// 查询全部数据,详见 https://knexjs.org/#Builder-select
29+
await mysqlBin.io.table('user').select()
30+
await mysqlBin.io.select('*').from('user')
31+
32+
// 带条件查询,详见 https://knexjs.org/#Builder-where
33+
await mysqlBin.io.table('user').where('status', '=', 1)
34+
35+
// 修改数据,详见 http://knexjs.org/#Builder-update
36+
await mysqlBin.io.table('user').update({ name: 'AA', gender: 2 }).where({ userId: 'user-a' })
37+
38+
// 删除数据,详见 http://knexjs.org/#Builder-del%20/%20delete
39+
await mysqlBin.io.table('user').delete().where({ userId: 'user-a' })
40+
41+
// 通过mysqlBin定义一个模型的基类,各个模型都可以使用这个基类
42+
export class MysqlNativeModel<T> extends MysqlNative<T> {
43+
constructor(option: CoaMysql.ModelOption<T>) {
44+
// 将实例配置bin绑定
45+
super(option, mysqlBin)
46+
}
47+
48+
// 也可以定义一些通用方法
49+
commonMethod() {
50+
// do something
51+
}
52+
}
53+
54+
// 定义User默认结构
3555
const userScheme = {
3656
userId: '' as string,
3757
name: '' as string,
38-
mobile: '' as string,
39-
avatar: '' as string,
40-
gender: 1 as number,
41-
language: '' as string,
42-
status: 1 as number,
4358
created: 0 as number,
4459
updated: 0 as number,
4560
}
46-
47-
// const userScheme1 = {
48-
// userId: '' as string,
49-
// name: '' as string,
50-
// mobile: '' as string,
51-
// avatar: '' as string,
52-
// gender: 1 as number,
53-
// language: '' as string,
54-
// status: 1 as number,
55-
// created: 0 as number,
56-
// updated: 0 as number,
57-
// }
58-
5961
// 定义User类型(通过默认结构自动生成)
6062
type UserScheme = typeof userScheme
6163

62-
6364
// 通过基类初始化
64-
const User = new (class extends MysqlCache<UserScheme> {
65+
const User = new (class extends MysqlNative<UserScheme> {
6566
constructor() {
6667
super(
6768
{
6869
name: 'User', // 表名,默认会转化为下划线(snackCase)形式,如 User->user UserPhoto->user_photo
6970
title: '用户表', // 表的备注名称
7071
scheme: userScheme, // 表的默认结构
7172
pick: ['userId', 'name'], // 查询列表时显示的字段信息
72-
caches: { index: ['name'], count: ['userId', 'name'] },
73-
7473
},
75-
mysqlBin,
76-
redisCache,
77-
)
74+
mysqlBin
75+
) // 绑定配置实例bin
76+
}
77+
78+
// 自定义方法
79+
async customMethod() {
80+
// 做一些事情
7881
}
7982
})()
8083

81-
// const User1 = new (class extends MysqlCache<UserScheme> {
82-
// constructor() {
83-
// super(
84-
// {
85-
// name: 'User1', // 表名,默认会转化为下划线(snackCase)形式,如 User->user UserPhoto->user_photo
86-
// title: '用户表', // 表的备注名称
87-
// scheme: userScheme1, // 表的默认结构
88-
// pick: ['userId', 'name'], // 查询列表时显示的字段信息
89-
// },
90-
// mysqlBin,
91-
// redisCache,
92-
// )
93-
// }
94-
// })()
84+
// 通过基类模型定义用户模型
85+
const User = new (class extends MysqlNativeModel<UserScheme> {
86+
constructor() {
87+
super({ name: 'User', title: '用户表', scheme: userScheme, pick: ['userId', 'name'] })
88+
}
89+
90+
// 自定义方法
91+
async customMethodForUser() {
92+
// 做一些事情
93+
}
94+
})()
95+
96+
// 通过基类模型定义管理员模型
97+
const Manager = new (class extends MysqlNativeModel<UserScheme> {
98+
constructor() {
99+
super({ name: 'Manager', title: '管理员表', scheme: userScheme, pick: ['userId', 'name'] })
100+
}
101+
})()
102+
103+
// 用户模型和管理员模型均可以调用公共方法
104+
await User.commonMethod()
105+
await Manager.commonMethod()
106+
107+
// 仅仅用户模型可以调用自定义方法
108+
await User.customMethodForUser()
109+
110+
// 插入
111+
await User.insert({ name: '王小明', gender: 1 }) // 返回 'id001',即该条数据的 userId = 'id001'
95112

96113
// 批量插入
97-
// await User.mInsert([
98-
// { name: '王小明', gender: 1 },
99-
// { name: '宋小华', gender: 1 },
100-
// ])
101-
102-
// await User.updateById('id002', { name: '李四' }) // 返回 1
103-
const a = async () => {
104-
await User.checkById('41102319990728253X')
105-
await mysqlBin.safeTransaction(async (trx: CoaMysql.Transaction) => {
106-
await User.updateById('41102319990728253X', { name: 'mmm' }, trx)
107-
for (let index = 0; index < 10; index++) {
108-
const userId = `${_.now()}-${index}-Y`
109-
await $.timeout(3000)
110-
await User.insert({ userId, name: 'heyifan2' }, trx)
111-
}
112-
})
113-
const b = await User.checkById('41102319990728253X')
114-
console.log(b);
115-
// const id = await redisCache.clearUseless('*id')
116-
// console.log('cRedis: ID类型过期缓存清除成功', id)
117-
// const data = await redisCache.clearUseless('*data')
118-
// console.log('cRedis: DATA类型过期缓存清除成功', data)
119-
}
120-
a()
114+
await User.mInsert([
115+
{ name: '王小明', gender: 1 },
116+
{ name: '宋小华', gender: 1 },
117+
]) // 返回 ['id002','id003']
118+
119+
// 通过ID更新
120+
await User.updateById('id002', { name: '李四' }) // 返回 1
121+
122+
// 通过ID批量更新
123+
await User.updateByIds(['id002', 'id003'], { status: 2 }) // 返回 2
124+
125+
// 通过ID更新或插入(如果id存在就更新,如果不存在就插入)
126+
await User.upsertById('id002', { name: '王小明', gender: 1 }) // 返回 1 ,更新了一条 userId = 'id02' 的数据
127+
await User.upsertById('id004', { name: '李四', gender: 1 }) // 返回 0 ,插入一条新数据,数据的 userId = 'id04'
128+
129+
// 通过ID删除多个
130+
await User.deleteByIds(['id003', 'id004']) // 返回 2
131+
132+
// 通过ID查询一个,第二个参数设置返回结果所包含的数据
133+
await User.getById('id001', ['name']) // 数据为{userId:'id001',name:'王小明',gender:1,status:1,...} 实际返回 {userId:'id001',name:'王小明'}
134+
135+
// 通过ID获取多个
136+
await User.mGetByIds(['id001', 'id002'], ['name']) // 返回 {id001:{userId:'id001',name:'王小明'},id002:{userId:'id002',name:'李四'}}
137+
138+
// 截断表
139+
await User.truncate() // 无返回值,主要不报错即成功截断整个表
140+
141+
// 自定义方法
142+
await User.customMethod() // 执行自定义方法

0 commit comments

Comments
 (0)