分页和查询
分页信息和查询条件
{ "tableName": "node_user", "idKey": "id", "cols": { "id": "", "name": "", "age": "" }, "pager": { "pagerTotal": 100, "pagerSize": 2, "pagerIndex": 1, "orderBy": { "id": false } }, "query": { "name":[401, 402, 403], "age":[401] } }
// meta const meta = require('../public/model/10050-user-find.json') const pager = meta.pager // 查询条件 const query = { name: [403, 'a'] } // 获取分页数据 const test_getPager = () => { console.log('\n---- getPager ----') returnnewPromise((resolve, reject) => { getPager(help, meta, query, pager).then((list) => { // 获取列表 resolve(list) }) }) } // 获取总记录数 const test_getCount = () => { console.log('\n---- getCount ----') returnnewPromise((resolve, reject) => { getCount(help, meta, query).then((count) => { // 获取总记录数 console.log('外部获取总记录数:', count) resolve(count) }) }) } const test = async (canCount) => { if (canCount) { pager.pageTotal = await test_getCount() } // 开始测试 test_getPager().then((list) => { // 关闭 help.close() }) } test(true)
这里可以灵活的设置查询条件,以及具体的分页方式。还可以根据需求设置是否需要统计总记录数。
运行结果:
分页结果
事务的用法
简单地说就是开启事务,执行操作,提交事务。也就是在上面那些代码的外面套上事务即可。
// 循环添加 help.begin().then((cn) => { const arr = [] for (let i=100; i<110;i++) { arr.push(test_addData(i, cn)) } Promise.all(arr).then((res) => { console.log('事务的批量添加:', res) // 提交事务 help.commit(cn).then(() => { console.log(' + + + promise 提交事务的回调:') // 关闭 help.close(cn) help.closePool() }) }) })
await模式开启事务
asyncfunction check() { const cn = await help.begin() // 添加数据 await test_addData('51', cn) // 获取记录进行验证 const model1 = await test_getData(cn) console.log('(await 添加)name :', model1[0].name === '测试基础添加数据-A-11') console.log('(await 添加)age :', model1[0].age === 51) // 修改数据 await test_updateData(cn) // 获取记录进行验证 const model2 = await test_getData(cn) console.log('(await 修改)name :', model2[0].name === '测试基础添加数据-A-11--修改了') console.log('(await 修改)age :', model2[0].age === 300) // 修改数据 await test_deleteData(cn) // 获取记录进行验证 const model3 = await test_getData(cn) // 验证数据 console.log('删除!', model3.length === 0) await help.commit(cn) help.close(cn) help.closePool() } check()
最后需要注意的是“事务的并发性”。js是单线程的,但是MySQL是多线程的。所以如果同时开启两个事务的话,虽然可以通过两个独立的连接对象加以区分,提交事务的时候不会干扰,但是添加、修改的顺序却无法独立,会出现交叉的情况
源码:
https://gitee.com/naturefw/node-services
https://gitee.com/naturefw/node-services/tree/master/packages
本文作者:自然框架
个人网址:jyk.cnblogs.com
声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。