数据库查询方式
来源:10-4 全栈实现实现图书排序—完成 Koa +Sequelize 后端图书三级分类排序

小鹏友的小弟
2023-07-09
- 课程中我看到使用的了两种ORM查询的方式,一种是ORM工具提供的方式,一种是直接使用ORM的SQL语句的查询方式,我的理解是,是简单的查询使用ORM自带的方式,复杂的查询直接使用SQL语句的形式进行查询。但是我了解到我们公司是全部使用SQL语句的查询方式,并且说ORM的方式不好管理,是因为ORM会增加项目的复杂度吗?,在大项目中ORM和普通的SQL的使用占比是多少啊,或者说什么场景偏向于ORM什么场景偏向于SQL?
- 如果是使用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 可以辅助用用。
012023-07-15