第一版:使用 Hexo 和 Github pages 优点:重新部署只要花 5 分钟,内容管理在本地 纯静态、免费; 缺点:依赖 Github,国内访问困难; 第二版:React + Antd + Mysql...而文章内容写完之后是通常不变的,所以可以先将页面静态存储在服务器上,这样就可以大大减小数据库压力。 getStaticProps 在构建时请求数据。...框架访问数据库,往往会需要一个 ORM 框架来帮我们管理数据层代码,而在 Node.js 社区中,sequelize、TypeORM 等框架都被广泛应用,而 prisma 却是一个新秀。...Prisma 支持 Mysql、Postgresql 和 Sqlite, 访问官网我们可以很容易的上手,也可以快速的从老项目接入 虽然 Prisma 和 TypeORM 解决了类似的问题,但它们的工作方式却大相径庭...codemiror 和 remark 自己写的组件 ,这一版发现掘金的 Markdown 编辑比较好用,就直接使用了bytemd, 底层都是使用了 remark 和 rehype,支持任何框架,并且拥有丰富的插件
第一版:使用 Hexo 和 Github pages 优点:重新部署只要花5分钟,内容管理在本地 纯静态、免费; 缺点:依赖Github,国内访问困难; 第二版:React + Antd...{js,ts,jsx,tsx}']打包时只会提取使用到的样式,让应用css最小化。 4、之前写了《使用 CSS variables 和Tailwind css实现主题换肤》也运用到了我的博客中。...而文章内容写完之后是通常不变的,所以可以先将页面静态存储在服务器上,这样就可以大大减小数据库压力。 getStaticProps 在构建时请求数据。...Prisma 支持 Mysql、Postgresql 和 Sqlite, 访问官网我们可以很容易的上手,也可以快速的从老项目接入 虽然 Prisma 和 TypeORM 解决了类似的问题,但它们的工作方式却大相径庭...codemiror 和 remark 自己写的组件 ,这一版发现掘金的 Markdown 编辑比较好用,就直接使用了bytemd, 底层都是使用了 remark 和 rehype,支持任何框架,并且拥有丰富的插件
我们将选择 TypeScript[4] 作为开发语言,数据库选用 MySQL,并使用 TypeORM[5] 作为数据库桥接层。...在接下来的部分,我们将通过社区的优秀组件来解决两个关键问题:路由和数据库,并演示如何结合 Koa 框架进行使用。 实现路由配置 由于 Koa 只是一个中间件框架,所以路由的实现需要独立的 npm 包。...数据库的准备工作 首先,请安装和配置好 MySQL 数据库,可以通过两种方式: 官网下载安装包,这里是下载地址[13] 使用 MySQL Docker 镜像 在确保 MySQL 实例运行之后,我们打开终端...这里我们使用了三个装饰器: Entity 用于装饰整个类,使其变成一个数据库模型 Column 用于装饰类的某个属性,使其对应于数据库表中的一列,可提供一系列选项参数,例如我们给 password 设置了...select: false ,使得这个字段在查询时默认不被选中 PrimaryGeneratedColumn 则是装饰主列,它的值将自动生成 ❝「提示」 关于 TypeORM 所有的装饰器定义及其详细使用
当 Node.js Server 项目越来越大时,将数据和数据库整理规范是很难的,所以从一开始就有一个好的开发和项目设置,对你的开发项目的成功至关重要。...要在本地实现数据持久性,我们现在需要一个数据库服务器和一个要连接的数据库。一种方法是在本地机器上设置一个 PostgreSQL 数据库服务器,但这样做不是很好。...将作为单例服务运行,在启动时加载配置值并将它们提供给其他模块。...这样您将能够在部署 / 启动服务器时尽早地检测到这一点,而不是在消费者使用您的 api 时才发现问题。...因此,您在代码中更改了实体类, typeORM 会为你自动同步字段, 但是,一旦您的数据库中有实际数据,后期打算修改字段类型或其他操作时,TypeORM 将通过删除并重新创建数据库表来更改数据库,这意味着你极有可能丢失了表内的数据
dataSource: Mybatis框架提供了三个数据源类型:UNPOOLED、POOLED和JNDI。 UNPOOLED: 配置此数据源类型后,在每次被请求时会打开和关闭连接。...poolTimeToWait 如果获取连接花费的时间较长,它会给连接池打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直处于无提示的失败),默认值:20000毫秒,即20秒。...可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值:0(表示所有连接每一时刻都被侦测,只有poolPingEnabled的属性值为true时适用) JNDI: 此数据源可以在EJB或应用服务器等容器中使用...fetchSize 这是一个给驱动的建议值,尝试让驱动程序每次批量返回的结果行数等于这个设置值。 默认值为未设置(unset)(依赖驱动)。...select:指定引入嵌套查询的子SQL语句,该属性用于关联映射汇总的嵌套查询。 fetchType:指定在关联查询时是否启用延迟加载。(fetchType有lazy和eager两个属性值。
我们先来将TypeORM相关依赖添加到项目,依赖包括三部分,分别是NestJs支持TypeORM的依赖包@nestjs/typeorm,TypeORM本身typeorm,数据库支持MySQL。...host:数据库连接host port:数据库连接port username:数据库管理员名称 password:数据库管理员密码 database:数据库名称 synchronize:指示是否在每次应用程序启动时自动创建数据库架构...logging:日志 entities:要加载并用于此连接的实体。接受要加载的实体类和目录路,值为一个数组。...,使用方式@Column('varchar', { length: 500, unique: true }) PrimaryGeneratedColumn:主键装饰器,将一个字段声明为主键,对应数据库表字段的主键...Field:声明一个属性,这个属性属于ObjectType在进行API查询的时候将会用于解释一个字段,它对类的一个属性进行装饰,使用方式:@Field。
这意味着每次开发新应用都得重新来一遍 —— 这就跟前端平时切页面一样,重复劳动多了之后就内心还是比较烦的,甚至有抗拒心理。...数据库 ORM 首先我们需要解决数据库相关的技术选项,这里说的技术选型是指 ORM 相关的技术选型(数据库固定使用 MySQL),选型的基本原则是能力强大、用法简单。...其次,在 Midway 的配置文件中指定数据库连接配置: // src/config/config.default.ts export const typeorm = { type: 'mysql...3.2 数据库操作 数据库连接上之后,就可以直接使用 ORM 框架进行数据库操作。...不同于现有的所有其他 JavaScript ORM 框架,TypeORM 支持 Active Record 和 Data Mapper 模式(在我这次写的项目中,使用的是 Active Record
在底层,Nest 构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可以通过配置从而使用 Fastify !...监听的端口号可以自定义, 如果3000端口被其他项目使用,可以更改为其他的端口号 因为我的3000端口有别的项目在用, 所以修改成:9080,重新启动项目 我们打开浏览器访问http://localhost...typeORM操作数据库, 首先我们要安装以下依赖包: npm install @nestjs/typeorm typeorm mysql2 -S 官方提供了两种连接数据库的方法, 这里分别介绍一下:...TypeORM提供了多种连接方式,这里再介绍一下使用ormconfig.json方式 方法2 在根目录下创建一个ormconfig.json文件(与src同级), 而不是将配置对象传递给forRoot(...entities: [PostsEntity, UserEntity], }),] 就是用到哪些实体, 就逐一的在连接数据库时去导入,缺点就是麻烦,很容易忘记~ 方式2:自动加载 TypeOrmModule.forRoot
在底层,Nest 构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可以通过配置从而使用 Fastify !...监听的端口号可以自定义, 如果3000端口被其他项目使用,可以更改为其他的端口号 因为我的3000端口有别的项目在用, 所以修改成:9080,重新启动项目 我们打开浏览器访问http://localhost...typeORM操作数据库, 首先我们要安装以下依赖包: npm install @nestjs/typeorm typeorm mysql2 -S 复制代码 官方提供了两种连接数据库的方法, 这里分别介绍一下...TypeORM提供了多种连接方式,这里再介绍一下使用ormconfig.json方式 方法2 在根目录下创建一个ormconfig.json文件(与src同级), 而不是将配置对象传递给forRoot(...entities: [PostsEntity, UserEntity], }),] 复制代码 就是用到哪些实体, 就逐一的在连接数据库时去导入,缺点就是麻烦,很容易忘记~ 方式2:自动加载 TypeOrmModule.forRoot
一、框架基本介绍 1、概念 支持普通SQL查询、存储过程和高级映射,简化和实现了Java 数据持久化层的的开源框架,主要流行的原因在于他的简单性和易使用性。...JNDI:MyBatis 从在应用服务器向配置好的 JNDI 数据源 dataSource 获取数据库连接。...3、typeAliases 如果没有设置typeAliases的类型别名,对于resultType和parameterType属性值,我们需要使用JavaBean的完全限定名。...所以当 MyBatis 发现属性的类型属于上述类型,他会使用对应的类型处理器将值设置到PreparedStatement 中,同样地,当从 SQL 结果集构建 JavaBean 时,也有类似的过程。...1、INSERT id: 对应接口的方法名 parameterType: 输入参数 useGeneratedKeys="true" :让数据库生成自增长的列 keyProperty="属性名": 将生成的值设置到其中一个输入对象属性内
我们在TypeORM中如何实现user表和info之间这种对一对的关系呢?...@JoinColumn 必须在且只在关系的一侧的外键上, 你设置@JoinColumn的哪一方,哪一方的表将包含一个relation id和目标实体表的外键。记住,不能同时在二者entity中。...TypeORM在处理“一对多”的关系时, 将一的主键作为多的外键,即@ManyToOne装饰的属性;这样建表时有最少的数据表操作代价,避免数据冗余,提高效率, 上面的实体关系会生成以下表: |...,publishTime是文章状态为发布publish时才会添加相应的值, 这些字段都是在新增/更新文章时单独处理的。...首先表明这个实现只是一个过渡方案,虽然实现简单, 但是有几个问题: 当有大量的人同时阅读这个内容的时候,可能涉及到加锁的问题 当流量较大时,同时读取和修改同一条数据, 对数据库压力来说压力很大 同一个人不停的属性页面
在 mysql 里创建压缩码和长链接的对应关系的表,用 mysql 的自增 id 然后进行 base62 之后作为压缩码。...安装用到的包: npm install --save @nestjs/typeorm typeorm mysql2 mysql2 是数据库驱动,typeorm 是我们用的 orm 框架,而 @nestjs...在 AppModule 里引入 TypeORM,指定数据库连接配置: 然后创建个 entity: src/entities/UniqueCode.ts import { Column, Entity,...@Column({ comment: '状态, 0 未使用、1 已使用' }) status: number; } 在 AppModule 引入: 保存之后...6 的字符串,查下数据库,如果没查到,就插入数据,否则重新生成。
synchronize: true 导致数据丢失 synchronize 表示数据库的结构是否和代码保持同步,官方提及到请不要在生产环境中使用,但在开发阶段这也并不是一个很好的做法。...: string } 当你将 name 更改为 title 时,会发现原有的 name 下的数据全都丢失了!...因此针对数据库更新的操作最正确的做法是使用迁移(migrate)。 接入成本 在 Nest 项目中,Prisma 的接入成本远比 TypeORM 来的容易许多。...在应用程序代码中,您可以使用 Prisma Client 以类型安全的方式读取和写入数据库中的数据,而无需管理复杂模型实例的开销。...总结 在写这篇文章时,我也是彻底的将 Nestjs 项目中由 TypeORM 迁移到 Prisma ,这期间给我最大的变化就是在极少的代码量却又能实现强大的功能。
(类型处理器) MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。...如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。...MyBatis 会加载带有匹配当前数据库 databaseId 属性和所有不带 databaseId 属性的语句。...默认值为未设置(unset)(依赖数据库驱动) fetchSize 这是一个给驱动的建议值,尝试让驱动程序每次批量返回的结果行数等于这个设置值。默认值为未设置(unset)(依赖驱动)。...这就使得在获取嵌套结果集的时候不至于内存不够用。默认值:false。 resultSets 这个设置仅适用于多结果集的情况。
33TYyg"/> 其中的属性就可以在整个配置文件中使用来替换需要动态配置的属性值。...,那么 MyBatis 将按照下面的顺序来加载: 在 properties 元素体内指定的属性首先被读取。...有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”): UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。...,如果获取连接花费的相当长的时间,它会给连接池打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直安静的失败),默认值:20000 毫秒(即 20 秒)。...这可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。
33TYyg"/> 设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值 ...有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"): UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。...POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。...,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。...可以被设置为和数据库连接超时时间一样,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。
模型是数据交互的接口,是表示和操作数据库的方法和方式 Django 的 ORM框架 ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象对数据库进行操作...'des'来预订没有默认;我们不能这样做(数据库需要填充现有行) 请选择修复: 1)现在提供一次性默认值(将对所有现有行设置此列的空值) 2)退出,让我在models.py中添加一个默认值 选择一个选项...: 错误原因 当对模型类新添加一个字段时可出现该错误 原理是 添加新字段后,数据库不知道原来已有数据对于新建字段该如何赋值,所以新增字段时,务必要添加 default 默认值。...处理方法: 选择 1 则会进入到 shell 中,手动输入一个默认值 退出当前生成迁移文件的过程,自己去修改 models.py, 新增加一个 default=XXX 的缺省值 (推荐使用) 数据库的迁移文件混乱的解决办法...,属性=值) obj.属性=值 obj.save() Django shell 的使用 在Django提供了一个交互式的操作项目叫 它能够在交互模式用项目工程的代码执行相应的操作 利用 Django
3.模板 MVT中的T,template 3.0扩展 问:模板渲染的过程是在服务器端完成的,还是在客户端完成的? 答:服务器。...default,默认值,如果变量不存在时则返回默认值。...4.数据库 ORM框架: 作用:将模型类和数据表进行对应,通过面向对象的方式进行数据库的操作。 flask中SQLALchemy Django中自带ORM框架,可以直接进行使用。...选项 选项 说明 null 如果为True,表示允许为空,默认值是False db_column 字段的名称,如果未指定,则使用属性的名称。...AutoField的选项使用 unique 如果为True, 这个字段在表中必须有唯一值,默认值是False 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理
领取专属 10元无门槛券
手把手带您无忧上云