Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 67.7MB ·虚拟内存 1301.0MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
beego orm 包除了支持 model 查询的方式,也支持直接编写 sql 语句的方式查询数据。
sql 原生查询有如下特点:
在遇到比较复杂的查询的时候,使用sql语句更加灵活和直观,也比较容易把控sql查询的性能。
执行insert、update、delete语句,需要使用Exec函数,执行后返回 sql.Result 对象,通过sql.Result对象我们可以查询最新插入的自增ID,影响行数。
例子:
// 创建orm对象 o := orm.NewOrm() // insert // 使用Raw函数设置sql语句和参数 res, err := o.Raw("insert into users(username, password) values(?, ?)", "aizws", "123456").Exec() // 插入数据的自增id id := res.LastInsertId() // update res, err := o.Raw("update users set password=? where username=?", "654321", "aizws").Exec() // 获取更新数据影响的行数 rows := res.RowsAffected() // delete o.Raw("delete from users where username=?", "aizws").Exec()
查询数据主要通过QueryRow和QueryRows两个函数,分别对应查询一条数据还是多条数据,这两个函数都支持将查询结果保存到struct中.
查询一行数据:
type User struct { Id int Username string } var user User err := o.Raw("SELECT id, username FROM users WHERE id = ?", 1).QueryRow(&user)
查询多行数据:
type User struct { Id int UserName string } var users []User num, err := o.Raw("SELECT id, username FROM users WHERE id > ? and id < ?", 1, 100).QueryRows(&users) if err == nil { fmt.Println("查询总数: ", num) }
除了上面直接手写sql语句之外,beego orm也为我们提供了一个工具 QueryBuilder 对象,可以用来生成sql语句.
例子:
// 定义保存用户信息的struct type User struct { Id int Username string Password string } // 定义保存结果的数组变量 var users []User // 获取 QueryBuilder 对象. 需要指定数据库驱动参数。 // 第二个返回值是错误对象,在这里略过 qb, _ := orm.NewQueryBuilder("mysql") // 组织sql语句, 跟手写sql语句很像,区别就是sql语句的关键词都变成函数了 qb.Select("id", "username", "password"). From("users"). Where("id > ?"). And("id < ?"). Or("init_time > ?"). OrderBy("init_time").Desc(). Limit(10) // 生成SQL语句 sql := qb.String() // 生成这样的sql语句 SELECT id, username, password FROM users WHERE id > ? AND id < ? OR init_time > ? ORDER BY init_time DESC LIMIT 10 // 执行SQL o := orm.NewOrm() // 上面sql有三个参数(问号),这里传入三个参数。 o.Raw(sql, 1, 100, "2019-06-20 11:10:00").QueryRows(&users)
提示: 使用 QueryBuilder生成 sql 语句还是直接手写sql,取决于个人喜好。
beego ORM 数据库事务处理:通常在一些订单交易业务都会涉及多个表的更新/插入操作,这个时候就需要数据库事务处理。beego orm 处理 mysql 事务有两种方式:手动处理事务、自动处理事务。