• golang orm框架 gorm


    gorm

    文档:https://learnku.com/docs/gorm/v2/transactions/9745

    gorm执行原生sql

    当有复杂sql语句的时候,我们需要执行原生sql语句,这样更加方便

    比如下面的这条sql语句

    //查询每天条数
    type EveryDayNum struct {
        Day string `json:"day"`
        Num int64  `json:"num"`
    }
    
    func CountVisitorsEveryDay(toId string) []EveryDayNum {
        var results []EveryDayNum
        DB.Raw("select DATE_FORMAT(updated_at,'%Y-%m-%d') as day ,"+
            "count(*) as num from visitor where to_id=? group by day order by day desc limit 30",
            toId).Scan(&results)
        return results
    }
    复制代码

    只需要拿着数据库对象去.Raw(原生sql).Scan()就可以了

    Scan的参数是一个结构体引用,所以一定要定义好结构体接收数据才行。

    原生的database/sql, queryRow返回的并不支持Scan结构,必须要一个个 赋值。上面的gorm是封装好的。

    日志#

    Gorm有内置的日志记录器支持,默认情况下,它会打印发生的错误。

    // 启用Logger,显示详细日志
    db.LogMode(true)
    
    // 禁用日志记录器,不显示任何日志
    db.LogMode(false)
    
    // 调试单个操作,显示此操作的详细日志
    db.Debug().Where("name = ?", "xiaoming").First(&User{})

    事务

    使用db.Begin()来开启一个事务, 通过Commit()和Rollback()方法来关闭。

        tx := db.Begin()
    	tx.Rollback()
    	tx.Commit()
    

    Exec, Query, QueryRow and Prepare 方法已经全部可以在tx上面使用。使用方法和在*sql.DB是一样的,事务必须以Commit()或者Rollback()结束

    The Connection Pool

    在database/sql中有一个很基本的连接池,你并没有多大的控制权,仅仅可以设置SetMaxIdleConns和SetMaxOpenConns,也就是最大空闲连接和最大连接数。

    	db.SetMaxIdleConns(n)
    	db.SetMaxOpenConns(n)
    //  关于Gorm执行原生SQL
        // **********语句字段要小写************
        // ***********查询用db.Raw,其他用db.Exec
        // *********** 字段大小写要对应上 **************
        // *************** 注意要 defer rows.Close()
        var Mycount Mycount
        rows,_:= db.Debug().Raw("select Count(1) as Usercount from Users").Rows()
        defer rows.Close()
        for rows.Next() {
            rows.Scan(&Mycount.Usercount)
        }
        var users []User
        //   查询 执行用Scan 和Find 一样
        db=db.Raw("select uid,user_name,age from Users").Scan(&users)
        //db=db.Raw("select uid,user_name,age from Users").Find(&users)
        fmt.Println("Users",users)
        //  更新和删除.插入用 Exec
        db= db.Exec("update Users set user_name='def' where uid=?",1)
        fmt.Println("更新了",db.RowsAffected,"条数据")
        db= db.Exec("delete from Users where uid=?",2)
        fmt.Println("更新了",db.RowsAffected,"条数据")
        return  int32(Mycount.Usercount)

    http://t.zoukankan.com/yingger-p-13392657.html

  • 相关阅读:
    宏开发:excel中添加拼接行
    windows消息简单应用实例
    C#用到windows 消息列表Message类MSG的id代号
    在C#中winform程序中应用nlog日志工具
    sql语句中生成0-10随机数
    div+css布局使用inline-block
    linux在nginx中服务器集群用到session的注意事项
    linux 安装php时不安装mysql客户端或者服务端
    centos 配置apache注意事项
    Apache服务器不能启动查看启动错误信息
  • 原文地址:https://www.cnblogs.com/youxin/p/16028517.html
Copyright © 2020-2023  润新知