# SqlTemplateClient的执行过程
示例代码:
~~~
sql_key_4_1 := "select.example.stpl" //模板文件名,SqlTemplate的key
//执行的 sql:select * from user where id=7
//如部分参数未使用,请记得使用对应类型0值,如此处name参数值为空字符串,模板使用指南请详见pongo2
paramMap_4_1 := map[string]interface{}{"count": 2, "id": 7, "name": ""}
results, err := engine.SqlTemplateClient(sql_key_4_1, ¶mMap_4_1).Query().List()
//执行的 sql:select * from user where name='xormplus'
//如部分参数未使用,请记得使用对应类型0值,如此处id参数值为0,模板使用指南请详见pongo2
paramMap_4_2 := map[string]interface{}{"id": 0, "count": 0, "name": "xormplus"}
results, err := engine.SqlTemplateClient(sql_key_4_1, ¶mMap_4_2).Query().List()
//执行的 sql:select * from user where name='xormplus'
sql_key_7_1 := "select.example.stpl" //配置文件名,SqlTemplate的key
var users []User
paramMap_7_1 := map[string]interface{}{"id": 0, "count": 0, "name": "xormplus"}
err := engine.SqlTemplateClient(sql_key_7_1, ¶mMap_7_1).Find(&users)
~~~
示例SQL模板:
~~~
select * from user
where
{% if count>1%}
id=?id
{% else%}
name=?name
{% endif %}
~~~
过程说明:
1、SqlTemplateClient函数第二个参数存在时,则按约定需为*map[string]interface{}类型,该参数包含2部分内容,一部分为执行pongo2的SQL模板所需的执行参数,另一部分为通过执行pongo2的SQL模板获得的预编译SQL所需的sql参数。
2、SqlTemplateClient函数会执行pongo2的SQL模板获得的预编译SQL后,将map参数继续传递给后面的Query,Find,Search,Execute等函数继续执行预编译SQL。
3、以示例代码的第一部分为例,SqlTemplateClient函数,会依据传入的模板名称sql_key_4_1找到指定的执行SQL模板,依据传入的参数paramMap_4_1执行模板,获得预编译SQL为`select * from user where id=?`,之后将预编译SQL和paramMap_4_1传递给Query函数执行,最终执行的SQL为`select * from user where id=7`
4、最后请注意不要在SqlTemplate中硬拼接SQL,这样做存在SQL注入风险,请使用预编译SQL合理使用SqlTemplate。
- xorm
- 创建Orm引擎
- 定义表结构体
- 名称映射规则
- 前缀映射,后缀映射和缓存映射
- 使用Table和Tag改变名称映射
- Column属性定义
- 表结构操作
- 获取数据库信息
- 表操作
- 创建索引和唯一索引
- 同步数据库结构
- 导入导出SQL脚本
- SqlMap及SqlTemplate模板
- 初始化SqlMap配置文件及SqlTemplate模板
- SqlMap及SqlTemplate相关功能API
- SqlMap配置文件及SqlTemplate模板加密存储及解析
- 手动管理SqlMap配置及SqlTemplate模板
- 插入数据
- ORM方式插入数据
- 执行SQL命令插入数据
- 创建时间Created
- 查询和统计数据
- ORM方式查询和统计数据
- 查询条件方法
- 临时开关方法
- Get方法
- Find方法
- Join的使用
- Iterate方法
- Count方法
- Rows方法
- Sum系列方法
- Exist方法
- 子查询
- 执行SQL查询
- 执行SQL查询的11种常用方式
- 查询返回json或xml字符串
- 链式查询据操返回某条记录的某个字段的值
- SqlTemplateClient执行过程
- 关于数据库分页查询
- 更新数据
- ORM方式更新数据
- Update方法
- 乐观锁Version
- 更新时间Updated
- 执行SQL命令更新数据
- 删除数据
- ORM方式删除数据
- Delete方法
- 软删除Deleted
- 执行SQL命令删除数据
- 事务处理
- 简单事务模型
- 嵌套事务模型
- 八种事务类型及事务传播机制
- 简单事务相关API
- 嵌套事务相关API
- 嵌套事务示例代码
- 主从数据库(Master/Slave)读写分离
- 创建引擎组
- 负载策略
- 引擎组其他配置方法
- 数据库读写分离
- 批量混合SQL操作
- SQL Builder
- 缓存
- 事件
- 数据导出
- Dump数据库结构和数据
- 查询结果集导出csv、tsv、xml、json、xlsx、yaml、html
- 多Sheet页数据导出
- 日志
- 连接池
- xorm 工具
- 常见问题
- 感谢支持