beegomysql查询_beegoorm如何执⾏SQL查询
beego orm包除了⽀持model查询的⽅式,也⽀持直接编写sql语句的⽅式查询数据。
sql原⽣查询有如下特点:
使⽤ Raw SQL 查询,⽆需使⽤ ORM 表定义
多数据库,都可直接使⽤占位符号 ?,⾃动转换
查询时的参数,⽀持使⽤ Model Struct 和 Slice, Array
1.原⽣sql查询
在遇到⽐较复杂的查询的时候,使⽤sql语句更加灵活和直观,也⽐较容易把控sql查询的性能。
1.1. 执⾏插⼊、更新、删除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(?, ?)", "tizi365", "123456").Exec()
// 插⼊数据的⾃增id
id := res.LastInsertId()
mysql中delete语句
// update
res, err := o.Raw("update users set password=? where username=?", "654321", "tizi365").Exec()
// 获取更新数据影响的⾏数
rows := res.RowsAffected()
/
/ delete
o.Raw("delete from users where username=?", "tizi365").Exec()
1.2. 查询语句
查询数据主要通过QueryRow和QueryRows两个函数,分别对应查询⼀条数据还是多条数据,这两个函数都⽀持将查询结果保存到struct 中.
1.2.1. 查询⼀⾏数据
type User struct {
Id int
Username string
}
var user User
err := o.Raw("SELECT id, username FROM users WHERE id = ?", 1).QueryRow(&user)
1.2.2. 查询多⾏数据
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)
}
2.QueryBuilder sql⽣成⼯具
除了上⾯直接⼿写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,这个就看个⼈喜好了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。