• Node.js与Sails~Model数据模型


    回到目录

    对于Sails来说,它的Model与数据库对应,不过它并没有采用目前比较流行的poco贫血模型,而是采用了类似DDD的充血模型,即它的数据实体里即有数据库字段(属性)而且还有方法,而模型里的方法主要用来修饰它的属性,如属性的有效性,属性的赋值,插入前和更新前的动作等等,下面我们通过具体的实例代码来说一下sails实体模型的用法。

    一 定义一个Person实体

    module.exports = {
    autoPK:true,//这是默认值,可以省略 tableName:
    'UserInfo', attributes: { name: { type: 'string', size: 255 }, sex: { type: 'integer', defaultsTo: 0 }, updateCount:{ type:'integer', defaultsTo: 0 } } };

    二 对model相关参数的说明

    通过上面的代码我们知道了在sails中数据模型的类型,除了上面的string,integer,还有以下数据类型

    • float
    • text
    • date
    • datetime
    • boolean
    • binary
    • array
    • json

    除了数据类型外,还有以下几个知识点需要我们知道的

    tableName:表示数据库中数据表的名称

    defaultsTo:表示属性的默认值

    size:表示数据长度

    email:可以添加对emial字段的约束,email:true

    unique:表示这个字段在数据表中是唯一的标示,如用户表,有些业务要求用户名是唯一的,我们就可以利用unique这个特性,

    primaryKey:可以让我们把某个字段定义成数据表的主键,但在使用它时,要确保model的autoPK为false否则会有冲突(默认为true)

    autoPK:是否自动生成主键字段id,true表示自动生成主键,false不生成,sails为各种数据库订制了主键生成规则,由mysql,sqlserver为自增主键,而mongodb为objectid主键

    autoCreateAt:自动生成createAt字段,即添加时间

    autoUpdateAt:自动生成updateAt字段,即当记录有更新时,这个时间被自动更新

    enum:表示某个字段可以以枚举的形式保存,它所存储的值为这个枚举的某个元素

    columnName:为实体指定特殊的数据表列名,这类似于tableName

    三 beforeUpdate和beforeCreate的作用

    通过上面代码我们可以在数据添加前和更新上做一些事情,这也是充血模型的优势,它将与属性本身有关的逻辑写到了属性内容,而不是写在service方法里,这有效的提高了对象的内聚性,也是面向对象的体现,下面的代码在记录更新时,对updateCount字段进行加1操作,代码很简单,但可以说明它的作用。

     beforeCreate: function (values, next) {
            values.password =  md5(values.password,"zzl");//添加记录时,为密码进行加密策略,这由于属于密码本身的特性,所以写在这里比在业务代码更合适/
            next();
        }
    beforeUpdate: function (values, next) {//values这个对象是从前台传过来的对象 values.updateCount+=1; next(); }

    这里要注意一点,你的values对象是前台传给service层的对象,不是从数据表里取出来的原始对象,这点要注意,有些想通过这个功能实现数据追踪的,无法简单实现!

     回到目录

  • 相关阅读:
    .NET数据库编程求索之路11.一些思考
    VMware Workstation安装使用手记
    VS2010无法保存项目文件(.csprj)的问题解决方法
    【转】VC++/MFC(VC6)开发技术精品学习资料下载汇总 (2011.3.10更新)
    .NET数据库编程求索之路9.使用EF实现
    oracle11g新特性:闪回数据归档(Flashback Data Archive)#ocp试验#
    ORACLE口令文件验证与操作系统验证|转|
    闪回flashback#ocp试验#
    expdp数据泵导出操作
    手动模式下热备份的不完全恢复#OCP试验#
  • 原文地址:https://www.cnblogs.com/lori/p/4881650.html
Copyright © 2020-2023  润新知