数据库查询方式

来源:10-4 全栈实现实现图书排序—完成 Koa +Sequelize 后端图书三级分类排序

小鹏友的小弟

2023-07-09

  1. 课程中我看到使用的了两种ORM查询的方式,一种是ORM工具提供的方式,一种是直接使用ORM的SQL语句的查询方式,我的理解是,是简单的查询使用ORM自带的方式,复杂的查询直接使用SQL语句的形式进行查询。但是我了解到我们公司是全部使用SQL语句的查询方式,并且说ORM的方式不好管理,是因为ORM会增加项目的复杂度吗?,在大项目中ORM和普通的SQL的使用占比是多少啊,或者说什么场景偏向于ORM什么场景偏向于SQL?
  2. 如果是使用ORM的方式,ORM在定义的时候需要编写对应的字段类型,可以在项目初始化进行数据库表的创建。但是如果是纯SQL的做法的话,项目中就不会定义数据库的表结构啊,那他们在项目初始化的时候,如何进行表结构的创建呢,难道使用人为的手动创建吗?
写回答

1回答

keviny79

2023-07-09

问题1:  ORM 的诞生就是为了提高开发效率,节省代码量,修改和扩展更方便,像Java 的 mybatisplus 也是一个 ORM 工具。

有了对比就会体会好处: 一般项目多,模块多,数据表字段多 ORM的好处才展现的更彻底! 假如一个项目有 50个模块包含了500个这样简单 ORM SQL 查询,一共50个表,每个表平均10个字段,那么如果用 ORM 写将大幅缩减代码,大大提高开发效率,修改代码也变得比纯 SQL 好了很多! 比如类似下面这样的方法一共有500多个(一个 findAll 用了很多次,带条件的,不带条件,模糊查询,其他49个模块也都有类似的方法)

findByUsmAndAddr() {

    return userinfoModel.findAll({

      raw: true,

      where: {

        [Op.or]: [

          {

            username: {

              [Op.like]: '王%',

            },

          },

          {

            address: 'wuhan',

          },

        ],

      },

    })

  }

  findByLike(key: string) {

    const searchKey = `%${key}%`

    return userinfoModel.findAll({

      raw: true,

      where: {

        username: {

          [Op.like]: searchKey,

        },

      },

    })

  }

 

  findAllUser() {

    return userinfoModel.findAll({

      raw: true,

    })

  }

  findByProps() {

    return userinfoModel.findAll({

      raw: true,

      attributes: ['username', 'psw'],

    })

  }

。。。。(模拟,假如项目中还有497个这个类似的f方法)

 

2.  现在项目中基本都用 ORM 框架开发,但如果完全不用 ORM ,单纯用普通的 SQL , 可以采用手动方式来构建【大部分 mysql 工具都集成了手动输入和命令创建两种发方式,也可以借助一些工具来创建,这里有一个简单的根据 mysql 字段来生成表的工具类。https://article.hearu.top/tool/db_create_table 可以辅助用用。

0
1
慕粉3946981
老师,如果有一个现在的项目,并且使用的是原生mysql语法,想升级成sequelize,有没有什么快速的办法将数据库中定义的字段转换成(装饰器)模型,因为手动转换成费时间了,如果我有100个mysql表,我就要建立100个模型
2023-07-15
共1条回复

前端高手养成计划-从前端到后端,全栈开发大型项目

从纯前端到“真正懂后端的前端”

215 学习 · 134 问题

查看课程

相似问题

设计模式

回答 1

数据库工具

回答 2

9-17

回答 1

数据库工具

回答 1