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配置
76const 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基本连接,后续所有模型均依赖此实例
3321const 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默认结构
3555const 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类型(通过默认结构自动生成)
6062type 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