美文网首页
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

    0. 实体结构 0.1 MySQL: 0.2 Sequelize-typescript Model: 1. 嵌套子...

  • SQL limt优化

    避免数据量大时扫描过多的记录解决:子查询的分页方式或者JOIN分页方式。JOIN分页和子查询分页的效率基本在一个等...

  • MySQL03

    DQL查询语句 分页查询 分组函数 分组查询 子查询 多表连接查询 1、分页查询 当数据库中数据过多时,不能一次全...

  • 数据库查询语句

    条件与逻辑查询 模糊查询 范围查询 排序 聚合函数 分组 连接查询 分页 子查询

  • MySQL之子查询

    本文主要介绍MySQL中的子查询,及如何使用它。 I、利用子查询进行过滤 假设我们有三个tables:1、orde...

  • hibernate中的查询

    HQL 查询所有 条件查询 分页查询 Criteria 查询所有 条件查询 分页查询 查询总记录 原生SQL

  • JPA “分页”,“AND” , “OR” ,“子查询”

    普通模糊查询

  • day03 高级查询 视图操作

    1 子查询 分页查询 计算 sum, count, avg,等合计函数时排除null值 CASE 函数在分组查询中...

  • MySQL查询语句

    目录 一、查询准备 二、条件查询 三、排序 四、聚合函数 五、分组 六、分页 七、连接查询 八、自关联 九、子查询...

  • MySQL 面试系列:MySQL 常见的开放性问题

    有一个超级大表,如何优化分页查询? 超级大表的分页优化分有以下两种方式: 数据库层面优化:利用子查询优化超多分页场...

网友评论

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

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