经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Node.js » 查看文章
NodeJS Express使用ORM模型访问关系型数据库流程详解
来源:jb51  时间:2023/1/11 8:38:39  对本文有异议

一、ORM模型

设计思想,主要目的是简化计算机程序访问数据库

1、ORM:对象关系模型(对象关系映射) Object Releastion Model,将程序中的对象和数据库中关系(表格)进行映射。可以使开发者在程序中方便的对数据库进行操作(用户在程序操作对对象实际就是操作数据库的表格)

2、ORM的映射关系:

(1)程序中的模型(即为类) <——>表名

(2)模型的类型(类中定义的属性)<——> 表的列

(3)由模型创建的对象(类的实例) <——> 表中的行

二、在Node中ORM的实现

1、Sequelize模块:支持ORM映射的模块,可以访问关系型数据库,可以提高node程序访问数据库的开发效率。

2、Sequelize模块的使用:

(1)安装MySQL模块:npm install mysql2

(2)安装Sequelize模块:npm install sequelize

3、Sequelize模块的使用

(1)创建数据库的配置文件

导入

创建数据库的配置对象

  1. //1.导入Sequelize模块
  2. const Sequelize = require('sequelize');
  3. //2.使用Sequelize模块配置和数据库的连接信息
  4. const mysql_Sequelize = new Sequelize('sales','root','syy2589',{
  5. host:'localhost', //数据库服务器的IP地址或域名
  6. port:'3306', //数据库使用的端口号,MySQL数据库默认端口号3306
  7. dialect: 'mysql', //数据库的类型
  8. pool:{ //数据库连接池:可以放若干个数据库的连接对象,提高数据库访问效率
  9. max:20, //数据库连接池中连接对象的最大个数
  10. min:3, //数据库连接池中连接对象的最少个数
  11. idle:20000 //等待延迟的时间,单位:毫秒
  12. },
  13. define:{
  14. 'charset':'utf8' //处理MySQL中中文字符的问题
  15. }
  16. })
  17. // 3.导出数据库的连接对象
  18. module.exports = mysql_Sequelize;

注:new Sequelize(数据库名,用户名,密码,(配置信息))

 测试数据库是否连接成功

  1. const mysqltest = require('./mysqlconfig.js');
  2. mysqltest.authenticate() //用来测试数据库是否连接成功
  3. .then(()=>{
  4. console.log('数据库连接成功~')
  5. })
  6. .catch((err)=>{
  7. console.error(err);
  8. })

(2)创建模型:实现模型和数据表的映射

模型名 = sequelize.define('数据表名','模型的属性',{其他配置})

模型名 <——> 数据表名

模型的属性<——> 数据表列

  1. const Sequelize = require(sequelize);//1.导入数据库的配置对象const mysql_Sequelize = require('../config/mysqlconfig.js');// 2.创建模型与数据库中的表实现映射const Employee = mysql_Sequelize.define('employee',{ 'e_id':{ type:Sequelize.STRING, // type:Sequelize.INTEGER, 表示id的数据类型为int型 autoIncrement:false, //表示id的值在表中是否自增 allowNull:false, //表示id对象的值不能为空 fields:'e_id',//实现模型的属性名和表的列名之间的映射关系(对应关系) }, 'e_name':{ type:Sequelize.STRING, autoIncrement:false, allowNull:false, fields: 'e_name', }, 'sex':{ type:Sequelize.STRING, autoIncrement:false, allowNull:false, fields: 'sex', }, 'apartment':{ type:Sequelize.STRING, autoIncrement:false, allowNull:true, fields: 'apartment', }, 'phone':{ type:Sequelize.STRING, autoIncrement:false, allowNull:true, fields: 'phone', }, 'address':{ type:Sequelize.STRING, autoIncrement:false, allowNull:true, fields: 'address', },},{ freezeTableName:true, //不使用Sequelize给模型自定义的表名(自定义表名的命名规则:模型名后加s) timestamps:false //若为true,在获取数据时会自动添加两列数据(createTime、updateTime)});// 导出模型module.exports = Employee;

(3)创建接口文件:使用模型创建数据表

1??插入记录

模型名.create({ }).then((result)=>{}):then表示插入操作完成后的处理,result参数中保存有数据库返回的信息

  1. // http://localhost:9000/employee/addempEmprouter.post('/addemp',(req,res)=>{ console.log(req.body); Employee.create({ id:req.body.id, name:req.body.name, sex:req.body.sex, apartment:req.body.apartment, phone:req.body.phone, address:req.body.address }).then((result)=>{ if(result){ res.json({ code:1002 }) } })})

(4)前端页面:使用jQuery向服务器端发起ajax请求

1??表单序列化:表单名.serizlize(),作用是将表单中所有控件的值序列化成字符串

2??删除记录

模型名:destroy({

where:{

列名:值

}

}).then((result)=>{

删除成功后的回调

}

3?? 更新记录

模型名.update({修改的列},{where条件}.then((result)={

更新成功后的回调

}).catch((e)=>{

出现异常的回调

})

4?? 查询记录

模型名.findAll().then((result)=>{ //result:是一个数组,存放的是从数据库中查询的所有记录

查询成功后的回调

}).catch((e)=>{

执行查询出现异常的回调

}

  1. Emprouter.get('/findemp',(req,res)=>{ if(req.url != './favicon.ico'){ Employee.findAll().then((result)=>{ res.send(JSON.stringify(result)); }) }})

5?? 模糊查询:

在执行带条件查询时,需要导入Sequelize模块的Op子模块,在Op子模块中存放的是所有条件查询的关键字。

  1. const Op = require('sequelize').Op;
  1. Emprouter.post('/findlike',(req,res)=>{ // 获取前端发送的部门 let apartment = req.body.apartment; // 进行模糊查询 Employee.findAll({ where:{ apartment:{ [Op.like]:apartment+'%' } } }).then((result)=>{ res.json(result); }).catch((e)=>{ console.log(e); res.json('查询失败~') })})

到此这篇关于NodeJS Express使用ORM模型访问关系型数据库流程详解的文章就介绍到这了,更多相关NodeJS Express访问关系型数据库内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号