当前位置:网站首页>Go language learning notes - Gorm use - native SQL, named parameters, rows, tosql | web framework gin (IX)
Go language learning notes - Gorm use - native SQL, named parameters, rows, tosql | web framework gin (IX)
2022-07-07 06:03:00 【Swordsman a Liang_ ALiang】
Catalog
Learning notes , Where is where .
Next to the previous article :Go English learning notes - gorm Use - Table addition, deletion, modification and query | Web frame Gin( 8、 ... and )_ Swordsman a Liang _ALiang The blog of -CSDN Blog
Basic database operations are OK 了 , This article is mainly about some native SQL Use 、 Named parameters 、Rows Traverse 、ToSQL Generate SQL Test statements and other functions to do interface use tests .
Project address :github Address
Native sql Use
In the actual project , In some complex sql Statement to do queries and other operations , Will use native sql Statement to implement .
Have a look first Raw Use of methods , stay student_service Add below SelectOutline Method .
The method code is as follows :
// Query all student brief information
func (t StudentImpl) SelectOutline() rsp.ResponseMsg {
log.Logger.Info(" Query all student brief information ")
_db := mysql.GetDB()
var _result []constants.StudentOutline
_db.Raw("select id,name,age from student where del_flag = 0").Scan(&_result)
return *rsp.SuccessMsg(_result)
}
adopt Raw Method can be executed directly sql sentence , And assign the result to the corresponding pointer address .
Use Exec You can simply and brutally execute statements directly , Do not process return values .
stay student_service Add below UpdateExec Method .
The method code is as follows :
// Use exec Update the data
func (t StudentImpl) UpdateExec(req req.StudentUpdateExecReq) rsp.ResponseMsg {
log.Logger.Info(" Use exec Schema data update ")
_db := mysql.GetDB()
_db.Exec("UPDATE student SET name = ? WHERE id = ?", req.Name, req.Id)
return *rsp.SuccessMsg(" The update is successful ")
}
You can see that “?” As a parameter placeholder .
Named parameters
GORM Support sql.NamedArg、map[string]interface{}{} or struct Named parameters of the form .
stay student_service Add below SelectByNamespace Method .
The method code is as follows :
// Query with named parameters
func (t StudentImpl) SelectByNamespace(age int64) rsp.ResponseMsg {
log.Logger.Info(" Query with named parameters ")
_db := mysql.GetDB()
var students []db_entity.Student
_db.Where("age > @name and del_flag = @name2", sql.Named("name", age), sql.Named("name2", 0)).Find(&students)
return *rsp.SuccessMsg(students)
}
Use @args How to name parameters , Use... In the back sql.Named Method to pass values to parameters .
ToSQL obtain sql sentence
GORM Can pass ToSQL Method to generate what needs to be executed sql sentence .
stay student_service Add below GetSql Method .
The method code is as follows :
// obtain Sql sentence
func (t StudentImpl) GetSql() rsp.ResponseMsg {
log.Logger.Info(" obtain sql sentence ")
_db := mysql.GetDB()
_sql := _db.ToSQL(func(tx *gorm.DB) *gorm.DB {
return tx.Model(&db_entity.Student{}).Where("id > ?", 0).Limit(2).Order("age desc").Find(&[]db_entity.Student{})
})
fmt.Printf("sql is > %s\n", _sql)
return *rsp.SuccessMsg(" To be successful ")
}
Placeholders are also supported to build SQL.
Rows Traverse
After getting the query data , We need to traverse the data . have access to Rows Method .
stay student_service Add below TestRow Method .
The method code is as follows :
// test row Traverse the way
func (t StudentImpl) TestRow() rsp.ResponseMsg {
log.Logger.Info(" test row Traverse the way ")
_db := mysql.GetDB()
var (
_id int32
_name string
_age int64
)
_rows, _err := _db.Raw("select id,name,age from student where del_flag = 0").Rows()
if _err != nil {
log.Logger.Panic(" perform sql abnormal ", log.Any("error", _err.Error()))
}
defer _rows.Close()
for _rows.Next() {
_rows.Scan(&_id, &_name, &_age)
fmt.Printf("student -> id=%v,name=%v,age=%v\n", _id, _name, _age)
}
return *rsp.SuccessMsg(" Test success ")
}
Interface validation
controller Add interface code in layer , as follows :
// Check all student profiles
func (s StudentController) SelectOutline(context *gin.Context) {
log.Logger.Info("SelectOutline Interface ")
_rsp := services.StudentServ.SelectOutline()
context.JSON(http.StatusOK, _rsp)
}
// Use exec Update the data
func (s StudentController) UpdateExec(context *gin.Context) {
log.Logger.Info("UpdateExec Interface ")
var studentUpdateExecReq req.StudentUpdateExecReq
if err := context.ShouldBindJSON(&studentUpdateExecReq); err != nil {
log.Logger.Panic(" Parameter exception ")
}
if _, err := json.Marshal(studentUpdateExecReq); err != nil {
log.Logger.Panic(" Parameter parsing exception ")
}
_rsp := services.StudentServ.UpdateExec(studentUpdateExecReq)
context.JSON(http.StatusOK, _rsp)
}
// Query with named parameters
func (s StudentController) SelectByNamespace(context *gin.Context) {
log.Logger.Info("SelectByNamespace Interface ")
_age := context.Query("age")
_a, _ := strconv.ParseInt(_age, 10, 64)
_rsp := services.StudentServ.SelectByNamespace(int64(_a))
context.JSON(http.StatusOK, _rsp)
}
// obtain sql sentence
func (s StudentController) GetSql(context *gin.Context) {
log.Logger.Info(" obtain sql Statement interface ")
_rsp := services.StudentServ.GetSql()
context.JSON(http.StatusOK, _rsp)
}
// test row Traverse the way
func (s StudentController) TestRow(context *gin.Context) {
log.Logger.Info(" test row Traversal mode interface ")
_rsp := services.StudentServ.TestRow()
context.JSON(http.StatusOK, _rsp)
}
router Add routing path , as follows :
r.GET("/student/selectOutline", controllers.StudentCtrl.SelectOutline)
r.POST("/student/updateExec", controllers.StudentCtrl.UpdateExec)
r.GET("/student/selectByNamespace", controllers.StudentCtrl.SelectByNamespace)
r.GET("/student/getSql", controllers.StudentCtrl.GetSql)
r.GET("/student/testRow", controllers.StudentCtrl.TestRow)
Verify the interfaces respectively
/student/selectOutline
/student/updateExec
/student/selectByNamespace
/student/getSql
/student/testRow
Summary
Share :
All human suffering , In essence, they are angry at their own incompetence .—— Wang Xiaobo
边栏推荐
- Value range of various datetimes in SQL Server 2008
- Type de texte de commutation d'entrée et de mot de passe de l'applet natif
- ML之shap:基于adult人口普查收入二分类预测数据集(预测年收入是否超过50k)利用shap决策图结合LightGBM模型实现异常值检测案例之详细攻略
- PTA 天梯赛练习题集 L2-004 搜索树判断
- Go语学习笔记 - gorm使用 - 原生sql、命名参数、Rows、ToSQL | Web框架Gin(九)
- Polynomial locus of order 5
- SAP Spartacus checkout 流程的扩展(extend)实现介绍
- Classic questions about data storage
- 404 not found service cannot be reached in SAP WebService test
- 谈fpga和asic的区别
猜你喜欢
pytorch_ 01 automatic derivation mechanism
Hcip seventh operation
目标检测中的BBox 回归损失函数-L2,smooth L1,IoU,GIoU,DIoU,CIoU,Focal-EIoU,Alpha-IoU,SIoU
Web authentication API compatible version information
Understand the deserialization principle of fastjson for generics
苹果cms V10模板/MXone Pro自适应影视电影网站模板
Forkjoin is the most comprehensive and detailed explanation (from principle design to use diagram)
EMMC打印cqhci: timeout for tag 10提示分析与解决
JVM命令之 jstat:查看JVM統計信息
cf:C. Column Swapping【排序 + 模拟】
随机推荐
MySQL performance_ Schema common performance diagnosis query
What is make makefile cmake qmake and what is the difference?
Determine whether the file is a DICOM file
Sidecar mode
上海字节面试问题及薪资福利
PTA 天梯赛练习题集 L2-003 月饼 测试点2,测试点3分析
Personal imitation SSM framework
毕业之后才知道的——知网查重原理以及降重举例
Randomly generate session_ id
I didn't know it until I graduated -- the principle of HowNet duplication check and examples of weight reduction
Wechat applet Bluetooth connects hardware devices and communicates. Applet Bluetooth automatically reconnects due to abnormal distance. JS realizes CRC check bit
[云原生]微服务架构是什么?
CTFshow--常用姿势
PowerPivot - DAX (function)
zabbix_ Get test database failed
如何提高网站权重
Ten stages of becoming a Senior IC Design Engineer. What stage are you in now?
解决pod install报错:ffi is an incompatible architecture
@pathvariable 和 @Requestparam的详细区别
make makefile cmake qmake都是什么,有什么区别?