当前位置:首页 > JavaScript

js实现orm

2026-03-15 04:55:33JavaScript

使用 TypeORM 实现 JavaScript ORM

TypeORM 是一个流行的 ORM 框架,支持 JavaScript 和 TypeScript。它支持多种数据库,如 MySQL、PostgreSQL、SQLite 等。

安装 TypeORM 及相关依赖:

npm install typeorm reflect-metadata mysql2

创建实体类(Entity):

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    firstName: string;

    @Column()
    lastName: string;

    @Column()
    age: number;
}

配置数据库连接:

import { createConnection } from "typeorm";
import { User } from "./entity/User";

createConnection({
    type: "mysql",
    host: "localhost",
    port: 3306,
    username: "root",
    password: "password",
    database: "test",
    entities: [User],
    synchronize: true,
}).then(connection => {
    // 连接成功后进行操作
}).catch(error => console.log(error));

使用 Sequelize 实现 JavaScript ORM

Sequelize 是另一个流行的 ORM 库,支持多种 SQL 数据库。

安装 Sequelize 及相关依赖:

js实现orm

npm install sequelize mysql2

定义模型和连接数据库:

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

const sequelize = new Sequelize('database', 'username', 'password', {
    host: 'localhost',
    dialect: 'mysql'
});

const User = sequelize.define('User', {
    firstName: {
        type: DataTypes.STRING,
        allowNull: false
    },
    lastName: {
        type: DataTypes.STRING
    },
    age: {
        type: DataTypes.INTEGER
    }
});

(async () => {
    await sequelize.sync();
    // 数据库操作代码
})();

使用 Prisma 实现 JavaScript ORM

Prisma 是一个现代的数据层工具,可以作为 ORM 使用。

安装 Prisma:

npm install prisma @prisma/client

初始化 Prisma:

js实现orm

npx prisma init

定义数据模型(schema.prisma):

datasource db {
    provider = "mysql"
    url      = env("DATABASE_URL")
}

model User {
    id        Int     @id @default(autoincrement())
    firstName String
    lastName  String
    age       Int
}

生成客户端并执行迁移:

npx prisma migrate dev --name init
npx prisma generate

使用 Prisma 客户端:

const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

async function main() {
    await prisma.user.create({
        data: {
            firstName: 'John',
            lastName: 'Doe',
            age: 30
        }
    });
}

main()
    .catch(e => console.error(e))
    .finally(async () => await prisma.$disconnect());

自定义简单 ORM 实现

对于简单的需求,可以创建一个基本的 ORM 层:

class SimpleORM {
    constructor(connection) {
        this.connection = connection;
    }

    async create(table, data) {
        const keys = Object.keys(data);
        const values = keys.map(key => data[key]);
        const placeholders = keys.map(() => '?').join(',');
        const query = `INSERT INTO ${table} (${keys.join(',')}) VALUES (${placeholders})`;

        return new Promise((resolve, reject) => {
            this.connection.query(query, values, (err, results) => {
                if (err) return reject(err);
                resolve(results);
            });
        });
    }

    async find(table, conditions = {}) {
        const whereClause = Object.keys(conditions).length > 0 
            ? `WHERE ${Object.keys(conditions).map(key => `${key} = ?`).join(' AND ')}` 
            : '';
        const values = Object.values(conditions);
        const query = `SELECT * FROM ${table} ${whereClause}`;

        return new Promise((resolve, reject) => {
            this.connection.query(query, values, (err, results) => {
                if (err) return reject(err);
                resolve(results);
            });
        });
    }
}

// 使用示例
const mysql = require('mysql2');
const connection = mysql.createConnection({/* 配置 */});
const orm = new SimpleORM(connection);

orm.create('users', { name: 'John', age: 30 });
orm.find('users', { age: 30 });

标签: jsorm
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…