首页 > 其他分享 >Util应用框架Web Api开发快速入门

Util应用框架Web Api开发快速入门

时间:2023-10-19 15:47:05浏览次数:33  
标签:comment Web 代码生成 Demo 数据库 Util Api Student null

本文是使用Util应用框架开发 Web Api 项目快速入门教程.

前面已经详细介绍了环境搭建,如果你还未准备好,请参考前文.

开发流程概述

  1. 创建代码生成专用数据库.

    Util应用框架需要专门用来生成代码的数据库,该数据库仅用于代码生成.

    约定: 代码生成数据库应以 .Generator 结尾.

    当然你也可以随意起名,但使用约定名称能更清晰的说明数据库用途.

  2. 使用配套代码生成器生成代码.

    Util配套代码生成器连接到代码生成数据库,读取元数据,创建项目基架.

快速入门示例项目概述

  • 项目名称: Demo

  • 代码生成数据库名称: Demo.Generator

创建示例数据库

本文创建快速入门示例项目的代码生成数据库.

共提供三种数据库建库脚本,你只需选择一种即可.

创建 Sql Server 代码生成数据库

如果你使用Sql Server数据库,请按下面步骤创建Sql Server示例数据库和示例表.

创建 Demo.Generator 数据库

打开 SQL Server Management Studio ,新建数据库 Demo.Generator .

点击 确定 按钮,创建数据库.

添加示例表 Student

选中 Demo.Generator 数据库,点击 新建查询 按钮.

复制下面Sql语句,创建 Student 示例表.

Sql建库脚本通常使用 PowerDesigner 等数据建模工具生成.

