当前位置:网站首页>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

边栏推荐
- 一名普通学生的大一总结【不知我等是愚是狂,唯知一路向前奔驰】
- Jstat pour la commande JVM: voir les statistiques JVM
- The boss always asks me about my progress. Don't you trust me? (what do you think)
- 搞懂fastjson 对泛型的反序列化原理
- make makefile cmake qmake都是什么,有什么区别?
- MFC BMP sets the resolution of bitmap, DPI is 600 points, and gdiplus generates labels
- [SQL practice] a SQL statistics of epidemic distribution across the country
- VScode进行代码补全
- 牙齿干细胞的存储问题(未完待续)
- On the difference between FPGA and ASIC
猜你喜欢
![R language [logic control] [mathematical operation]](/img/93/06a306561e3e7cb150d243541cc839.png)
R language [logic control] [mathematical operation]

Career experience feedback to novice programmers
![A freshman's summary of an ordinary student [I don't know whether we are stupid or crazy, but I know to run forward all the way]](/img/fd/7223d78fff54c574260ec0da5f41d5.png)
A freshman's summary of an ordinary student [I don't know whether we are stupid or crazy, but I know to run forward all the way]

ML's shap: Based on the adult census income binary prediction data set (whether the predicted annual income exceeds 50K), use the shap decision diagram combined with the lightgbm model to realize the

404 not found service cannot be reached in SAP WebService test

JVM命令之 jstat:查看JVM统计信息
Interview questions and salary and welfare of Shanghai byte

关于STC单片机“假死”状态的判别

CTFshow--常用姿势

PTA 天梯赛练习题集 L2-004 搜索树判断
随机推荐
Hcip seventh operation
Randomly generate session_ id
【日常训练--腾讯精选50】235. 二叉搜索树的最近公共祖先
Digital IC interview summary (interview experience sharing of large manufacturers)
How to improve website weight
Opensergo is about to release v1alpha1, which will enrich the service governance capabilities of the full link heterogeneous architecture
Input of native applet switches between text and password types
话说SQLyog欺骗了我!
R language [logic control] [mathematical operation]
Solve pod install error: FFI is an incompatible architecture
绕过open_basedir
Polynomial locus of order 5
搞懂fastjson 对泛型的反序列化原理
Understand the deserialization principle of fastjson for generics
从“跑分神器”到数据平台,鲁大师开启演进之路
Mac version PHP installed Xdebug environment (M1 version)
目标检测中的BBox 回归损失函数-L2,smooth L1,IoU,GIoU,DIoU,CIoU,Focal-EIoU,Alpha-IoU,SIoU
Value range of various datetimes in SQL Server 2008
404 not found service cannot be reached in SAP WebService test
A freshman's summary of an ordinary student [I don't know whether we are stupid or crazy, but I know to run forward all the way]