编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Node.js,ORM框架,Sequelize,入门及增、删、改、查代码案例

wxchong 2024-06-19 22:18:42 开源技术 13 ℃ 0 评论

ORM框架

ORM,对象关系映射——数据表映射(对应)一个类,数据表中的数据行(记录)对应一个对象,数据表字段对应对象的属性;数据表的操作对应对象的方法。

Sequelize,基于promise的ORM框架。地址:https://www.sequelize.com.cn/,Sequelize框架,初步体验,Sequelize具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。

安装

npm i dotenv
npm i mysql2 sequelize

版本

"dotenv": "^16.0.1",
"mysql2": "^2.3.3",
"sequelize": "^6.20.1"

生成数据库表案例

.env

MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_DB=demo
MYSQL_USER=root
MYSQL_PWD=root1234

src\config\config.default.js

const dotenv = require('dotenv');

dotenv.config();

module.exports = process.env;

src\db\sequelize.js

const {Sequelize} = require('sequelize');

const {
  MYSQL_HOST,
  MYSQL_PORT,
  MYSQL_USER,
  MYSQL_PWD,
  MYSQL_DB,
} = require('../config/config.default')

const sequelize = new Sequelize(MYSQL_DB, MYSQL_USER, MYSQL_PWD, {
  host: MYSQL_HOST,
  port: MYSQL_PORT,
  dialect: 'mysql',
});

sequelize.authenticate()
  .then(() => {
    console.log('数据库连接成功')
  })
  .catch((err) => {
    console.log('数据库连接失败', err)
  });

module.exports = sequelize;

src\model\user.model.js

const { DataTypes } = require('sequelize');
const sequelize = require('../db/sequelize.js');

// 创建模型
const User = sequelize.define('system_user', {
  // id会被sequelize自动创建, 管理
  username: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: true,
    comment: '用户名',
  },
  password: {
    type: DataTypes.CHAR(64),
    allowNull: false,
    comment: '密码',
  },
  status: {
    type: DataTypes.BOOLEAN,
    allowNull: false,
    defaultValue: 1,
    comment: '状态:1、可用;0、不可用',
  },
},{
  // 其他模型参数
});

// node src/model/user.model.js
// 创建数据表(强制同步数据库)
User.sync({ force: true })

module.exports = User;

执行命令: node src/model/user.model.js

说明:

1、id会被sequelize自动创建及管理。

2、sequelize根据模型创建表时,会?动将指定的表名变成复数。

3、sequelize根据模型创建表时,会?动增加两个字段:createdAt和updatedAt,这两个字段?于记录数据创建的时间与数据更新的时间。

4、User.sync({ force: true }),创建数据表(强制同步数据库)。

增、删、改、查代码案例

service层,业务逻辑层

src\service\user.service.js

const { Op } = require("sequelize");
const User = require('../model/user.model');

class UserService{

  /**
   * 创建用户
   */
  async createUser(username,password){
    const res = await User.create({ username, password, status:1 });
    return res.dataValues;
  }

  /**
   * 查找用户
   */
  async getUser({ id, username, password, status }) {
    const whereOpt = {}

    id && Object.assign(whereOpt, { id })
    username && Object.assign(whereOpt, { username })
    password && Object.assign(whereOpt, { password })
    status && Object.assign(whereOpt, { status })

    const res = await User.findOne({
      attributes: ['id', 'username', 'password', 'status'],
      where: whereOpt,
    })

    return res ? res.dataValues : null
  }

  /**
   * 修改用户
   */
  async modifyUser({ id, username, password, status }) {
    const whereOpt = { id }
    const newUser = {}

    username && Object.assign(newUser, { username })
    password && Object.assign(newUser, { password })
    status && Object.assign(newUser, { status })

    const res = await User.update(newUser, { where: whereOpt })
    return res[0] > 0 ? true : false;
  }

  /**
   * 删除用户
   */
  async deleteUser(id) {
    const res = await User.destroy({ where: { id } })
    return res > 0 ? true : false;
  }

  /**
   * 统计
   */
  async countUsers(){
    const res = await User.count();
    return res;
  }

  /**
   * 查询
   */
  async queryUsers(pageNum=1, pageSize=10){
    const offset = (pageNum - 1) * pageSize;
    const res = await User.findAll({ offset: offset, limit: pageSize * 1 });
    return res;
  }

  /**
   * 分页
   */
  async pageUsers(pageNum=1, pageSize=10){
    const offset = (pageNum - 1) * pageSize;
    const { count, rows } = await User.findAndCountAll({offset: offset, limit: pageSize * 1})
    return {count,rows};
  }

  /**
   * 分页查询(带条件)
   */
  async pageUsers2(pageNum=1, pageSize=10, { id, username, password, status }){
    const whereOpt = {}

    id && Object.assign(whereOpt, { id })
    username && Object.assign(whereOpt, { username:{[Op.like]: '%' + username + '%' }})
    password && Object.assign(whereOpt, { password })
    status && Object.assign(whereOpt, { status })

    const offset = (pageNum - 1) * pageSize;
    const { count, rows } = await User.findAndCountAll(
      {
        offset: offset, 
        limit: pageSize,
        attributes: ['id', 'username', 'password', 'status'],
        where: whereOpt,
      })
    return {count,rows};
  }
}

module.exports = new UserService();

测试

src\test\user.test.js

const userService = require('../service/user.service');

// node src/test/user.test.js

async function createUserTest(){
  const res = await userService.createUser('user10','123456');
  console.log("result",res);
  // result {
  //   id: 4,
  //   username: 'admin',
  //   password: '1234',
  //   status: true,
  //   updatedAt: 2022-06-05T08:52:11.958Z,
  //   createdAt: 2022-06-05T08:52:11.958Z
  // }
}
// createUserTest();


async function  getUserTest(){
  const res = await userService.getUser({username:'zhangsan'});
  console.log("result",res);
  // result { id: 1, username: 'zhangsan', password: '1234', status: true }
}
// getUserTest();


async function modifyUserTest(){
  const res = await userService.modifyUser({ id:2, password: '12345678'});
  console.log("result", res);
  // result true
}
// modifyUserTest();


async function deleteUserTest(){
  const res = await userService.deleteUser(4);
  console.log("result", res);
  // result true
}
//deleteUserTest();


async function countUsersTest(){
  const count = await userService.countUsers(1,10);
  console.log("count", count);
  // 12
}
// countUsersTest();


async function queryUsersTest(){
  const users = await userService.queryUsers(1,10);
  console.log("users", users);
  console.log("users", users.length); 
  // 10
}
// queryUsersTest();


async function pageUsersTest(){
  const { count, rows } = await userService.pageUsers(1,10);
  console.log("count", count);
  console.log("rows", rows.length); 
  // 10
}
// pageUsersTest();


async function pageUsers2Test(){
  const { count, rows } = await userService.pageUsers2(2,10,{username:"user"});
  console.log("count", count);
  console.log("rows", rows.length); 
}
pageUsers2Test();

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表