CREATE TABLE [dbo].[Student](
	[StudentId] [uniqueidentifier] NOT NULL,
	[Name] [nvarchar](200) NOT NULL,
	[Gender] [int] NULL,
	[Age] [int] NULL,
	[Birthday] [datetime] NULL,
	[IdCard] [nvarchar](50) NULL,
	[Enabled] [bit] NOT NULL,
	[CreationTime] [datetime] NULL,
	[CreatorId] [uniqueidentifier] NULL,
	[LastModificationTime] [datetime] NULL,
	[LastModifierId] [uniqueidentifier] NULL,
	[IsDeleted] [bit] NOT NULL,
	[Version] [timestamp] NULL,
	[ExtraProperties] [nvarchar](max) NULL,
 CONSTRAINT [PK_STUDENT] PRIMARY KEY CLUSTERED 
(
	[StudentId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'学生标识' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'StudentId'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'Name'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'Gender'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'Age'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'出生日期' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'Birthday'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'身份证' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'IdCard'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'启用' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'Enabled'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'CreationTime'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建人标识' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'CreatorId'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'LastModificationTime'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改人标识' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'LastModifierId'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否删除' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'IsDeleted'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'版本号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'Version'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'扩展' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student', @level2type=N'COLUMN',@level2name=N'ExtraProperties'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'学生' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Student'
GO

点击 执行 按钮, Student 示例表创建完成.

创建 PostgreSql 代码生成数据库

如果你使用 PostgreSql 数据库,请按下面步骤创建 PostgreSql 示例数据库和示例表.

创建 Demo.Generator 数据库

打开 PostgreSql 客户端,新建数据库 Demo.Generator .

create database "Demo.Generator"
    with owner admin;

添加示例表 Student

运行下面Sql之前先切换到 Demo.Generator 数据库.

create table "Student"
(
    "StudentId"            uuid         not null
        constraint "PK_Student"
            primary key,
    "Name"                 varchar(200) not null,
    "Gender"               integer,
    "Age"                  integer,
    "Birthday"             timestamp with time zone,
    "IdCard"               varchar(50),
    "Enabled"              boolean      not null,
    "CreationTime"         timestamp with time zone,
    "CreatorId"            uuid,
    "LastModificationTime" timestamp with time zone,
    "LastModifierId"       uuid,
    "IsDeleted"            boolean      not null,
    "ExtraProperties"      text,
    "Version"              bytea
);

comment on table "Student" is '学生';

comment on column "Student"."StudentId" is '学生标识';

comment on column "Student"."Name" is '姓名';

comment on column "Student"."Gender" is '性别';

comment on column "Student"."Age" is '年龄';

comment on column "Student"."Birthday" is '出生日期';

comment on column "Student"."IdCard" is '身份证';

comment on column "Student"."Enabled" is '启用';

comment on column "Student"."CreationTime" is '创建时间';

comment on column "Student"."CreatorId" is '创建人标识';

comment on column "Student"."LastModificationTime" is '最后修改时间';

comment on column "Student"."LastModifierId" is '最后修改人标识';

comment on column "Student"."IsDeleted" is '是否删除';

comment on column "Student"."ExtraProperties" is '扩展属性';

comment on column "Student"."Version" is '版本号';

alter table "Student"
    owner to admin;

创建 MySql 代码生成数据库

如果你使用 MySql 数据库,请按下面步骤创建 MySql 示例数据库和示例表.

创建 Demo.Generator 数据库

打开 MySql 客户端,新建数据库 Demo.Generator .

create database `Demo.Generator`

添加示例表 Student

运行下面Sql之前先切换到 Demo.Generator 数据库.

create table Student
(
    StudentId            char(36) charset ascii not null comment '学生标识'
        primary key,
    Name                 varchar(200)           not null comment '姓名',
    Gender               int                    null comment '性别',
    Age                  int                    null comment '年龄',
    Birthday             datetime(6)            null comment '出生日期',
    IdCard               varchar(50)            null comment '身份证',
    Enabled              tinyint(1)             not null comment '启用',
    CreationTime         datetime(6)            null comment '创建时间',
    CreatorId            char(36) charset ascii null comment '创建人标识',
    LastModificationTime datetime(6)            null comment '最后修改时间',
    LastModifierId       char(36) charset ascii null comment '最后修改人标识',
    IsDeleted            tinyint(1)             not null comment '是否删除',
    ExtraProperties      longtext               null comment '扩展属性',
    Version              longblob               null comment '版本号'
)
    comment '学生';

Web Api开发入门

准备

下载Util应用框架配套代码生成项目,如果已下载,请拉取最新代码进行更新.

生成项目基架

打开Util代码生成项目解决方案 Util.Generator.sln .

将项目 Util.Generators.Console 设置为启动项目.

Util.Generators.Console是一个控制台程序,只需修改几个简单配置,即可开始生成代码.

打开 appsettings.json 配置文件.

使用 Sql Server 生成代码

本小节使用 Sql Server 代码生成数据库.

appsettings.json 配置文件默认使用 Sql Server 数据库,连接字符串已经配置,如果与你的数据库设置不同,请修改.

按 F5 键启动控制台.

生成完成.

生成位置由 OutputPath 配置项 D:\Output 指定.

打开D盘,进入Output目录,可以看到生成的 Demo 项目.

使用 PostgreSql 生成代码

本小节使用 PostgreSql 代码生成数据库.

修改 appsettings.json 配置文件.

DbType : PgSql , 这个配置项指定使用的代码生成数据库类型.

TargetDbType: PgSql, 这个配置项指定项目使用的数据库类型.

ConnectionString: Server=127.0.0.1;User Id=admin;Password=admin;Database=Demo.Generator ,指定连接字符串

修改 appsettings.json 配置文件后,需要重新生成项目,否则可能不生效.

重新生成 Util.Generators.Console 项目, 按 F5 键启动控制台.

生成完成.

生成位置由 OutputPath 配置项 D:\Output 指定.

打开D盘,进入Output目录,可以看到生成的 Demo 项目.

使用 MySql 生成代码

本小节使用 MySql 代码生成数据库.

修改 appsettings.json 配置文件.

DbType : MySql , 这个配置项指定使用的代码生成数据库类型.

TargetDbType: MySql, 这个配置项指定项目使用的数据库类型.

ConnectionString: Server=127.0.0.1;User Id=root;Password=admin;Database=Demo.Generator;Port=3306;Charset=utf8 ,指定连接字符串

修改 appsettings.json 配置文件后,需要重新生成项目,否则可能不生效.

重新生成 Util.Generators.Console 项目, 按 F5 键启动控制台.

生成完成.

生成位置由 OutputPath 配置项 D:\Output 指定.

打开D盘,进入Output目录,可以看到生成的 Demo 项目.

运行示例项目

打开示例项目解决方案 Demo.sln.

解决方案分层结构基于领域驱动设计(DDD)分层架构.

DDD分层架构包含大量构造块,对于大部分业务模块,手工编写这些构造块是枯燥而低效的,使用代码生成可以简化基础管道代码的编写.

如果你对DDD一无所知,可以把它们当成三层架构使用即可.

代码生成以机械的单表方式生成CRUD操作,如果你的业务较为复杂,在生成后立即修改它们.

你不应该依赖代码生成器,通常只在项目初期创建项目基架,后续变更仅生成代码片断并手工合并到你的项目,而不是完全覆盖.

查看代码生成质量

下面来看看生成的代码质量如何.

打开 Student 实体类.

每个实体,代码生成模板会创建两个文件,其中 .Base 结尾的文件用于放置属性,另一个放置业务方法.

对于简单的实体类,可能没有业务方法,你可以合并成一个文件.

可以看到生成的代码十分整洁,并已从必要的基类继承,还包含了注释和基础验证.

运行Web Api项目

打开 Demo.Api 项目下的 appsettings.Development 配置文件.

如果你的代码生成数据库以 .Generator结尾,会帮你创建默认的开发数据库连接字符串.

对于本示例项目,开发数据库名称默认为 Demo .

如果生成的连接字符串为空值,或需要修改参数,请自行配置连接字符串.

DefaultConnection 是Web Api项目的连接字符串, TestConnection 用于Web Api项目的集成测试.

按 F5 键 启动 Demo.Api 项目.

Util 使用 Entity Framework Core 作为主要的数据访问框架.

Web Api项目已经配置了数据库迁移,不必手工输入命令行,启动时会自动运行命令.

可以看到 Demo.Data.SqlServer 项目已经创建 Migrations 迁移目录.

数据库也已经创建 Demo 数据库.

如果使用其它数据库生成代码,则与相应的数据库保持一致,比如 Demo.Data.MySql .

数据迁移完成,将打开 Swagger 页面.

下面我们使用 Swagger 调用 Web Api 创建一个学生.

找到 POST /api/Student, 点击 Try it out 按钮.

输入下列Json数据, 点击 Execute 按钮.

{
  "name": "张三",
  "gender": 0,
  "age": 18,
  "birthday": "2023-10-19T06:53:55.469Z",
  "idCard": "123",
  "enabled": true
}

Swagger返回操作成功消息.

查询数据库 Student 表,可以看到已经插入成功.

运行其它数据库生成代码的操作类似.

后记

Web Api已经运行起来,但只能通过Swagger操作,下一篇我们将把基于Ng Zorro组件库的Angular UI运行起来.

标签:comment,Web,代码生成,Demo,数据库,Util,Api,Student,null
From: https://www.cnblogs.com/xiadao521/p/17774772.html

相关文章

  • 关于 npoi 的 DateUtil.IsCellDateFormatted(cell) 为true,取cell.DateCellValue却报
    NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型所以当 DateUtil.IsCellDateFormatted为true时,理论是应该可以取到  cell.DateCellValue但实际上,cell.DateCellValue可能会报异常,而取 cell.NumericCellValue却是正常的,HSSFWorkbook是excel2007以前......
  • 快速展示原型之Minimal API开发
    MinimalAPI官网地址:https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/minimal-apis/security?view=aspnetcore-7.0MinimalAPI背景介绍MinimalAPIs是指在ASP.NETCore中引入的一种轻量级的API开发模式。它的产生背景是为了简化API的创建和开发流程,减少样......
  • Kubernetes:kube-apiserver 之 scheme(二)
    接Kubernetes:kube-apiserver之scheme(一)。2.2资源convert上篇说到资源版本之间通过内部版本__internal进行资源转换。这里进一步扩展介绍资源转换内容,以加深理解。同样以例子开始,通过kubectl将apps/v1beta1/Deployment转换为apps/v1/Deployment。apiVersion:a......
  • 爱尔兰中央银行对Investing Capitals发出警告!
    上周五,爱尔兰中央银行(CBI)发布了一则警告,提醒公众小心一家名为“InvestingCapitals”的欺诈实体。该实体运营了一个网站,并通过该网站声称自己是一家投资公司,却并没有得到应有的授权。爱尔兰中央银行负责执行该国相关金融法律规定,维护金融市场秩序。CBI表示,未经授权的公司若在爱尔......
  • 攻防世界 Web php_rce
    打开页面发现使用了ThinkPHP框架参考https://blog.csdn.net/qq_30889301/article/details/130581008博客进行解题ThinkPHP是一个基于PHP语言的开源Web应用框架,它提供了一系列的工具和组件,可以帮助开发人员更快速、更高效地构建Web应用程序。ThinkPHP框架具有简单易用、高效稳......
  • elasticsearch 8.7.0的Java API详解教程(一)
    最近作者做一个es的搜索,之前采用的是7.12.1,本来接口都已经基本上写好了,后面es要升级到8.7.0,一升级就连接不上es8.7.0了,后面才发现原来es8是默认采用了HTTPS协议,需要配置认证证书,这个问题搞了好久好久,最后终于搞成功了,在此写一篇博客记录一下。一、pom文件<?xmlversion="1.0"encod......
  • Linux 环境下(Ubuntu)webbench的安装问题解决与使用
    webbench最多可以模拟3万个并发连接去测试网站的负载能力。并发能力比较高,可以测试https及动态静态页面。适合中小型网站测试承受能力。原理:父进程fork若干个子进程,每个子进程在用户要求时间或默认的时间内对目标web循环发出实际访问请求,父子进程通过管道进行通信,子进程通过......
  • 10.18(随机出题Web页面)
    今天完成了javaweb的出题系统,比较简陋jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>添加信息</title>&l......
  • javaweb第10章源码
    javaweb第10章源码下载链接:https://wwpv.lanzoue.com/iDhBE1c5hcxg文件结构CHAPTER10│.classpath│.project│chapter10.iml│├─.idea│encodings.xml│misc.xml│modules.xml│workspace.xml│├─.settings│.jsdtscope......
  • vue +asp.net core webapi跨域
              vue代码:  login.vue  <template>  <divclass="login-wrap">      <el-buttontype="primary"style="width:100%;"@click="doSubmit()">提交</el-button>      ......