golang xorm应用
github.com/go-xorm/xorm xorm库
xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单SQL需求。
在xorm里面,可以同时存在多个Orm引擎,一个Orm引擎称为Engine,一个Engine一般只对应一个数据库。Engine通过调用xorm.NewEngine
生成,如:
var engine *xorm.Engine
在使用前,记得导入需要的包
import (
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
)
创建完成engine之后,并没有立即连接数据库,此时可以通过engine.Ping()来进行数据库的连接测试是否可以连接到数据库。另外对于某些数据库有连接超时设置的,可以通过起一个定期Ping的Go程来保持连接鲜活。
engine可以通过engine.Close来手动关闭,但是一般情况下可以不用关闭,在程序退出时会自动关闭。
如果是go-sql-driver,执行exec()也会自动关闭,但是执行Query()则需要关闭。
日志
xorm的日志比使用go-sql-driver要好用,总体来说xorm是现有的orm中值得一用的一个。
日志是一个接口,通过设置日志,可以显示SQL,警告以及错误等,默认的显示级别为INFO。
engine.ShowSQL(true)
,则会在控制台打印出生成的SQL语句;engine.Logger().SetLevel(core.LOG_DEBUG)
,则会在控制台打印调试及以上的信息;
如果希望将信息不仅打印到控制台,而是保存为文件,那么可以通过类似如下的代码实现,NewSimpleLogger(w io.Writer)
接收一个io.Writer接口来将数据写入到对应的设施中。
当然,如果希望将日志记录到syslog中,也可以如下:
logWriter, err := syslog.New(syslog.LOG_DEBUG, "rest-xorm-example")
if err != nil {
log.Fatalf("Fail to create xorm system logger: %v\n", err)
}
logger := xorm.NewSimpleLogger(logWriter)
logger.ShowSQL(true)
engine.SetLogger(logger)
连接池
engine内部支持连接池接口和对应的函数。
ps:go-sql-driver 内部也支持连接池。
- 如果需要设置连接池的空闲数大小,可以使用
engine.SetMaxIdleConns()
来实现。 - 如果需要设置最大打开连接数,则可以使用
engine.SetMaxOpenConns()
来实现。
最后,举一个xorm的使用例子
var users []User
err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users)
// SELECT * FROM user WHERE name = ? AND age > 10 limit 0 offset 10 type Detail struct {
Id int64
UserId int64 `xorm:"index"`
} type UserDetail struct {
User `xorm:"extends"`
Detail `xorm:"extends"`
} var users []UserDetail
err := engine.Table("user").Select("user.*, detail.*")
Join("INNER", "detail", "detail.user_id = user.id").
Where("user.name = ?", name).Limit(10, 0).
Find(&users)
// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 0 offset 10
golang xorm应用的更多相关文章
- Golang xorm工具,根据数据库自动生成 go 代码
使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型.因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段 ...
- golang xorm框架的使用
1.创建engine engine, err := xorm.NewEngine(driverName, dataSourceName) 上述代码创建了一个数据库引擎,可以在一个程序中创建多个engi ...
- golang xorm MSSQL where查询案例
xorm官方中文文档 参考 http://xorm.io/docs/ 以sqlserver为例 先初始化连接等... engine, err := xorm.NewEngine("mssql ...
- golang xorm reverse 自动生成数据库实体文件
一.先安装好需要的东西 xorm 也可以参考官方文档 readme.md https://github.com/go-xorm/cmd 和 http://xorm.io/docs/ go get gi ...
- 【解决了一个小问题】golang xorm中使用where id in (xxx),没办法使用参数替换
代码中使用XORM来从数据库查询数据,有类似如下的代码: session.Where("id in (?)", strings,Join(arr, ",")) ...
- gin golang xorm
https://blog.csdn.net/keytounix/article/details/79337587
- golang xorm时区问题
mysql连接后面加 &loc=Local 否则执行sql的时间格式,存到数据库会按0时区 UTC存储
- go iris xorm包使用(sqlite3数据库增删查改)
官网https://studyiris.com/example/orm/xorm.html例子,稍做修改 1.我是win64,但没有遇到mingw问题,应该是之前安装过gcc环境,参考:测试一下rob ...
- 2019年十大开源WEB应用防火墙点评
2019年十大开源WEB应用防火墙点评 随着WEB应用的爆炸式成长和HTTPS加密的普及,针对网络应用层的攻击,像SQL注入.跨站脚本攻击.参数篡改.应用平台漏洞攻击.拒绝服务攻击等越来越多,传统的防 ...
随机推荐
- 微信 weui 初体验
最近微信推出他们自己的H5组件(weui)组件的优点有两个: 做为开发者的我们可以不用写太多css,直接拿过来就可以用. 组件都有点击态,大大增加了用户的体验好感 高清屏幕下 border : 0.5 ...
- C# winfrom打印技术初探
最近用到了winform去打印,网上查了一些资料,大概内容: 一 .首先有几个类 PageSetupDialog . PrintDialog .PrintDocument .PrintPreviewC ...
- 遍历FTP目录及下载
操作ftp,直接在main方法中即可操作. 例1:遍历ftp目录中的文件 public static void main(String[] args) throws IOException { FTP ...
- POJ 1061 青蛙的约会 扩展欧几里德--解不定方程
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 81606 Accepted: 14116 Descripti ...
- UOJ#328. 【UTR #3】量子破碎
传送门 学过 \(FWT\) 看到操作 \(2\) 不难可以联想到 \(FWT\) 考虑一遍 \(\oplus\) \(FWT\) 会把 \(a_t\) 变成什么 \(a_t'=((-1)^{bitc ...
- HDU4418 Time travel(期望dp 高斯消元)
题意 题目链接 Sol mdzz这题真的太恶心了.. 首先不难看出这就是个高斯消元解方程的板子题 \(f[x] = \sum_{i = 1}^n f[to(x + i)] * p[i] + ave\) ...
- 日历视图(CalendarView)
日历视图(Calendarview) 常用属性: android:selectedWeekBackgroundColor(设置被选中周的背景颜色) android:showWeekNumber(设置是 ...
- Flutter与Android混合开发及Platform Channel的使用
相对于单独开发Flutter应用,混合开发对于线上项目更具有实际意义,可以把风险控制到最低,也可以进行实战上线.所以介绍 集成已有项目 混合开发涉及原生Native和Flutter进行通信传输,还有插 ...
- redis 数据淘汰策略与配置
redis 数据淘汰策略 volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰volatile-random:从 ...
- Typescript 基础知识
Typescript 就是 Javascript 的超集,所以首先你要知道 Javascript 基础知识 类型注解 类型注解在TypeScript中是记录函数或变量约束的简便方法. // 布尔值 l ...