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)