美文网首页
sequelize-typescript 子查询、分页、orde

sequelize-typescript 子查询、分页、orde

作者: AsaGuo | 来源:发表于2019-02-19 15:36 被阅读3次

    0. 实体结构

    0.1 MySQL:

    /*Table structure for table `book` */
    DROP TABLE IF EXISTS `book`;
    CREATE TABLE `book` (
      `rid` INT(11) NOT NULL,
      `authorId` INT(11) DEFAULT NULL,
      PRIMARY KEY (`rid`),
      KEY `FK_person_id` (`authorId`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    /*Table structure for table `person` */
    DROP TABLE IF EXISTS `person`;
    CREATE TABLE `person` (
      `rid` INT(11) NOT NULL AUTO_INCREMENT,
      `name` CHAR(50) DEFAULT NULL,
      PRIMARY KEY (`rid`)
    ) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    

    0.2 Sequelize-typescript Model:

    import {Table, Column, Model, Sequelize, ForeignKey, BelongsTo, HasMany } from 'sequelize-typescript';
    
    @Table({
        tableName: 'base_table'
    })
    export default class base_table extends Model<base_table>{
        @Column({
            primaryKey: true,
            autoIncrement: true
        })
        rid: number;
    }
    
    @Table({
        tableName: 'person'
    })
    export default class person extends base_table {
        @Column
        name:string;
    
        @HasMany(() => book)
        book: book[];
    }
    
    @Table({
        tableName: 'book'
    })
    export default class book extends base_table { 
        @ForeignKey(() => person)
        @Column
        authorId: number;
    
        @BelongsTo(() => person)
        person:person;
    }
    

    1. 嵌套子查询

    • MySQL:
    SELECT 
        `person`.*, 
        (select count(*) 
           from book 
          where person.rid = book.authorId) AS `bookCount` 
    FROM `person`;
    
    • sequelize-typescript:
    let options = {
            attributes:['person.*',
            [
                Sequelize.literal("(select count(*) from book where person.rid = book.authorId)"),
                'bookCount'
            ]]
        };
    
        person.findAndCountAll(options)
            .then(result => {
                console.log('result.rows:',result.rows)
            })
    

    2. LEFT OUTER JOIN

    • MySQL:
    SELECT 
        `person`.`rid`, 
        `person`.`name`, 
        `book`.`rid` AS `book.rid`, 
        `book`.`authorId` AS `book.authorId` 
    FROM `person` 
    LEFT OUTER JOIN `book`
    ON `person`.`rid` = `book`.`authorId`;
    
    • typescript:
    let options = {
            include:[{model:book}]
        }
    
        person.findAndCountAll(options).then(results => {
            results.rows.forEach((item, index) => {
                console.log('item:',item)
            })
        })
    

    3. 分页查询

    • MySQL:
    SELECT `rid`, `authorId` 
    FROM `book`
    LIMIT 0, 10;
    
    • sequelize-typescript:
        let currentPage = 1;
        let pageSize = 10;
        
        let options ={
            raw:true,
                offset:(currentPage - 1) * pageSize,
                limit:pageSize
            }
    
        book.findAndCount(options)
            .then(result => {
                result.rows.forEach((item, index) => {
                    console.log('item:',item)
                })
            })
    

    4. order

    • MySQL:
    SELECT `rid`, `name` 
      FROM `person` 
     ORDER BY `rid` DESC;
    
    • sequelize-typescript:
        let options = {
            raw:true,
            order:[['rid', 'DESC']]
        }
        person.getList(options)
            .then(result =>{
                console.log('result:',result)
            })
    

    5. like操作符

    • MySQL:
    SELECT `rid`, `name` 
      FROM `person`
     WHERE `name` LIKE '%asa%';
    
    • sequelize-typescript:
        let options = {
            where: {
                name: {
                    [Sequelize.Op.like]:'%'+'asa'+'%'
                }
            }
        }
    
        person.findAndCountAll(options)
            .then(result => {
                console.log('result:',result);
            })
    

    6. Function

    • MySQL:
    UPDATE `person` 
    SET 
     `rid`=1,
     `name`=md5("222") 
    WHERE `rid` = 1
    
    • sequelize-typescript:
        let options = {
            where:{rid:1}
        }
    
        let person_item= {
            rid:1,
            name:Sequelize.literal('md5("222")')
        }
    
        person.update(person_item,options)
            .then(result => {
                console.log('result:',result)
            })
    

    相关文章

      网友评论

          本文标题:sequelize-typescript 子查询、分页、orde

          本文链接:https://www.haomeiwen.com/subject/fshfyqtx.html