概述
在项目开发中,总是会使用一些 SQL 字符串拼接的方式来达到目的,但这并不优雅且可控
因此创建了一个封装了一些基础操作的 gorms 库,用于辅助 gorm 开发,欢迎大家的 PR 与 star 👏
GitHub Repository - github.com/tzq0301/gor…
本仓库只包含一些简单的字符串处理及其他常用的工具函数(无侵入性),例如(1)封装对模糊查询的 % 通配符的拼接(2)对 AS 别名进行封装(3)分页(4)……
Alias 别名
gorms 提供 AS 与 Alias 两个方法对类似 db.Table("user AS u") 甚至 db.Table(tableName + " u") 这样字符串的拼接操作进行改进
gorms.AS("user", "u") // "user AS u"
gorms.Alias("user", "u") // "user u"
Connection 数据库连接
gorms 提供了开箱即用的 In-Memory 内存中 SQLite 数据库,可以用其进行单元测试
db, err := gorms.InMemorySqlite()
db, err := gorms.InMemorySqliteWithInitSQL("CREATE TABLE ...")
Like 通配符
在项目开发中,我见过太多的 fmt.Sprintf("%%%v%%", value) 来进行字符串拼接(太不优雅且低效了),因此 gorms 提供一些方法来进行 SQL 字符串拼接的封装方法
gorms.PercentagePrefix("Tim") // "%Tim"
gorms.PercentageSuffix("Tim") // "Tim%"
gorms.PercentageAround("Tim") // "%Tim%"
gorms.Like(gorms.column, pattern) // db.Where("? LIKE ?", column, %pattern%)
gorms.BeforeLike(gorms.column, pattern) // db.Where("? LIKE ?", column, %pattern)
gorms.AfterLike(gorms.column, pattern) // db.Where("? LIKE ?", column, pattern%)
Order 排序
Note - GORM 的 Order 无法防 SQL 注入
- 提供 Desc 与 Asc 生成显式的排序语句
- 提供 Orders 方法做排序字段的拼接
gorms.Desc("id") // "id DESC"
gorms.Asc("id") // "id ASC"
gorms.Orders("id DESC", "create_time ASC") // "id DESC, create_time ASC"
Paginate 分页
提供开箱即用的分页函数,gorms.Paginate 将强制参数矫正为大于等于 1 的值(即确保语义正确,详见源码),不会进行其他默认值的操作,如果你需要对 PageSize 进行约束,可以使用 gorms.PaginateWith 函数
gorms.Paginate(3, 10) // db.Offset(20).Limit(10)
gorms.PageParamConvert(2, 10) // offset=10 & limit=10
// pageSizeBoundFn is used for the constraints of pageSize
// check paginate_test.go for usage in detail
gorms.PaginateWith(pageNum, pageSize, pageSizeBoundFn)
gorms.PageParamConvertWith(pageNum, pageSize, pageSizeBoundFn)
String 字符串
gorms.SignedIntegerToString(123) // "123"