当前位置:首页 > 数码 > 流行的支持多数据库的ORM库 (主流支持和扩展支持的区别)

流行的支持多数据库的ORM库 (主流支持和扩展支持的区别)

admin3个月前 (04-27)数码20

Sequelize is a popular Node.js ORM (Object-Relational Mapping) library that makes it easy to interact with relational databases in Node.js applications. It supports a wide range of database systems, including PostgreSQL, MySQL, SQLite, and MSSQL, and provides a simple and intuitive API for performing CRUD (Create, Read, Update, Delete) operations on your database.

Creating a Model

In Sequelize, you first need to define a model to represent a table in your database. Models are created using the sequelize.define method, which takes two parameters: the model name and the model attributes. Model attributes define the column names, data types, and other options for the table.


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

const User = sequelize.define('User', {
  name: Sequelize.STRING,
  age: Sequelize.INTEGER,
  email: {
    type: Sequelize.STRING,
    allowNull: false
  }
});
  

Connecting to the Database

To connect to your database, you need to create a new Sequelize instance, passing in your database connection information (e.g., database name, username, password, host, etc.).


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

Synchronizing the Database

Once you have defined your model and connected to the database, you can use the sequelize.sync() method to synchronize your model with the database. This will automatically create or update the table structure in the database based on your model definition.


sequelize.sync();
  

Querying Data

The following methods are used to query data from your database:

  • findAll() : Retrieves all records from a table.
  • findOne() : Retrieves the first record that matches a given criteria.
  • findByPk() : Retrieves a record by its primary key.

These methods all accept an options parameter, which can be used to specify query conditions, sorting, limit the number of results, and more. Common options parameters include:

  • where : Specifies the conditions that the returned records must meet.
  • order : Specifies the order in which the results should be returned.
  • limit : Specifies the maximum number of results to return.

User.findAll({
  where: {
    age: {
      [Sequelize.Op.gt]: 30
    }
  }
}).then((users) => {
  console.log(users);
});
  

Creating Data

To create a new record in your database, use the Model.create(values, options) method. The values parameter is an object containing the data to be inserted, and the options parameter is optional and can be used to specify additional options, such as whether to return the created record in the response.


User.create({
  name: 'John Doe',
  age: 30,
  email: 'john@example.com'
}).then((user) => {
  console.log(user);
});
  

Updating Data

The following methods are used to update data in your database:

  • update() : Updates multiple records that match a given criteria.
  • save() : Updates a single record.

These methods both accept an options parameter, which can be used to specify update conditions, specify which attributes to update, and more.


User.findOne({
  where: {
    id: 1
  }
}).then((user) => {
  if (user) {
    user.name = 'Updated Name';
    user.age = 25;
    user.save().then((updatedUser) => {
      console.log(updatedUser);
    });
  }
});
  

Deleting Data

The following methods are used to delete data from your database:

  • destroy() : Deletes multiple records that match a given criteria.

These methods also accept an 主流支持和扩展支持的区别 options parameter, which can be used to specify delete conditions.


User.findOne({
  where: {
    id: 1
  }
}).then((user) => {
  if (user) {
    user.destroy().then(() => {
      console.log('User deleted successfully');
    });
  }
});
  

Conclusion

Sequelize is a powerful and easy-to-use ORM for Node.js that makes it easy to interact with relational databases. In this guide, we have covered the basics of using Sequelize, including how to create a model, connect to a database, query data, create data, update data, and delete data. For more information, please refer to the Sequelize documentation.


Android的Orm框架中有哪些可以创建多个数据库,创建多个数据库是否...

