2-1 mysql安装

参考文档
mac https://blog.csdn.net/qq_33466661/article/details/109843690
windows https://www.cnblogs.com/fzboss/p/13993763.html
具体大家自行查找安装教程 我电脑之前怎么安装我也忘了

2-2 安装依赖

mysql相关包

  1. npm i mysql2 sequelize
  2. # ts相关包
  3. npm i @types/node @types/validator

2-3 连接mysql

创建db文件夹 sequelize官方文档

1.创建连接

src/db/seq.ts

  1. import { Sequelize } from 'sequelize'
  2. // new Sequelize('数据库名称', '用户名', '密码', 配置项)
  3. const sequelize = new Sequelize('vue3-admin', 'root', 'lwl1224', {
  4. host: 'localhost', // 主机名称
  5. dialect: 'mysql', // 连什么类型数据库
  6. timezone: '+08:00', // 东八时区
  7. pool: { // 连接池
  8. max: 5, // 最大连接数量
  9. min: 0,
  10. idle: 10000 // 一个连接池10s之内 没有被使用 则释放
  11. }
  12. })
  13. export default sequelize

2.定义model

定义model就相当于定义schema 定义表

image.png
src/db/models/user.ts

定义user表

  1. import {
  2. Model,
  3. DataTypes,
  4. Optional
  5. } from 'sequelize'
  6. import seq from '../seq'
  7. // sequelize+typescript 参考文档
  8. // https://sequelize.org/master/manual/typescript.html
  9. export interface UserModelProps {
  10. id: number;
  11. username: string;
  12. password: string;
  13. email: string | null;
  14. mobile: string | null;
  15. avatar: string;
  16. isSuper: 0 | 1;
  17. status: 0 | 1;
  18. }
  19. export type RegisterModel = Omit<UserModelProps, 'id'|'isSuper'>
  20. // 在“User.build”和“User.create”调用中,有些属性是可选的
  21. interface UserCreationAttributes extends Optional<UserModelProps, "id" | "isSuper" | "status"> {}
  22. interface UserInstance
  23. extends Model<UserModelProps, UserCreationAttributes>,
  24. UserModelProps {}
  25. // 创建User模型 数据表的名字是users
  26. const User = seq.define<UserInstance>('User', {
  27. id: { // id会自动创建 并设为主键、自增
  28. primaryKey: true,
  29. type: DataTypes.INTEGER.UNSIGNED,
  30. autoIncrement: true
  31. },
  32. username: {
  33. type: DataTypes.STRING,
  34. allowNull: false,
  35. comment: '用户名'
  36. },
  37. password: {
  38. type: DataTypes.STRING,
  39. allowNull: false,
  40. comment: '密码'
  41. },
  42. email: {
  43. type: DataTypes.STRING,
  44. comment: '用户邮箱'
  45. },
  46. mobile: {
  47. type: DataTypes.STRING,
  48. comment: '手机号'
  49. },
  50. avatar: {
  51. type: DataTypes.STRING,
  52. comment: '头像'
  53. },
  54. isSuper: {
  55. type: DataTypes.BOOLEAN, // TINYINT(1)
  56. comment: '超级管理员 1是 0不是',
  57. defaultValue: 0
  58. },
  59. status: {
  60. type: DataTypes.BOOLEAN, // TINYINT(1)
  61. comment: '账户禁用状态 1正常 0禁用',
  62. defaultValue: 1
  63. }
  64. })
  65. export default User

src/db/models/index.ts

  1. import UserModel from './user'
  2. export {
  3. UserModel
  4. }

3.测试连接

src/db/index.ts

  1. import seq from './seq'
  2. import './models/index'
  3. // 测试连接
  4. ;(async () => { // 连接测试
  5. try {
  6. await seq.authenticate()
  7. console.log('Connection has been established successfully.')
  8. } catch (error) {
  9. console.error('Unable to connect to the database:', error)
  10. }
  11. })()
  12. // 同步更新model
  13. ;(async () => { // model配置修改后 执行sync进行更新同步
  14. await seq.sync({ alter: true })
  15. console.log('sync ok')
  16. })()

4.配置npm script

  1. {
  2. ...
  3. "scripts": {
  4. "serve": "nodemon -i ./node_modules/ --exec \"ts-node\" src/app.ts",
  5. "db": "ts-node ./src/db/index.ts"
  6. }
  7. }

运行,后续model修改后就运行次脚本来同步

  1. npm run db

image.png
使用Navicat查看数据表
image.png

本节参考源码

https://gitee.com/brolly/vue3-admin-server/commit/7f6ffb2e72b45f871fa720ed40ad2364f465d2fa