pagehelper是与gobatis配套的分页工具
v0.1.0已添加此特性 :返回总记录数
select查询返回的result还未能携带page、pageSize、total信息,需要自己组装。
pFac := pagehelper.New(gobatis.NewFactory(
gobatis.SetMaxConn(100),
gobatis.SetMaxIdleConn(50),
gobatis.SetDataSource(&datasource.MysqlDataSource{
Host: "localhost",
Port: 3306,
DBName: "test",
Username: "root",
Password: "123",
Charset: "utf8",
})))
sessMgr := gobatis.NewSessionManager(pFac)
session := sessMgr.NewSession()
ctx := pagehelper.StartPage(context.Background(), 1, 10)
var ret []TestTable
session.SetContext(ctx).Select("SELECT * FROM TBL_TEST").Param().Result(&ret)
session := sessMgr.NewSession()
ctx := pagehelper.StartPageWithCount(context.Background(), 1, 10, "")
var ret []TestTable
session.SetContext(ctx).Select("SELECT * FROM TBL_TEST").Param().Result(&ret)
获得分页信息(以1001条记录为例)
pageInfo := pagehelper.GetPageInfo(ctx)
t.Log(
"pageNum: ", pageInfo.GetPageNum(),
"totalPage: ", pageInfo.GetTotalPage(),
"pageSize: ", pageInfo.GetPageSize(),
"total: ", pageInfo.GetTotal())
输出:
pageNum: 1
totalPage: 101
pageSize: 10
total: 1001
注意:
会自动生成和执行带子查询的countSQL,请自行评估是否使用此功能,转而使用自定义SQL获取总记录数。
session := sessMgr.NewSession()
ctx := pagehelper.OrderBy(context.Background(), "myfield", pagehelper.DESC)
var ret []TestTable
session.SetContext(ctx).Select("SELECT * FROM TBL_TEST").Param().Result(&ret)
注意:
由于golang对order by不能使用placeholder的方式,所以存在注入风险,请谨慎使用排序功能,如果使用,则需要自己做防注入的工作。
举例:
在获得order by参数时做参数校验
valid := regexp.MustCompile("^[A-Za-z0-9_]+$")
if !valid.MatchString(ordCol) {
// invalid column name, do not proceed in order to prevent SQL injection
}
session := sessMgr.NewSession()
ctx := pagehelper.C(context.Background()).Page(1, 3).OrderBy("test", pagehelper.ASC).Build()
var ret []TestTable
session.SetContext(ctx).Select("SELECT * FROM TBL_TEST").Param().Result(&ret)