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.pswp.cn/news/212222.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212222.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212222.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue 前端crypto-js 如何實現加密解密

npm 安裝 crypto-js 引用 import CryptoJS from "crypto-js"; 或者 import CryptoJS from "crypto-js"; //秘鑰 var aesKey "s10dfc3321ba59abbe123057f20f883e"; //將秘鑰轉換成Utf8字節數組 var key CryptoJS.enc.Utf8.parse(aesKey); /…

Spring Boot 3.0 : 集成flyway數據庫版本控制工具

目錄 Spring Boot 3.0 : 集成flyway數據庫版本控制工具flyway是什么為什么使用flyway主要特性支持的數據庫&#xff1a; flyway如何使用spring boot 集成實現引入依賴配置sql版本控制約定3種版本類型 運行SpringFlyway 8.2.1及以后版本不再支持MySQL&#xff1f; 個人主頁: 【?…

常見web漏洞的流量分析

常見web漏洞的流量分析 文章目錄 常見web漏洞的流量分析工具sql注入的流量分析XSS注入的流量分析文件上傳漏洞流量分析文件包含漏洞流量分析文件讀取漏洞流量分析ssrf流量分析shiro反序列化流量分析jwt流量分析暴力破解流量分析命令執行流量分析反彈shell 工具 攻擊機受害機wi…

Unity DOTS中的baking(一) Baker簡介

Unity DOTS中的baking&#xff08;一&#xff09; Baker簡介 baking是DOTS ECS工作流的一環&#xff0c;大概的意思就是將原先Editor下的GameObject數據&#xff0c;全部轉換為Entity數據的過程。baking是一個不可逆的過程&#xff0c;原先的GameObject在運行時不復存在&#x…

leetcode 股票DP系列 總結篇

121. 買賣股票的最佳時機 你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子 賣出該股票。 只能進行一次交易 很簡單&#xff0c;只需邊遍歷邊記錄最小值即可。 class Solution { public:int maxProfit(vector<int>& prices) {int res …

Vue-安裝及安裝vscode相應插件

安裝Vue 安裝nodejs&#xff0c; 地址&#xff1a;https://nodejs.org/en 下載后直接安裝。 安裝后重新打開命令行工具&#xff0c;輸入 node -v PS C:\Users\zcl36> node -v v20.10.0 2. 安裝vue包npm install -g vue/cli安裝之后&#xff0c;你就可以在命令行中訪問 vue…

【git】關于git二三事

文章目錄 前言一、創建版本庫1.通過命令 git init 把這個目錄變成git可以管理的倉庫2.將修改的內容添加到版本庫2.1 git add .2.2 git commit -m "Xxxx"2.3 git status 2.4 git diff readme.txt3.版本回退3.1 git log3.2 git reset --hard HEAD^ 二、理解工作區與暫存…

操作系統內部機制學習

切換線程時需要保存什么 函數需要保存嗎&#xff1f;函數在Flash上&#xff0c;不會被破壞&#xff0c;無需保存。函數執行到了哪里&#xff1f;需要保存嗎&#xff1f;需要保存。全局變量需要保存嗎&#xff1f;全局變量在內存上&#xff0c;無需保存。局部變量需要保存嗎&am…

Leetcode—337.打家劫舍III【中等】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—337.打家劫舍III 算法思想 實現代碼 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(null…

I.MX6ULL_Linux_驅動篇(46)linux LCD驅動

LCD 是很常用的一個外設&#xff0c;在Linux 下LCD 的使用更加廣泛&#xff0c;在搭配 QT 這樣的 GUI 庫下可以制作出非常精美的 UI 界面。本章我們就來學習一下如何在 Linux 下驅動 LCD 屏幕。 Linux 下 LCD 驅動簡析 Framebuffer 設備 先來回顧一下裸機的時候 LCD 驅動是怎…

前端入門:HTML初級指南,網頁的簡單實現!

代碼部分&#xff1a; <!DOCTYPE html> <!-- 上方為DOCTYPE聲明&#xff0c;指定文檔類型為HTML --> <html lang"en"> <!-- html標簽為整個頁面的根元素 --> <head> <!-- title標簽用于定義文檔標題 --> <title>初始HT…

單點登錄方案調研與實現

作用 在一個系統登錄后&#xff0c;其他系統也能共享該登錄狀態&#xff0c;無需重新登錄。 演進 cookie → session → token →單點登錄 Cookie 可以實現瀏覽器和服務器狀態的記錄&#xff0c;但Cookie會出現存儲體積過大和可以在前后端修改的問題 Session 為了解決Co…

【其他數學】結式 resultant

結式 resultant 2023年11月30日 #analysis 文章目錄 結式 resultant介紹Sylvester矩陣應用在消元中的應用傳遞函數的化簡 下鏈 介紹 結式用來計算曲線的交點、消元、找參數化曲線的隱含方程。 為了引出定義&#xff0c;思考如下問題&#xff1a; f ( x ) x 2 ? 5 x 6 g (…

UVM建造測試用例

&#xff08;1&#xff09;加入base_test 在一個實際應用的UVM驗證平臺中&#xff0c;my_env并不是樹根&#xff0c;通常來說&#xff0c;樹根是一個基于uvm_test派生的類。真正的測試用例都是基于base_test派生的一個類。 class base_test extends uvm_test;my_env e…

14-2(C++11)類型推導、類型計算

14-2&#xff08;C11&#xff09;類型推導、類型計算 類型推導auto關鍵字auto類型推斷本質auto與引用 聯用auto關鍵字的使用限制 類型計算類型計算分類與類型推導相比四種類型計算的規則返回值后置 類型推導 auto關鍵字 C98中&#xff0c;auto表示棧變量&#xff0c;通常省略…

Leetcode刷題筆記題解(C++):25. K 個一組翻轉鏈表

思路&#xff1a;利用棧的特性&#xff0c;K個節點壓入棧中依次彈出組成新的鏈表&#xff0c;不夠K個節點則保持不變 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <stack> class Solution { …

在國內,現在月薪1萬是什么水平?

看到網友發帖問&#xff1a;現在月薪1W是什么水平&#xff1f; 在現如今的情況下&#xff0c;似乎月薪過萬這個標準已經成為衡量個人能力的一個標準了&#xff0c;尤其是現在互聯網橫行的時代&#xff0c;好像年入百萬&#xff0c;年入千萬就應該是屬于大眾的平均水平。 我不是…

kafka入門(四):消費者

消費者 (Consumer ) 消費者 訂閱 Kafka 中的主題 (Topic) &#xff0c;并 拉取消息。 消費者群組&#xff08; Consumer Group&#xff09; 每一個消費者都有一個對應的 消費者群組。 一個群組里的消費者訂閱的是同一個主題&#xff0c;每個消費者接收主題的一部分分區的消息…

大師學SwiftUI第18章Part2 - 存儲圖片和自定義相機

存儲圖片 在前面的示例中&#xff0c;我們在屏幕上展示了圖片&#xff0c;但也可以將其存儲到文件或數據庫中。另外有時使用相機將照片存儲到設備的相冊薄里會很有用&#xff0c;這樣可供其它應用訪問。UIKit框架提供了如下兩個保存圖片和視頻的函數。 UIImageWriteToSavedPh…

JAVA后端自學技能實操合集

JAVA后端自學技能實操 內容將會持續更新中,有需要添加什么內容可以再評論區留言,大家一起學習FastDFS使用docker安裝FastDFS(linux)集成到springboot項目中 內容將會持續更新中,有需要添加什么內容可以再評論區留言,大家一起學習 FastDFS 組名&#xff1a;文件上傳后所在的 st…