1、传统的建表方式其实为了方便我们对数据库表进行管理,Android本身就提供了一个帮助类:SQLiteOpenHelper。 这个类集创建和升级数据库于一身,并且自动管理了数据库版本,算是一个非常好用的工具。 那我们现在就来试试SQLiteOpenHelper的用法吧。 首先你要知道SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。 SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。 本篇文章只需要把注意力放在创建数据库这里就行了,升级数据库我们会在下一篇文章中去讨论。 新建一个MySQLiteHelper类并让它继承SQLiteOpenHelper,这样一个最基本的数据库帮助类的代码如下所示:[java] view plain copypublic class MySQLiteHelper extends SQLiteOpenHelper {public MySQLiteHelper(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}其中,当数据库创建的时候会调用onCreate()方法,在这里去执行建表操作就可以了。 比如说我们想新建一张news表,其中有title,content,publishdate,commentcount这几列,分别代表着新闻标题、新闻内容、发布时间和评论数,那么代码就可以这样写:[java] view plain copypublic class MySQLiteHelper extends SQLiteOpenHelper {public static final String CREATE_NEWS = create table news (+ id integer primary key autoincrement, + title text, + content text, + publishdate integer,+ commentcount integer);public MySQLiteHelper(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {(CREATE_NEWS);}...}可以看到,我们把建表语句定义成了一个常量,然后在onCreate()方法中去执行了这条建表语句,news表也就创建成功了。 这条建表语句虽然简单,但是里面还是包含了一些小的细节,我来解释一下。 首先,根据数据库的范式要求,任何一张表都应该是有主键的,所以这里我们添加了一个自增长的id列,并把它设为主键。 然后title列和content列都是字符串类型的,commentcount列是整型的,这都很好理解,但是publishdate列该怎么设计呢?由于SQLite中并不支持存储日期这种数据类型,因此我们需要将日期先转换成UTC时间(自1970年1月1号零点)的毫秒数,然后再存储到数据库中,因此publishdate列也应该是整型的。 现在,我们只需要获取到SQLiteDatabase的实例,数据库表就会自动创建了,如下所示:[java] view plain copySQLiteOpenHelper dbHelper = new MySQLiteHelper(this, , null, 1);SQLiteDatabase db = ();LitePal的基本用法虽说LitePal宣称是近乎零配置,但也只是“近乎”而已,它还是需要进行一些简单配置才可以使用的,那么我们第一步就先快速学习一下LitePal的配置方法。 快速配置1. 引入Jar包或源码首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本,选择你需要的下载即可。 下载好了jar包之后,把它复制到项目的libs目录中就算是引入成功了,如下图所示: 如果你不想用jar包的话,也可以把LitePal的源码下载下来,然后作为一个library库导入到Eclipse当中,再让我们的项目去引用这个library库就可以了。 2. 配置接着在项目的assets目录下面新建一个文件,并将以下代码拷贝进去:[java] view plain copy<?xml version=1.0 encoding=utf-8?><litepal><dbname value=demo ></dbname><version value=1 ></version><list></list></litepal>配置文件相当简单,<dbname>用于设定数据库的名字,<version>用于设定数据库的版本号,<list>用于设定所有的映射模型,我们稍后就会用到。 3. 配置LitePalApplication由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。 因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了,如下所示:[java] view plain copy<manifest><applicationandroid:name=...>...</application></manifest>当然,有些程序可能会有自己的Application,并在这里配置过了。 比如说有一个MyApplication,如下所示:[java] view plain copy<manifest><applicationandroid:name=...>...</application></manifest>没有关系,这时只需要修改一下MyApplication的继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,就可以使用一切都能正常工作了,代码如下所示:[java] view plain copypublic class MyApplication extends LitePalApplication {...}但是,有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。 这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,仍然是有解释方案的。 你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。 仅仅三步,我们就将所有的配置工作全部完成了,并且这是一件一本万利的事情,自此以后,你就可以开心地体验LitePal提供的各种便利了,就让我们从建表开始吧。 开始建表前面在介绍的时候已经说了,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。 但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。 而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。 那么接下来我们就看一看LitePal中是如何建表的吧。 根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。 新建一个News类,如下所示:[java] view plain copypackage ;public class News {}然后,表中的每一列其实就是对应了模型类中的一个字段,比如news表中有id、title、content、publishdate、commentcount这几个列,那么在News类中就也应该有这几个字段,代码如下所示:[java] view plaincopy[java] view plain copypublic class News {private int id;private String title;private String content;private Date publishDate;private int commentCount;// 自动生成get、set方法...}其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。 这里我要特别说明一下,LitePal的映射规则是非常轻量级的,不像一些其它的数据库框架,需要为每个模型类单独配置一个映射关系的XML,LitePal的所有映射都是自动完成的。 根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。 只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。 那么有的朋友可能会问了,既然是自动映射的话,如果News类中有一个字符串字段我并不想让它映射到数据库表中,这该怎么办呢?对此,LitePal同样采用了一种极为轻量的解决方案,只有声明成private修饰符的字段才会被映射到数据库表中,如果你有某一个字段不想映射的话,只需要将它改成public、protected或default修饰符就可以了。 现在模型类已经建好了,我们还差最后一步,就是将它配置到映射列表当中。 编辑assets目录下的文件,在<list>标签中加入News模型类的声明:[java] view plain copy<?xml version=1.0 encoding=utf-8?><litepal><dbname value=demo ></dbname><version value=1 ></version><list><mapping></mapping></list></litepal>注意这里一定要填入News类的完整类名。 OK,这样所有的工作就都已经完成了,现在只要你对数据库有任何的操作,news表就会被自动创建出来。 比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下所示:[java] view plain copySQLiteDatabase db = ();好了,到目前为止你已经算是对LitePal的用法有点入门了,那么本篇文章的内容就到这里,下篇文章当中我们将学习使用LitePal进行升级表的操作。 感兴趣的朋友请继续阅读 Android数据库高手秘籍(三)——使用LitePal升级表 。

ORM型的数据库有哪些

现在常用的这些数据库都是ORM的,ORACLE SQLSERVER DB2 ACCESS MYSQL……

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 数据库

“流行的支持多数据库的ORM库 (主流支持和扩展支持的区别)” 的相关文章

树之外的其他探索-数据库索引的类型-B

树之外的其他探索-数据库索引的类型-B

数据存储在磁盘或内存中时,我们需要高效的数据结构来访问和获取数据。本文将介绍 8 种常用的数据库索引结构,并讨论它们的优点和缺点。 B 树 B 树是一种流行的基于磁盘的索引数据结构,...

连接表时出现重复数据的方法-INNER-JOIN-数据库中避免 (表连接类型)

连接表时出现重复数据的方法-INNER-JOIN-数据库中避免 (表连接类型)

在进行 SQL 查询时,我们经常需要联合多个表来获取更全面的数据。在使用 INNER JOIN 连接表时,有时会遇到重复数据的问题,这可能会导致查询结果不准确或者性能下降。 使用 DISTI...

深入了解其核心组件和工作原理-聊聊分布式数据库TDSQL的技术架构 (深入了解其核心经验)

深入了解其核心组件和工作原理-聊聊分布式数据库TDSQL的技术架构 (深入了解其核心经验)

近几年来,随着互联网和云计算的飞速发展,分布式关系型数据库逐渐成为企业核心业务系统的重要支撑。本文将以腾讯云 TDSQL 数据库技术架构为例,深入解析分布式关系型数据库的架构和实现原理,帮助读者深...

先操作数据库还是先操作缓存-并发环境下的数据操作顺序 (先操作数据库还是先删缓存)

先操作数据库还是先操作缓存-并发环境下的数据操作顺序 (先操作数据库还是先删缓存)

问题提出 在分布式系统中,缓存和数据库同时存在时,如果有写操作的时候,先操作数据库还是先操作缓存呢? 先思考一下,可能会存在哪些问题,再往下看。 缓存维护方案 方案一:先操...

年未来数据库-2024-值得关注的八个趋向 (未来数据库发展方向)

年未来数据库-2024-值得关注的八个趋向 (未来数据库发展方向)

相关型数据库治理系统在数据库技术畛域占据主导位置曾经多年了。当SQL在1970年代初次出现时,相关型数据库治理系统的经常使用和受欢迎水平迅速优化。很快,成为了大少数公司和团队首选的数据库。...

具有高吞吐量-基于Apache-Scylla-Cassandra的分布式NoSQL数据库-低延迟和可扩展性 (具有高吞吐量的企业)

具有高吞吐量-基于Apache-Scylla-Cassandra的分布式NoSQL数据库-低延迟和可扩展性 (具有高吞吐量的企业)

概述 Scylla 是一款高性能、可伸缩的分布式 NoSQL 数据库,基于 Cassandra 项目开发。它以出色的性能和可伸缩性著称,能够处理大规模的数据工作负载。 设计目标 Scyll...

DML-DCL和-TCL-的深化了解-全面把握数据库操作言语-DDL (大米冷冻储存好吗)

DML-DCL和-TCL-的深化了解-全面把握数据库操作言语-DDL (大米冷冻储存好吗)

本篇文章以详细的SQL语句解说了数据库SQL言语四大分类(数据定义言语DDL,数据操作言语DML,数据查问言语DQL,数据控制言语DCL),同时也引见了事务控制言语TCL。 最近与开发和运维讨论数...

嵌入和矢量数据库实操指南 (嵌入和矢量数据的区别)

嵌入和矢量数据库实操指南 (嵌入和矢量数据的区别)

引言 随着生成式人工智能 (AI) 的兴起,处理复杂高维数据已成为一项至关重要的任务。矢量数据库的出现提供了应对这一挑战的突破性解决方案。 矢量数据库的定义 矢量数据库是专门设...