Node 注解(装饰器)(MyBatis注解版)

import TransactionMysql = require('transaction-mysql');

let pool = new TransactionMysql({
    host: 'localhost',
    port: 3306,
    user: 'tujiawei',
    password: '123456',
    database: 'test'
});

// 注解
function Select(sql) {
    return function (target, key: string, descriptor) {
        descriptor.value = async function (...params) {
            return await pool.exec(sql, params);
        }
    }
}
// 事务注解
const Transaction = function (target, key: string, descriptor) {
    let originMethod = descriptor.value;
    descriptor.value = async function () {
        pool.begin();
        await originMethod.apply(this, [pool]);
        await pool.commit();
    }
};

class Service {
    conn;
    @Select('select * from t_table')
    async findAll() {}
    @Select('select * from t_table where id = ?')
    async findById(id) {}
    @Select('update t_table set name = ? where id = ?')
    async update(...args) {}
    @Transaction
    async updateTow(conn: any = {}) {
        let item1: any = await this.findById(4);
        let item2: any = await this.findById(3);
        item1 = item1[0];
        item2 = item2[0];
        conn.add('update t_table set name = ? where id = ?', [item1.name, item2.id]).add('update t_table set name = ? where id = ?', [item2.name, item1.id]);
    }
}

async function test() {
    let service = new Service();
    // await service.updateTow();
    let list = await service.findAll();
    console.log(list)
}

test();
// pool.begin().add('insert into t_table(name) values(?)', ['abc']).commit();
// new Service().findAll().then(list => {
//     console.log(list);
// });

原文地址:https://www.cnblogs.com/tujw/p/12408246.html

时间: 2024-10-31 19:27:40

Node 注解(装饰器)(MyBatis注解版)的相关文章

Python学习之路:装饰器实现终极版

网站实现验证功能装饰器: import time user,passwd='alex','abc123' def auth(func): def wrapper(*args,**kwargs): print("wraper func args:",*args,**kwargs) username=input("Username:").strip() password=input("Password:").strip() if user==user

阶段3 1.Mybatis_12.Mybatis注解开发_1 mybatis注解开发的环境搭建

注解开发是省了IUserDao.xml这个映射文件里面的配置 环境搭建 首先是packaging标签.输入jar 需要准备一个实体类.生成getter和setter还有toString方法 创建dao接口.先写一个查询所有的接口 按照原来的要求需要在resources下创建Directory也就是文件夹 创建了com.itheima.dao这三个文件夹.为了演示用. 配置主配置文件SqlMapConfig.xmls 复制给的资料里面的config的约束 先输入configuration标签.然互

阶段3 1.Mybatis_12.Mybatis注解开发_6 mybatis注解开发一对一的查询配置

新建Account实体类 生成getter和setter还有toString方法 先创建dao类 全局的配置,这里要改成package 创建多对一的关系 在查询的时候输出user这个对象的内容 建立查询的映射 account自己的数据封装完了. result的注解里面还有 one 和 many 点进去看One对象.select指向的就是如何查询用户的唯一标志 FetechType进去看源码 这里有一个lazy延迟加载.eager就是立即加载.实际开开发的时候,对一选择立即加载,对多选择延迟加载.

阶段3 1.Mybatis_12.Mybatis注解开发_3 mybatis注解开发保存和更新功能

使用直接来实现CRUD操作 Insert方法 创建测试类 把变量都定义在外面 写测试方法 修改链接的数据库 update方法 再加上address 被更新的数据 原文地址:https://www.cnblogs.com/wangjunwei/p/11332928.html

阶段3 1.Mybatis_12.Mybatis注解开发_7 Mybatis注解开发一对多的查询配置

一对多的配置,一个用户对应多个账户 需要在Accout里面增加根据用户的uid查询的方法 在user里面指定子一对多的查询配置 换行显示 测试 把这里注销掉.测试延迟加载,代码注释掉后,延迟加载就没有再执行.什么时候用才会去加载数据 测试只执行了 select * 原文地址:https://www.cnblogs.com/wangjunwei/p/11334815.html

阶段3 1.Mybatis_12.Mybatis注解开发_8 mybatis注解开发使用二级缓存

执行两次都查询userId为57的数据.测试一级缓存 返回true 新建测试类 ,测试二级缓存 二级缓存的配置 首先是全局配置,不配置其实也是可以的.默认就是开启的.这里为了演示配置上 dao类里面进行配置 运行测试方法 只查询了一次 原文地址:https://www.cnblogs.com/wangjunwei/p/11334841.html

配置注解映射器和适配器。

<!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置 mvc:annotation-driven默认加载很多的参数绑定方法, 比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter 实际开发时使用mvc:annotation-driven --> 1.springmvc.xml配置 <?xm

Python 基础 - Day 4 Learning Note - Decorator 装饰器

装饰器的知识准备 函数,函数参数 作用域: 全局变量,局部变量 变量解析规则:LEGB法则 - 假设嵌套函数(第二层函数),解析器查找内部函数的变量的顺序如下. 在任何一层先找到了符合要求的变量,则不再向外查找.如果没有,则抛出N Local - 本地函数内部,通过任何方式赋值的,而且没有被global关键字声明为全局变量的变量 Enclosing - 直接该内部函数的外围空间(即它的上层函数)的本地作用域.多层嵌套,则有内而外逐层查找,直至最外层的函数 Global - 全局空间(模块encl

python笔记-4(装饰器、生成器、迭代器)

一.熟练掌握装饰器的原理 (在装饰器学习的过程中,查了看了很多资料,个人感觉走了很多的弯路,这个笔记,分享我的理解,希望能帮助到一些人.本文对装饰器的描述,侧重点是条理与逻辑思路,想通过从无到有的方式,描述一个理解的过程,重点在step by step 更快的理解这个东西) 需要理解装饰器的两大组成,使用装饰器时能解决不确定长度的形参传递.函数返回值及条件判断的场景. 1.使用装饰器的目的及原则 目的:为原来的函数增加一些新的功能,如日志输出,运行时间计算,登录退出等. 实现的原则(两点): (

装饰器,functools,参数注解

装饰器(无参)? 它是一个函数? 函数作为它的形参? 返回值也是一个函数装饰器和高阶函数? 装饰器是高阶函数,但装饰器是对传入函数的功能的装饰(功能增强)带参装饰器? 它是一个函数? 函数作为它的形参? 返回值是一个不带参的装饰器函数? 使用@functionname(参数列表)方式调用? 可以看做在装饰器外层又加了一层函数函数注解? Python 3.5引入? 对函数的参数进行类型注解? 对函数的返回值进行类型注解? 只对函数参数做一个辅助的说明,并不对函数参数进行类型检查? 提供给第三方工具