当前位置:首页 > 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 及相关依赖:

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:

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 层:

js实现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实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现抽奖

js实现抽奖

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