VipSearchBuilder 技术文档

功能简介

VipSearchBuilder 是一个用于构建会员(Vip)搜索条件的工具类,支持多种搜索方式的组合查询,适用于 xorm 查询框架。

使用方法

基础用法

go 复制代码
cond := NewVipSearchBuilder(engine).
    SetKeywords("关键词").
    Build()

// 在查询中使用
session.Where(cond).Find(&vips)

带表别名的用法

go 复制代码
cond := NewVipSearchBuilder(engine).
    SetKeywords("关键词").
    SetTableAlias("v").  // 设置表别名为 v
    Build()

// 在 JOIN 查询中使用
session.Join("LEFT", "vip_level l", "v.level_id = l.id").
    Where(cond).
    Find(&results)

搜索规则

1. ID 搜索

  • 格式:以 # 开头加数字
  • 示例:#1001 将精确匹配 ID 为 1001 的会员
  • 实现:buildIDCondition

2. 手机号搜索

  • 11位完整手机号:精确匹配
  • 4位数字:匹配手机号后4位
  • 其他位数数字:前缀匹配
  • 示例:
    • 13800138000:精确匹配此手机号
    • 8000:匹配手机号后4位为 8000 的记录
    • 138:匹配手机号以 138 开头的记录
  • 实现:buildPhoneCondition

3. 姓名搜索

  • 条件:关键词包含中文字符
  • 匹配方式:模糊匹配(包含)
  • 示例:张三 将匹配姓名中包含"张三"的记录
  • 实现:buildNameCondition

4. 拼音搜索

  • 条件:关键词全部为英文字母
  • 匹配范围:全拼和首字母缩写
  • 不区分大小写
  • 示例:
    • zhang:匹配拼音包含 "zhang" 的记录
    • zs:匹配首字母缩写包含 "zs" 的记录
  • 实现:buildPinyinCondition

数据库兼容性

  • 自动识别 MySQL 和 SQLite 数据库
  • 针对手机号后4位匹配使用不同的 SQL 函数:
    • MySQL: RIGHT(phone, 4)
    • SQLite: substr(phone, -4)

方法说明

构造方法

go 复制代码
func NewVipSearchBuilder(engine *xorm.Engine) *VipSearchBuilder
  • 参数:xorm 引擎实例
  • 返回:搜索构建器实例

设置方法

SetKeywords

go 复制代码
func (b *VipSearchBuilder) SetKeywords(keywords string) *VipSearchBuilder
  • 功能:设置搜索关键词
  • 参数:搜索关键词
  • 特性:自动去除前后空白字符
  • 返回:构建器实例(支持链式调用)

SetTableAlias

go 复制代码
func (b *VipSearchBuilder) SetTableAlias(alias string) *VipSearchBuilder
  • 功能:设置表别名
  • 参数:表别名
  • 返回:构建器实例(支持链式调用)

构建方法

go 复制代码
func (b *VipSearchBuilder) Build() builder.Cond
  • 功能:构建最终的查询条件
  • 返回:xorm 的 builder.Cond 类型条件
  • 特性:空关键词时返回空条件

注意事项

  1. 必须提供有效的 xorm.Engine 实例
  2. 关键词为空时返回空条件
  3. 表别名是可选的,不设置时直接使用字段名
  4. 所有搜索条件之间是 OR 关系

依赖

相关推荐
liangbm32 天前
AI-ViewNote:把网课和会议视频自动卷成结构化笔记
ai·typescript·go·软件构建·开源软件·react·桌面软件
我叫黑大帅2 天前
Gin 实战入门:从环境搭建到企业级常用特性全解析
后端·面试·go
我叫黑大帅2 天前
Gin 日志体系详解
后端·面试·go
F1FJJ2 天前
Shield CLI v0.3.3 新增 PostgreSQL 插件:浏览器里管理 PG 数据库
网络·网络协议·docker·postgresql·容器·go
mCell2 天前
【万字长文】从 AI SDK 到 mini-opencode:一次很巧的 Go Agent 架构实践
架构·go·agent
jump_jump2 天前
深入理解 Go Context:从原理到实战(基于 Go 1.26)
go·源码
哈里谢顿2 天前
golang目前遇到的面试题
go
哈里谢顿2 天前
python与golang性能差异对比
go
前端Hardy3 天前
Wails v3 正式发布:用 Go 写桌面应用,体积仅 12MB,性能飙升 40%!
前端·javascript·go
golang学习记4 天前
Go 语言生产环境必备包清单
go