Web开发

首页 » 常识 » 预防 » 融职教育Web前端学习第8章egg基
TUhjnbcbe - 2023/9/28 17:25:00
北京白癜风医院哪个好 https://yyk.39.net/hospital/89ac7_knowledges.html

一、ORM框架概述

对象关系映射(ObjectRelationalMapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。

这种方案存在以下不足:

持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,*药修改持久化曾的相关程序代码,增加了软件的维护难度。ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework。

ORM的方法论基于三个核心原则:

简单:以最基本的形式建模数据。传达性:数据库结构被任何人都能理解的语言文档化。精确性:基于数据模型创建正确标准化了的结构。二、引入sequelize

安装egg-sequelize

1#下载依赖,安装egg-sequelize和mysqlnpminstall--saveegg-sequelizemysql2

在egg项目中配置egg-sequelize

1//config/plugin.js2exports.sequelize={3enable:true,4package:egg-sequelize5}

//config/config.default.jsconfig.sequelize={dialect:mysql,database:army,//数据库名host:localhost,port:,username:root,//用户名password:,//密码operatorsAliases:false,}

//根目录app.js,没有创建一个app.jsmodule.exports=app={app.beforeStart(asyncfunction(){//awaitapp.model.sync({force:true});//开发环境使用,会删除数据表awaitapp.model.sync({});//会永久保存数据});};

三、创建数据模型

数据模型

这种模式可以通过控制器和服务进行访问app.model.Clazz或者ctx.model.Clazz,比如我们写app/controller/Clazz.js:

//app/model/clazz.jsmodule.exports=app={const{STRING}=app.Sequelize;//数据库字段类型,一对多constClazz=app.model.define(clazz,{//sequelize会自动创建主键name:STRING,//数据库字段名称与字段类型})returnClazz;//返回班级}

//app/model/students.jsmodule.exports=app={const{STRING}=app.Sequelize;constStudents=app.model.define(students,{name:STRING,})Students.associate=function(){app.model.Students.belongsTo(app.model.Clazz,{//设置外键foreignKey:clazz_id,//关联的外键as:clazz//将关联的数据显示到该字段上})}returnStudents;}

四、操作数据

Controller获取数据

//app/controller/clazz.jsusestrict;constController=require(egg).Controller;classClazzControllerextendsController{//查询班级列表asyncindex(){constclazzList=awaitthis.app.model.Clazz.findAll();//查询数据库中Clazz.awaitthis.ctx.render(clazz_list,{clazzList:clazzList//将记录标题HelloWorld插入posts表//查询条件和结果自定义})}//添加班级的页面asyncinsertClazz(){awaitthis.ctx.render(create_clazz.html)}//在数据库中添加班级asynccreate(){constbody=this.ctx.request.body;constclazz={name:body.name}awaitthis.app.model.Clazz.create(clazz);//把添加得班级存入到数据库中。this.ctx.redirect(/clazz)//重镜像,添加数据之后自动跳转/Clazz页面}//通过id在数据库中删除班级asyncdestroy(){constid=this.ctx.request.body.clazz_id;conststudent=awaitthis.app.model.Clazz.findOne({where:{id:id}});student.destroy();this.ctx.redirect(/clazz)}}module.exports=ClazzController;

//app/controller/students.jsusestrict;constController=require(egg).Controller;classStudentsControllerextendsController{//联查学生信息asyncindex(){conststudentList=awaitthis.app.model.Students.findAll({include:[{//联查班级的数据model:this.app.model.Clazz,as:clazz}]});awaitthis.ctx.render(student_list.html,{studentList:studentList})}//添加学生的页面asyncinsertStudent(){constclazzList=awaitthis.app.model.Clazz.findAll();awaitthis.ctx.render(create_student.html,{clazzList})}//在数据库中添加学生asynccreate(){constbody=this.ctx.request.body;conststudent={name:body.name,clazz_id:body.clazz_id}awaitthis.app.model.Students.create(student);this.ctx.redirect(/students)}//通过id删除学生信息asyncdestroy(){constid=this.ctx.request.body.student_id;//findOne指的是查找指定表的单条数据,返回一个对象conststudent=awaitthis.app.model.Students.findOne({//where()条件查询where:{id:id}});student.destroy();this.ctx.redirect(/students)}}module.exports=StudentsController;

1
查看完整版本: 融职教育Web前端学习第8章egg基