首页 > 数据库 >Golang 使用SQLX实现可选条件查询

Golang 使用SQLX实现可选条件查询

时间:2023-10-09 15:35:26浏览次数:45  
标签:SQLX string err db CityQuery 查询 Golang qb query

package main

import (
	"fmt"
	"log"

	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

type CityQuery struct {
	query  string
	opts   cityQueryOptions
	params []any
}

type cityQueryOptions struct {
	Name        string
	CountryCode string
}

// func NewQueryBuilder(query string) *CityQuery {
// query = "SELECT * FROM city"
func NewQueryBuilder(query string) *CityQuery {
	query += " WHERE 1 = 1 "
	qb := &CityQuery{
		query: query,
		opts:  cityQueryOptions{},
	}
	return qb
}

type CustomQueryResult struct {
	ID          int    `db:"ID"`
	Name        string `db:"Name"`
	CountryCode string `db:"CountryCode"`
	District    string `db:"District"`
	Population  int    `db:"Population"`
}

func (qb *CityQuery) addOption(option string, value any) *CityQuery {
	qb.query += fmt.Sprintf(" AND %s = ?", option)
	qb.params = append(qb.params, value)
	return qb
}

func (qb *CityQuery) WithName(name string) *CityQuery {
	return qb.addOption("Name", name)
}
func (qb *CityQuery) WithCountryCode(code string) *CityQuery {
	return qb.addOption("CountryCode", code)
}

func (qb *CityQuery) Query(db *sqlx.DB) ([]CustomQueryResult, error) {
	log.Println(qb.query)
	stmt, err := db.Preparex(qb.query)
	if err != nil {
		log.Println(err)
		return nil, err
	}
	defer stmt.Close()
	var results []CustomQueryResult
	err = stmt.Select(&results, qb.params...)
	if err != nil {
		log.Println(err)
		return nil, err
	}

	return results, nil
}

func main() {
	db := sqlx.MustOpen("mysql", "root:password@tcp(127.0.0.1:3306)/world?charset=utf8mb4&parseTime=True")
	query := NewQueryBuilder("SELECT * FROM city").WithCountryCode("CHN").WithName("1=1")
	results, err := query.Query(db)

	if err != nil {
		log.Println(err)
		return
	}
	for idx := range results {
		fmt.Println(results[idx])
	}
}

标签:SQLX,string,err,db,CityQuery,查询,Golang,qb,query
From: https://www.cnblogs.com/liy36/p/17751839.html

相关文章

  • 点赞功能改进-改造查询点赞状态接口
               ......
  • SQL SERVER 死锁查询存储
    –execsp_who_lock查询哪个库的死锁,存储就建立在哪个库上IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N’[dbo].[sp_who_lock]’)ANDtypein(N’P’,N’PC’))DROPPROCEDURE[dbo].[sp_who_lock]GOcreateprocedure[dbo].[sp_who_lock]asbegindecl......
  • SQL SERVER查询数据库表的数量
    SELECTcount(*)FROMsys.objectsWHEREtype='U'  --统计表数量SELECTNAME FROMsys.objectsWHEREtype='U'     --列出表名称或者SELECTCOUNT(*)FROMSysObjectsWhereXType='U'  --统计表数量SELECTNameFROMSysObjectsWhereXType='U'......
  • 获取mysql库表清单和字段清单——MySQL查询表和字段注释信息
    最近接到一个需求,就是整理现有系统的库表清单和字段清单用于交付一个系统那么多表和字段,这工作量可不小啊作为一个技术人当然不甘于这样认输,果断查找是否可以通过sql查出,最后还是找到了一、前言说明在mysql中,information_schema这个数据库中保存了mysql服务器所有数据库的信息......
  • Sql Server 2008查询数据库中各表记录行数
    RT SELECTa.name,b.rows,LTRIM(STR(b.used*8/(casewhenb.used<1000then1else1024end),15,0)+(casewhenb.used<1000then'KB'else'MB'end))as[使用空间],LTRIM(STR(b.reserved*8/(casewhenb.reserved<1000th......
  • mongodb慢查询对内存和CPU的影响
    所得结果均为ChatGPT所得,只是用来记录好复习对内存的影响数据加载到内存:MongoDB使用内存来缓存最频繁访问的数据,以提高查询性能。这个缓存通常称为"工作集"。当一个查询需要访问某些数据时,MongoDB会尝试从内存中获取数据,这比从磁盘读取数据要快得多。慢查询导致数据逐出:当......
  • fastadmin 关联预载入查询
    1、以下两种情况中,关联预载入两个表时,想要约束查询字段。thinkphp5.0中的方法失效,需要用以下方法withField,没有时间去研究具体的原因。->with(['user'=>function($query){$query->field('id,username,nickname,prevtime,logintime,jointime');},'communityowner'])//无效......
  • shell 实现harbor 指定仓库镜像tags 查询
    1.需求背景1.1容器发布ci成功以后我们希望CD时候可以选择相关镜像1.2统计指定仓库镜像有多少个版本2.shell代码#!/bin/bash#harbor关键环境变量HARBOR_URL=""USERNAME=""PASSWORD=""PAGE_SIZE=50imges_head=$(echo"$HARBOR_URL"|awk-F//'{print$2}')pr......
  • golang 使用gomail.v2发送电子邮件
    1packageemail23import(4"errors"5"gopkg.in/gomail.v2"6)78vardialer*gomail.Dialer910funcReset(hoststring,portint,username,passwordstring){11dialer=gomail.NewDialer(host,port,usern......
  • 慢查询日志图形化
    前置工作1.关闭selinuxsetenforce0sed-i's/enforcing/disabled/g'/etc/sysconfig/selinux2.打开防火墙的443,13306,80端口iptables-IINPUT-ptcp--dport443-jACCEPTiptables-IINPUT-ptcp--dport80-jACCEPTiptables-IINPUT-ptcp--dport13306-jA......