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 关系

依赖

相关推荐
异常君17 小时前
Java 与 Go 语言协作开发实战指南
java·go
程序员爱钓鱼18 小时前
Go语言之接口与多态 -《Go语言实战指南》
后端·go·google io
岁忧2 天前
(nice!!!)(LeetCode 每日一题) 3372. 连接两棵树后最大目标节点数目 I (贪心+深度优先搜索dfs)
java·c++·算法·leetcode·go·深度优先
莱茵不哈哈4 天前
etcd:高可用,分布式的key-value存储系统
数据库·分布式·go·etcd·kv
aiguangyuan4 天前
Go语言中的浮点数类型详解
go·后端开发
Clown958 天前
Go语言爬虫系列教程(三)HTML解析技术
爬虫·go·goquery
fashia8 天前
Java转Go日记(五十六):gin 渲染
开发语言·后端·golang·go·gin
白总Server8 天前
Golang基于 Swagger + JWT + RBAC 的认证授权中间件设计
linux·运维·服务器·架构·go·bash·jwt
fashia8 天前
Java转Go日记(五十四):gin路由
开发语言·后端·golang·go·html·gin