• 删除数据Delete方法,参数为struct的指针并且成为查询条件。注意:当删除时,如果user中包含有bool,float64或者float32类型,有可能会使删除失败
package main

import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"log"
) var engine *xorm.Engine type User struct {
Name string `xorm:"varchar(25) 'name'"`
Id int `xorm:"pk 'id' autoincr"`
} func main() {
var err error
engine, err = xorm.NewEngine("mysql", "root:123456@/test")
if err != nil {
log.Fatal(err)
return
}
//创建表和插入数据
/*err = engine.CreateTables(User{})
if err != nil {
log.Fatal(err)
return
} u := make([]User, 3)
u[0].Name = "u0"
u[1].Name = "u1"
u[2].Name = "u2" _, err = engine.Insert(u)
if err != nil {
log.Fatal(err)
return
}*/ uu := new(User)
has ,err :=engine.Id(2).Get(uu)
if err !=nil {
log.Fatal(err)
return
}
if has {
fmt.Println("删除Deleted,用户名:",uu.Name)
}else {
fmt.Println("该数据现在已经不存在")
} affected, err := engine.Id(2).Delete(uu)
if err != nil {
log.Fatal(err)
return
}
fmt.Println("删除Delete,受影响的行数:", affected)
fmt.Println() has ,err =engine.Id(2).Get(uu)
if err !=nil {
log.Fatal(err)
return
}
if has {
fmt.Println("删除Deleted,用户名:",uu.Name,"deleteAt:")
}else {
fmt.Println("该数据现在已经不存在")
} affected, err = engine.Id(2).Delete(uu)
if err != nil {
log.Fatal(err)
return
}
fmt.Println("删除Delete,受影响的行数:", affected)
fmt.Println() /*
输出:
删除Deleted,用户名: u1
删除Delete,受影响的行数: 1 该数据现在已经不存在
删除Delete,受影响的行数: 0
*/ }
  • 软删除Deleted, Deleted可以让您不真正的删除数据,而是标记一个删除时间。使用此特性需要在xorm标记中使用deleted标记,对应的字段必须为time.Time类型。在Delete()时,deleted标记的字段将会被自动更新为当前时间而不是去删除该条记录

    package main
    
    import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/go-xorm/xorm"
    "log"
    "time"
    ) var engine *xorm.Engine type User struct {
    Name string `xorm:"varchar(25) 'name'"`
    Id int `xorm:"pk 'id' autoincr"`
    Version int `xorm:"version"`
    UpdatedAt time.Time `xorm:"updated"`
    DeletedAt time.Time `xorm:"deleted"`
    } func main() {
    var err error
    engine, err = xorm.NewEngine("mysql", "root:123456@/test")
    if err != nil {
    log.Fatal(err)
    return
    }
    //创建表和插入数据
    /* err = engine.CreateTables(User{})
    if err != nil {
    log.Fatal(err)
    return
    } u := make([]User, 3)
    u[0].Name = "u0"
    u[1].Name = "u1"
    u[2].Name = "u2" _, err = engine.Insert(u)
    if err != nil {
    log.Fatal(err)
    return
    }*/ uu := new(User)
    has ,err :=engine.Id(2).Get(uu)
    if err !=nil {
    log.Fatal(err)
    return
    }
    if has {
    fmt.Println("软删除Deleted,用户名:",uu.Name,"deleteAt:",uu.DeletedAt)
    }else {
    fmt.Println("该数据现在已经不存在")
    } affected, err := engine.Id(2).Delete(uu)
    if err != nil {
    log.Fatal(err)
    return
    }
    fmt.Println("软删除Delete,受影响的行数:", affected)
    fmt.Println() has ,err =engine.Id(2).Get(uu)
    if err !=nil {
    log.Fatal(err)
    return
    }
    if has {
    fmt.Println("软删除Deleted,用户名:",uu.Name,"deleteAt:",uu.DeletedAt)
    }else {
    fmt.Println("该数据现在已经不存在")
    } affected, err = engine.Id(2).Delete(uu)
    if err != nil {
    log.Fatal(err)
    return
    }
    fmt.Println("软删除Delete,受影响的行数:", affected)
    fmt.Println() //那么如果记录已经被标记为删除后,要真正的获得该条记录或者真正的删除该条记录,需要启用Unscoped,如下所示:
    // 此时将可以获得记录,此时将可以真正的删除记录 has ,err =engine.Id(2).Unscoped().Get(uu)
    if err !=nil {
    log.Fatal(err)
    return
    }
    if has {
    fmt.Println("启用Unscoped,用户名:",uu.Name,"deleteAt:",uu.DeletedAt)
    }else {
    fmt.Println("该数据现在已经不存在")
    } affected, err = engine.Id(2).Unscoped().Delete(uu)
    if err != nil {
    log.Fatal(err)
    return
    }
    fmt.Println("启用Unscoped,受影响的行数:", affected) /*
    输出:
    软删除Deleted,用户名: u1 deleteAt: 0001-01-01 00:00:00 +0000 UTC
    软删除Deleted,受影响的行数: 1 该数据现在已经不存在
    软删除Deleted,受影响的行数: 0 启用Unscoped,用户名: u1 deleteAt: 2019-05-28 15:12:38 +0800 CST
    启用Unscoped,受影响的行数: 1
    */ }

