使用egg-mysql操作mysql數據庫


1、安裝mysql

npm i egg-mysql -S

2、在config/plugin.js里聲明改插件

exports.mysql = {
  enable: true,
  package: 'egg-mysql',
};

3、在config/config.default.js里配置

config.mysql = {
  // 單數據庫信息配置
  client: {
  // host
  host: 'localhost',
  // 端口號
  port: '3306',
  // 用戶名
  user: '****',
  // 密碼
  password: '*******',
  // 數據庫名
  database: 'egg',
  },
  // 是否加載到 app 上,默認開啟
  app: true,
  // 是否加載到 agent 上,默認關閉
  agent: false,
};

4、在service服務層操作數據庫,符合Controller -> Service -> MySQL模式

this.app.mysql.query(sql, values); //sql語句模式

//比如查詢users表name=Jack的數據
let name = 'Jack';
this.app.mysql.query('select * from users where name = ?', [name]);

5、egg封裝增刪改查

1、插入,向users表內插入一條數據

const result = await this.app.mysql.insert('users', {
  name: 'Jack',
  age: 18
})

判斷:result.affectedRows === 1
2、查詢,查詢users表name=Jack的數據

const result = await this.app.mysql.select('users', {
  columns: ['id', 'name'], //查詢字段,全部查詢則不寫,相當於查詢*
  where: {
    name: 'Jack'
  }, //查詢條件
  orders: [
    ['id', 'desc'] //降序desc,升序asc
  ],
  limit: 10, //查詢條數
  offset: 0 //數據偏移量(分頁查詢使用)
})

判斷:result.length > 0
3、修改,修改users表id=1的數據age為20

const result = await this.app.mysql.update('users', {
  age: 20 //需要修改的數據
}, {
  where: {
    id: 1
  } //修改查詢條件
});

判斷:result.affectedRows === 1
4、刪除,刪除users表name=Jack的數據

const result = await this.app.mysql.delete('users', {
  name: 'Jack'
})

判斷:result.affectedRows === 1
5、Mysql常用語句

(1)關聯表查詢(查詢評價表,關聯用戶表頭像和昵稱)

select evaluate.*, user.name, user.figureurl from evaluate 
left join user on evaluate.userId = user.id where cId = 123

(2)更新商品點贊+1,並且一次更新id為1,2,3三條記錄

update commodity set praise = praise + 1 where id in (1,2,3)

6、事務。在某些情況下,執行一個操作需要多次操作數據庫,但這多次操作必須同時成功才行,比如打款的情況,需要從A賬戶扣錢,再向B賬戶加錢,假設A賬戶余額不足,則整個打款操作就應該恢復到原有狀態。

const conn = await app.mysql.beginTransaction(); // 初始化事務

try {
  await conn.insert(table, row1); // 第一步操作
  await conn.update(table, row2); // 第二步操作
  await conn.commit(); // 提交事務
} catch (err) {
  // error, rollback
  await conn.rollback(); // 一定記得捕獲異常后回滾事務!!
  throw err;
}

.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM