midwayjs从零开始创建项目,连接mikro-orm框架(必须有java的springboot基础)

前言:

        我一直都是用java的springboot开发项目,然后进来新公司之后,公司的后端是用node.js,然后框架用的是 midwayjs ,然后网上的资料比较少,在此特地记录一波

文档:

1.官方文档:介绍 | Midway
 

2.controller的参数传递以接参:路由和控制器 | Midway
 

1.创建项目

先创建一个空文件夹,然后在文件夹里面执行cmd命令:
 

npm init midway@latest -y

然后一直按回车,就可以得到这个以下项目:

2.项目情况:



配置端口号,以及全局路由前缀:




然后运行:npm run dev 来执行项目

3.连接数据库(MikroORM

1.在这里我使用的是 MikroORM 来连接数据库的


首先在终端执行以下命令,下载MikroORM和mysql的依赖:

npm i -s @mikro-orm/core @mikro-orm/mysql
npm i @midwayjs/mikro@3 @mikro-orm/core --save

执行完毕之后,在  package.json 文件里面的  dependencies 值就会多出这两个值:



然后在 configuration.ts 这个文件里面,导入 MikroORM:



导入代码:

import * as mikro from '@midwayjs/mikro';


然后在  config.default.ts 文件里面添加mikro的数据源:



代码:

  mikro: {dataSource: {default: {dbName:'nk_product_pro', // 数据库名type: 'mysql',host: 'localhost', // 这里是连接的ip地址port: 3306,// 端口号username: 'root', // 账号password: '***', // 密码// 配置实体模型entities: [userNameModel],// // 或者扫描形式// entities: [//   '**/entity/*.entity{.ts,.js}'// ]},}}

其中的 userNameModel 



userNameController:

import { Inject, Controller, Get } from '@midwayjs/core';
import {userNameService} from "./userService";@Controller('/userName')
export class userNameController {@Inject()userNameService: userNameService;@Get('/userName')async userName() {console.log('进入方法');await this.userNameService.getUserName();return { success: true, message: 'OK', data: '进入userName方法' };}
}

 userModel.ts:

import {Entity, PrimaryKey, Property} from "@mikro-orm/core";@Entity({ tableName: 'test_user', schema: 'nk_product_pro' })
// 这里的 tableName 指定的是表名  schema: 是数据库名
export class userNameModel {@PrimaryKey()@Property()id: number;@Property()title:string;}

userService.ts:

import {Provide} from "@midwayjs/core";
import {InjectRepository} from "@midwayjs/mikro";
import {EntityRepository} from "@mikro-orm/mysql";
import {userNameModel} from "./userModel";@Provide()
export class userNameService{@InjectRepository(userNameModel)// 这个就类似java的 mapper private readonly chatRoomRepo: EntityRepository<userNameModel>async getUserName(){console.log(await this.chatRoomRepo.findAll());console.log('获取成功');}}


这个是比较常见的增删改查方式:

import {Provide} from "@midwayjs/core";import {InjectEntityManager, InjectRepository} from "@midwayjs/mikro";
import {userNameModel} from "./userModel";
import { EntityManager, EntityRepository } from '@mikro-orm/mysql'; // 需要使用数据库驱动对应的类来执行操作// @ts-ignore
@Provide()
export class userNameService{@InjectRepository(userNameModel)// 这个就类似java的 mapperprivate readonly chatRoomRepo: EntityRepository<userNameModel>@InjectEntityManager()em: EntityManager;async getUserName(){console.log(await this.chatRoomRepo.findAll());// 查询// await this.chatRoomRepo.find(// {// id: 1, 这个是查询id字段的值 等于 1// paixu2: 1,// title: { $like: '%' }, // 模糊查询// paixu: { $gt: 1 }, // 大于 1// id: { $in: [1, 2] }, // 数据库的in查询// },// {//   orderBy: { paixu: QueryOrder.desc, paixu2: QueryOrder.desc }, // 按照某个字段进行排序,例如:先对 paixu 这字段进行降序,在 paixu 这个值一致的情况下,再进行降序//   limit: 1, //获取多少条数据// },// );// 插入// const model = new userNameModel();//// model.title = '哈哈,你好呀';// // 单条插入// this.chatRoomRepo.nativeInsert(model);// 修改// this.chatRoomRepo.nativeUpdate({//   id: 1// },{//   title:'你好呀'// })// // 上面的修改sql会变成:update "nk_product_pro"."test_user" set "title" = '你好呀' where "id" = 1// // 删除// this.chatRoomRepo.nativeDelete({//   id : 1,//   title: '你好呀'// })// // 以上的删除语句:delete from "nk_product_pro"."test_user" where "id" = 1 and "title" = '你好呀'console.log(this.em)// 这个是直接使用原生sql的方式,在遇到比较复杂,或者进行连表查询的时候,推荐使用这种方式const ctionEm = this.em.getConnection();const ret = await ctionEm.execute("select * from nk_product_pro.test_user");console.log(ret)}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264030.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端 Web Workers 简介

简介 以前我们总说&#xff0c;JS 是单线程没有多线程&#xff0c;当 JS 在页面中运行长耗时同步任务的时候就会导致页面假死影响用户体验&#xff0c;从而需要设置把任务放在任务队列中&#xff1b;执行任务队列中的任务也并非多线程进行的&#xff0c;然而现在 HTML5 提供了…

【C++】C++中的String类详解及模拟实现示例

文章目录 string类简介string类的基本用法string类的常用方法string类的优势 string类的模拟实现存储结构头文件string.h源文件string.cpp源文件test.cpp string类简介 string类简介在C编程中&#xff0c;字符串是一种非常常见的数据类型&#xff0c;用于存储文本信息。C标准库…

win11 CUDA(12.3) + cuDNN(12.x) 卸载

win11 CUDA&#xff08;12.3&#xff09; cuDNN&#xff08;12.x&#xff09;卸载 信息介绍卸载 信息介绍 本文是对应 win11RTX4070Ti 安装 CUDA cuDNN&#xff08;图文教程&#xff09; 的卸载 卸载 控制面板 --> 程序 --> 卸载程序 卸载掉图中红框内的&#xff0c…

HTML+CSS+JavaScript制作简单轮播图

一 运行效果 二 图片资源 三 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>img{position:absolute;top:6%;left:20%;width:800px;height:240px;}.picture {back…

airserver mac 7.27官方破解版2024最新安装激活图文教程

airserver mac 7.27官方破解版是一款好用的airplay投屏工具&#xff0c;可以轻松将ios荧幕镜像&#xff08;airplay&#xff09;至mac上&#xff0c;在mac平台上实现视频、音频、幻灯片等文件资源的接收及投放演示操作&#xff0c;解决iphone或ipad的屏幕录像问题&#xff0c;满…

DAPP开发【10】express.js的使用

Express.js 是一种流行、轻量级的开源 Web 应用程序框架&#xff0c;用于开发基于 Node.js 的服务器端 Web 应用程序。它提供了强大的功能集&#xff0c;适用于 Web 和移动应用程序。Express.js 旨在支持单页、多页和混合式 Web 应用程序的开发。Express.js 提供了广泛的功能&a…

基于SpringBoot+Vue的学校在线学习系统

开发环境 IDEA JDK1.8 MySQL8.0Node 系统简介 本系统拥有管理员&#xff0c;教师&#xff0c;学生三种身份登录&#xff0c;管理员登录可以查看所有信息&#xff0c;教师登录可以发布作业&#xff0c;查看试卷&#xff0c;回答问题等&#xff0c;学校登录可以查看作业&…

Windows Service Name重复问题

Windows Service Name重复问题 1&#xff0c;问题 2&#xff0c;打开命令提示符&#xff0c;管理员身份运行 3&#xff0c;输入命令&#xff1a;sc delete MYSQL57 4&#xff0c;验证一下&#xff0c;可以看见已经没有感叹号啦 &#xff0c;可以看见已经没有感叹号啦

二叉搜索树中第K小的元素[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个二叉搜索树的根节点root&#xff0c;和一个整数k&#xff0c;请你设计一个算法查找其中第k个最小元素&#xff08;从1开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#x…

linux权限管理以及shell

1.shell 1.1什么是shell? shell即外壳&#xff0c;是运行在linux系统上的一个脚本语言&#xff0c;包裹在linux内核的外面。我们常说的linux操作系统实际上是linux内核。我们使用的所有指令都是一个个程序&#xff0c;而shell指令就是一个将我们用户的操作翻译给linux内核的程…

机械中常用的一些术语

目录 一、OEMSOP:SOP编写指南 WI(标准作业指导书):标准作业程序 &#xff08;SOP&#xff09;:SOP和WI的区别&#xff1a;一、PFC、FMEA、PCP、WIPPAP、PSW&#xff1a;APQP&#xff1a;BOM&#xff08;Bill of Material&#xff09;物料清单DV&#xff08;设计验证&#xff09…

排序算法之六:快速排序(非递归)

快速排序是非常适合使用递归的&#xff0c;但是同时我们也要掌握非递归的算法 因为操作系统的栈空间很小&#xff0c;如果递归的深度太深&#xff0c;容易造成栈溢出 递归改非递归一般有两种改法&#xff1a; 改循环借助栈&#xff08;数据结构&#xff09; 图示算法 不是…