mysql的ORM框架sequelize增删改查及链表(二)

在Node中sequelize增删改查及链表

欢迎点击: 个人官网博客

1.创建并连接mysql数据库

先npm 下载sequelize以及mysql2


const {
    
     Sequelize } = require('sequelize');
var sequelize = new Sequelize(//创建数据库
    'testdemo',  // 数据库名   
    'root',    // 用户名   
    'root',    // 用户密码  
    {
    
    
        'dialect': 'mysql',   // 数据库使用mysql  
        'host': 'localhost',  // 数据库服务器ip   
        'port': 3306,         // 数据库服务器端口   
        'define': {
    
    
            // 字段以下划线(_)来分割(默认是驼峰命名风格)   
            'underscored': true,
            ' charset ': 'utf8',
            ' collate': 'utf8_general_ci',
            ' freezeTableName': true,
            ' timestamps': true, //为模型添加 createdAt 和 updatedAt 两个时间戳字段
        },
        ' pool': {
    
    //连接池
            'maxConnections': 20,
            ' minConnections': 0,
            ' maxIdleTime': 10000 //   连接最大空置时间(毫秒),超时后将释放连接
        },
    }
);
sequelize.authenticate()//建立连接
    .then(() => {
    
    
        console.log('连接成功');
    })
    .catch(err => {
    
    
        console.log(err);
    })
module.exports= sequelize

2.创建表(模型)

let sequelize = require('../index')//这里是上面导出的刚创建的数据库testdemo
const {
    
     Sequelize } = require('sequelize');
const Op = Sequelize.Op//用于下面的模糊查询等复杂操作

// 在testdemo数据库中创建表( model)
const User = sequelize.define('user', {
    
    
    userName: {
    
    
        type: Sequelize.STRING, // 指定值的类型
        field: 'user_name' // 指定存储在表中的键名称
    },
    // 没有指定 field,表中键名称则与对象键名相同,为 email
    email: {
    
    
        type: Sequelize.STRING
    },
    infoid: {
    
    
        type: Sequelize.STRING, // 指定值的类型
    },
}, {
    
    
    // 如果为 true 则表的名称和 model 相同,即 user
    // 为 false MySQL创建的表名称会是复数 users
    // 如果指定的表名称本就是复数形式则不变
    freezeTableName: false
});

3.在User 表(模型)中增删改查,模糊查询

// 添加数据
exports.addUser = function (userName, email) {
    
    
    // 向 user 表中插入数据
    return sequelize.sync()
        .then(() => User.create({
    
    
            userName: userName,
            email: email
        }))
        .then(jane => {
    
    
            console.log(jane.toJSON());
        });
};
 // 查询数据
exports.findUser = async function () {
    
    
    // findAndCountAll() 数量
    //findOrCreate() 找不到就创造
    //findByPk(id) 找id,主键
    // return await User.findOne({
    
    
    //     where: {
    
    
    //       id: 1
    //     }
    //   }).then(res=>{
    
    
    //       console.log(res)
    //   })
    return await User.findAll({
    
    
        // where: {
    
    
        //   id: 1
        // },
        // 如果忽略方向,则默认升序,这里降序
        order: [['id', 'DESC']],
        // offset: 2, limit: 5 //分业
    }).then(users => {
    
    
        // console.log(JSON.stringify(users, null, 4));
        return JSON.stringify(users, null, 4)
    });
};
// 更新数据
exports.updeteUser = async function () {
    
    
    return await User.update({
    
     email: '[email protected]' }, {
    
    
        where: {
    
    
            id: 6
        }
    }).then(res => {
    
    
        console.log(res)
    })
};
//删除数据
exports.deleteUser = async function () {
    
    
    // 或者可以先find()再.destroy()
    return await User.destroy({
    
    
        where: {
    
    
            id: 3
        }
    }).then(res => {
    
    
        console.log(res)
    })
};
//模糊查询
exports.findLike = async function () {
    
    
    let title = 'a'
    return await User.findAll({
    
    
        where: {
    
    
            email: {
    
    
                [Op.like]: '%' + title + '%'
            }
        }
    }).then(users => {
    
    
        // console.log(JSON.stringify(users, null, 4));
        return JSON.stringify(users)
    });
};

4.链表

// 创建 model
const User = sequelize.define('user', {
    
    
    userName: {
    
    
        type: Sequelize.STRING,
        field: 'user_name' 
    },
    email: {
    
    
        type: Sequelize.STRING
    },
    infoid: {
    
    
        type: Sequelize.STRING,
    },
}, {
    
    
    freezeTableName: false
});
const Userinfo = sequelize.define('userinfo', {
    
    
    nameid: {
    
    
        type: Sequelize.STRING,
    },
    qq: {
    
    
        type: Sequelize.STRING
    }
}, {
    
    
    freezeTableName: false
});

关键来了

//链表查询
User.hasMany(Userinfo, {
    
    foreignKey: 'nameid', targetKey: 'infoid' , as: 'Instruments' })
exports.innerJoin = async function () {
    
    
    return await User.findAll({
    
    
        where: {
    
    
            user_name: '小王'
        },
        include: [
            {
    
    
            model: Userinfo,
            as: 'Instruments'
        }
    ]
    }).then(users => {
    
    
        return JSON.stringify(users)
    });
};

查询到如下
在这里插入图片描述
这是express的demo代码

const express = require('express')
const {
    
    addUser,findUser,updeteUser,deleteUser,findLike,innerJoin,addUserinfo} =require('./model/user/user')
const app = express();
app.get('/',async (req, res) => {
    
    
    // addUser('hh','youai')
  let data= await innerJoin()
//   let data= await findLike()
    // updeteUser()
    // deleteUser()
    res.send(data)
})
app.listen(3000, () => {
    
    
    console.log('3000启动了')
})

猜你喜欢

转载自blog.csdn.net/qq_41560520/article/details/111352907