xorm-删除和软删除实例的更多相关文章

  1. 深入理解 EF Core:使用查询过滤器实现数据软删除

    原文:https://bit.ly/2Cy3J5f 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能会去除一些本人实在不知道如何组织 ...

  2. tp5 model 中的软删除

    model中需use traits\model\SoftDelete; // 数据表中需添加一个 delete_time 字段保存删除时间 namespace app\index\model; use ...

  3. Laravel5.1 模型 --软删除

    软删除是比较实用的一种删除手段,比如说 你有一本账 有一笔记录你觉得不对给删了 过了几天发现不应该删除,这时候软删除的目的就实现了 你可以找到已经被删除的数据进行操作 可以是还原也可以是真正的删除. ...

  4. laravel框架总结(九) -- 软删除

    当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...

  5. laravel5.2总结--软删除

    当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...

  6. 在FreeSQL中实现「触发器」和软删除功能

    前言 最近做新项目,技术栈 AspNetCore + FreeSQL 这个ORM真的好用,文档也很完善,这里记录一下两个有关「触发器」的功能实现 修改实体时记录更新时间 模型代码 我的模型都是基于这个 ...

  7. 软删除脏数据job笔记

    某次处理一个case,发现线上库里有很多数据有问题.于是决定写一个job来将有问题的数据软删除掉.涉及到的两条SQL语句如下: <select id="loadTSKTVBillDai ...

  8. 关于Domino数据库的软删除

    在Domino的数据库属性的 “高级” 附签(选择文件->数据库->属性),选中“允许软删除”,这样我们就启用了软删除功能,当一个文档没有删除的时候我们可以使用NotesDatabase的 ...

  9. Mysql软删除

    所谓软删除(Soft Deleting),即在删除数据表中的数据时,并不直接将其从数据表中删除,而是将其标志为删除,即在每张表中设置一个删除字段(如:IsDeleted)等,默认情况下其值为0,及未删 ...

随机推荐

  1. Linux后台开发工具箱-葵花宝典

    Linux后台开发工具箱-葵花宝典 一见 2016/11/4 目录 目录 1 1. 前言 4 2. 脚本类工具 4 2.1. 双引号和单引号 4 2.2. 取脚本完整文件路径 5 2.3. 环境变量和 ...

  2. 【CF1042F】Leaf Sets

    [CF1042F]Leaf Sets 题面 洛谷 题解 对于一个根节点\(x\),考虑其子树内的所有\(lca\)为它的叶子节点到它的距离\(d_1<d2<...<d_m\). 那么 ...

  3. (转载)如何在当前目录下快速打开cmd

    很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: Win+R打开运行窗口 输入"cmd"回车打开命令行窗口 假如我们要进入的是D盘foo文件夹下的一个ba ...

  4. Spring Boot 怎么打一个可执行 Jar 包?

    传统的 Java 应用程序都需要打一个 war 包,并到到 Tomcat webapps 目录下运行. Java 支持打 Jar 包,但没有提供一个标准的方式在一个 Jar 包内再加载嵌入别的 Jar ...

  5. docker之网络桥接的两种方式

    第一种:直接敲命令方式配置安装网桥管理工具包:bridge-utile # yum install bridge-utils -y 1.先查看ip 是否有br0ip a2.brctl show 3使用 ...

  6. golang字节数组拷贝BlockCopy函数实现

    在C#中,Buffer.BlockCopy(Array, Int32, Array, Int32, Int32) 函数使用比较广泛,其含义: 将指定数目的字节从起始于特定偏移量的源数组复制到起始于特定 ...

  7. webssocket简介-服务器可以主动传送数据给浏览器

    WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并 ...

  8. [Linux]下的StarUML永远使用版

    这是Linux下的StarUML,其实windows下的是一样的 请不要用于商业目的 这是Linux下的StarUML 解压之后,这是一个appImage文件,也就是说,双击直接运行的版本 [Bash ...

  9. Centos 7.x卸载ibus黑屏修复及fcitx搜狗拼音安装方法

    ibus黑屏修复 百度出来的fcitx安装方法,都要卸载ibus,如果没有注意同时卸载掉的依赖包的话,gnome桌面中的一些关键库也没被卸载. 修复方法很简单,重新安装Gnome sudo yum - ...

  10. 图形化SQL JOIN