select - xs-soft/dbr GitHub Wiki
SELECT操作
1.查询多行数据到结构切片
type User struct{
Name string //用户名
Pass string //密码
NickName string //昵称
Level int64 //级别
}
users:=[]User{}
dbr.Select("name","pass","nick_name","Levle").From("user").Load(&users)
默认情况下dbr对结构体和字段的映射为上述标准,即驼峰转换为下划线小写
2.查询单个数据到结构
user:=User{}
dbr.Select("name","pass","nick_name").From("user").Where("id=?",id).LoadOne(&user)
3.分页
users:=[]User{}
//表示了一页10行,从第二页开始
dbr.Select("name","pass","nick_name").From("user").Offset(10).Limit(10).Load(&users)
//简化写法Paginate(每页行数,页数)
dbr.Select("name","pass","nick_name").From("user").Paginate(10,2).Load(&users)
4.排序
dbr.Select("*").From("user").Load(&users)
//正序排序
dbr.Select("*").From("user").OrderAsc("id").Load(&users)
//倒序排序
dbr.Select("*").From("user").OrderDesc("age").Load(&users)
//联合排序
dbr.Select("*").From("user").OrderDesc("age").OrderAsc("id").Load(&users)
//diy排序
dbr.Select("*").From("user").Order("age desc,id asc").Load(&users)
5.锁查询
//当在事务中.所有的查询默认都是开锁,否则相反
//开锁
dbr.Select("*").From("user").Lock(true).Load(&users)
//关锁
dbr.Select("*").From("user").Lock(true).Load(&users)
6.Group
type LevelSum struct{
Level int64
Num int64
}
lsum:=[]LevelSum{}
dbr.Select("level","count(*) as num").From("user").GroupBy("level").Load(&lsum)
7.常规数据返回
//取得符合条件的第一条记录的name字段,并以string形式返回
dbr.Select("name").From("user").Where("id=?",id).ReturnString()
//取得所有特定级别的会员,用户名以[]string形式返回
dbr.Select("name").From("user").Where("level=?",level).ReturnStrings()
//此类型方法一共有三组分别是
.ReturnString()
.ReturnStrings()
.ReturnInt64()
.ReturnInt64s()
.ReturnUint64()
.ReturnUint64s()
8.连表查询
dbr.Select("name").From("user").Join("item","user.id=item.userid")
//别名处理
dbr.Select("name").From("user",u).Join("item as i","u.id=i.userid")
//join操作代表了数据库的innerjoin
其中Join方法还有
.LeftJoin(table,on)
.RightJoin(table,on)
.FullJoin(table,on)
9.执行期间输出Sql语句
dbr.Select("*").From("user").Load(&users)
10.DISTINCT 去重
dbr.Select("name").DISTINCT().From("user").Load(&users)
11.Maps与Lists 在某一些情况下,比如要显示动态列表.需要获得一个二维结构.来表示查询出来的多行数据.则额外增加了此方法
//type Maps map[string]interface{}
m:=[]dbr.Maps{}
dbr.Select("*").From("user").Maps(&m)
//每一行数据都是一个dbr.Maps,其中string键为字段名,值为实际类型为string的interface{}
如果确定每一列的位置,希望提高性能.直接使用切片来代表每一行数据
//type Lists []interface{}
l:=[]dbr.Lists{}
db.Session().Select("*").From("会员").Lists(&l)