首页 > 其他分享 >数据持久化

数据持久化

时间:2023-02-11 00:33:37浏览次数:24  
标签:body 持久 name app ctx model 数据 id

说人话就是把数据扔到数据库中

对象关系映射ORM

安装sequelize

  • 安装两个插件
cnpm install egg-sequelize mysql2
  • 引入插件
    plugin.js
sequelize: {
    enable: true,
    package: 'egg-sequelize'
  },
  • 配置插件
    config.default.js
config.sequelize = {
    dialect:'mysql',//使用mysql数据库系统
    database:'test',//使用test这个数据库
    host:'localhost',
    port:3306,
    username:'root',//用root用户的登录数据库系统
    password:'123456'
  };
  • 创建数据模型(定义表的结构)
    sequelize的数据类型

表都写在app的model目录下

创建班级班,由于class是js的关键字,所以表名改成clazz
先定义clazz表
clazz.js

module.exports = app => {
    const {STRING} = app.Sequelize;//表中定义的数据类型
    const Clazz = app.model.define('clazz',{//通过app.model.define方法创建数据表
        //会自动生成id字段
        name:STRING,
    },
    {
        freezeTableName: true,//如果不设置此项,在数据库中表名会多个s,如clazzs
        createdAt: false,//不默认加创建时间字段
        updatedAt: false,//不默认加修改时间字段
    }
    )

    return Clazz;
}
  • 在根目录创建app.js,与app同级

    用来创建表
    app.js
module.exports = app => {
   app.beforeStart(async function(){//在项目启动的时候执行
        await app.model.sync({});//app.model拿到数据模型,它的sync方法能根据模型创建表
   });
};

启动项目后

在后台操作数据库

用controller来操作数据库(实际开发是在service层操作)
在controller目录下新建clazz.js

配置路由router.js

router.resources("clazz","/clazz",controller.clazz);

clazz.js

const { Controller } = require('egg');
class clazzController extends Controller {
    async index() {
        let id = this.ctx.request.query.id;//query获取get请求发给后台的参数,而不能是body.id
        let clazzList = await this.app.model.Clazz.findAll({
          where:{
              id:id//where条件查询
          }
        });//sequelize定义的查询表格所有信息的函数findAll
        this.ctx.body = clazzList;
    }

    async create() {
        let name = this.ctx.request.body.name;//前端传来的name
        await this.app.model.Clazz.create({//添加数据的函数create
            name:name//第一个name是字段
        });
        this.ctx.body = "添加成功";
      }

    async destroy() {
        let id = this.ctx.params.id;
        await this.app.model.Clazz.destroy({where:{
            id:id
        }});
        this.ctx.body = "删除成功";
    }

    async update() {
        let id = this.ctx.params.id;
        let name = this.ctx.request.body.name;
        await this.app.model.Clazz.update({name:name},{
            where:{
                id:id
            }
        });
        this.ctx.body = "修改成功";
      }
  }
  
  module.exports = clazzController;





async index() {
        let clazzList = await this.app.model.Clazz.findAll();
        this.ctx.body = clazzList;
    }


条件查询

async index() {
        let id = this.ctx.request.query.id;//query获取get请求发给后台的参数,而不能是body.id
        let clazzList = await this.app.model.Clazz.findAll({
          where:{
              id:id//where条件查询
          }
        });//sequelize定义的查询表格所有信息的函数findAll
      this.ctx.body = clazzList;
    }

添加外键

将student表和clazz表关联
新建数据模型student.js

module.exports = app => {
    const {STRING,DOUBLE} = app.Sequelize;//表中定义的数据类型
    const Student = app.model.define('student',{//通过app.model.define方法创建数据表
        //会自动生成id字段
        name:STRING,
        score:DOUBLE,
    },
    {
        freezeTableName: true,//如果不设置此项,在数据库中表名会多个s,如clazzs
        createdAt: false,//不默认加创建时间字段
        updatedAt: false,//不默认加修改时间字段
    }
    );

    Student.associate = function(){
        app.model.Student.belongsTo(app.model.Clazz,{//与Clazz关联
            foreignKey:'clazz_id',//student表的外键,字段名为clazz_id
            as:'clazz'
        })
    }

    return Student;
}

controller中新建student.js
以增查的方法为例

const { Controller } = require('egg');
class studentController extends Controller {
    async index() {
        let id = this.ctx.request.query.id;
        let studentList = await this.app.model.Student.findAll({
          where:{
              id:id//where条件查询
          }
        });//sequelize定义的查询表格所有信息的函数findAll
      this.ctx.body = studentList;
    }

    async create() {
        let name = this.ctx.request.body.name;
        let score = this.ctx.request.body.score;
        await this.app.model.Student.create({
            name:name,
            score:score
        });
        this.ctx.body = "添加成功";
      }
  }
  
  module.exports = studentController;

app.js改下启动配置

module.exports = app => {
   app.beforeStart(async function(){//在项目启动的时候执行
      //   await app.model.sync({});//app.model拿到数据模型,它的sync方法能根据模型创建表
        await app.model.sync({force:true});//开发时使用,再次启动项目时会清空表格中的数据
   });
};

添加

查看

标签:body,持久,name,app,ctx,model,数据,id
From: https://www.cnblogs.com/ben10044/p/17110745.html

相关文章