14.4 Go Xorm

获取xorm

go get -u -v github.com/go-xorm/xorm

xorm增删改查

/**
* 应用程序
* 同目录下多文件引用的问题解决方法:
* https://blog.csdn.net/pingD/article/details/79143235
* 方法1 1 go build ./ 2 运行编译后的文件
* 方法2 go run *.go
*/
package main import (
"log"
"fmt" "github.com/go-xorm/xorm"
_ "github.com/go-sql-driver/mysql"
"time"
) const DriverName = "mysql"
const MasterDataSourceName = "root:redhat@tcp(123.206.16.61:3306)/superstar?charset=utf8" /**
CREATE TABLE `user_info` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '中文名',
`sys_created` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`sys_updated` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*/
//结构体对应数据库表字段
type UserInfo struct {
Id int `xorm:"not null pk autoincr"`//不为空,主键,自增
Name string
SysCreated int
SysUpdated int
} var engine *xorm.Engine func main() {
//初始化数据库引擎
engine = newEngin() //execute()//执行原生sql
//ormInsert()//orm插入
//query()
ormGet()
//ormGetCols()
//ormCount()
//ormFindRows()
//ormUpdate()
//ormOmitUpdate()
//ormMustColsUpdate() } // 连接到数据库
func newEngin() *xorm.Engine {
engine, err := xorm.NewEngine(DriverName, MasterDataSourceName)
if err != nil {
log.Fatal(newEngin, err)
return nil
}
// Debug模式,打印全部的SQL语句,帮助对比,看ORM与SQL执行的对照关系
engine.ShowSQL(true)
return engine
} // 通过query方法查询
func query() {
sql := "SELECT * FROM user_info"
//查询方式有三种
//results, err := engine.Query(sql)
//results, err := engine.QueryInterface(sql)
results, err := engine.QueryString(sql)//返回一个map切片,可以for range遍历 if err != nil {
log.Fatal("query", sql, err)
return
}
total := len(results)
if total == 0 {
fmt.Println("没有任何数据", sql)
} else {
for i, data := range results {
fmt.Printf("%d = %v\n", i, data)
}
}
} // 通过execute方法执行更新
func execute() {
sql := `INSERT INTO user_info values(NULL, 'oldboyy', 0, 0)`
affected, err := engine.Exec(sql)
if err != nil {
log.Fatal("execute error", err)
} else {
id, _ := affected.LastInsertId()
rows, _ := affected.RowsAffected()
fmt.Println("execute id=", id, ", rows=", rows)
}
} // 根据models的结构映射数据表
func ormInsert() {
UserInfo := &UserInfo{
Id: 0,
Name: "梅西",
SysCreated: 0,
SysUpdated: 0,
}
//SQL转化
//INSERT INTO `user_info` (`name`,`sys_created`,`sys_updated`) VALUES (?, ?, ?) []interface {}{"梅西", 0, 0}
id, err := engine.Insert(UserInfo)
if err != nil {
log.Fatal("ormInsert error", err)
} else {
fmt.Println("ormInsert id=", id)
fmt.Printf("%v\n", *UserInfo)
}
} // 根据models的结构读取数据
func ormGet() {
UserInfo := &UserInfo{Id:1}
//Get转化sql
//SELECT `id`, `name`, `sys_created`, `sys_updated` FROM `user_info` WHERE `id`=? LIMIT 1 []interface {}{1}
ok, err := engine.Get(UserInfo)
if ok {
fmt.Printf("%v\n", *UserInfo)
} else if err != nil {
log.Fatal("ormGet error", err)
} else {
fmt.Println("orgGet empty id=", UserInfo.Id)
}
} // 获取指定的字段
func ormGetCols() {
UserInfo := &UserInfo{Id:2}
ok, err := engine.Cols("name").Get(UserInfo)
if ok {
fmt.Printf("%v\n", UserInfo)
} else if err != nil {
log.Fatal("ormGetCols error", err)
} else {
fmt.Println("ormGetCols empty id=2")
}
} // 统计
func ormCount() {
//count, err := engine.Count(&UserInfo{})
//count, err := engine.Where("name_zh=?", "梅西").Count(&UserInfo{})
count, err := engine.Count(&UserInfo{Name:"梅西"})
if err == nil {
fmt.Printf("count=%v\n", count)
} else {
log.Fatal("ormCount error", err)
}
} // 查找多行数据
func ormFindRows() {
list := make([]UserInfo, 0)
//list := make(map[int]UserInfo)
//err := engine.Find(&list)
//err := engine.Where("id>?", 1).Limit(100, 0).Find(&list)
err := engine.Cols("id", "name").Where("id>?", 0).
Limit(10).Asc("id", "sys_created").Find(&list) //list := make([]map[string]string, 0)
//err := engine.Table("star_info").Cols("id", "name_zh", "name_en").
// Where("id>?", 1).Find(&list) if err == nil {
fmt.Printf("%v\n", list)
} else {
log.Fatal("ormFindRows error", err)
}
} // 更新一个数据
func ormUpdate() {
// 全部更新
//UserInfo := &UserInfo{NameZh:"测试名"}
//ok, err := engine.Update(UserInfo)
// 指定ID更新
UserInfo := &UserInfo{Name:"梅西"}
ok, err := engine.ID(2).Update(UserInfo)
fmt.Println(ok, err)
} // 排除某字段
func ormOmitUpdate() {
info := &UserInfo{Id:1}
ok, _ := engine.Get(info)
if ok {
if info.SysCreated > 0 {
ok, _ := engine.ID(info.Id).Omit("sys_created").
Update(&UserInfo{SysCreated:0,
SysUpdated:int(time.Now().Unix())})
fmt.Printf("ormOmitUpdate, rows=%d, " +
"sys_created=%d\n", ok, 0)
} else {
ok, _ := engine.ID(info.Id).Omit("sys_created").
Update(&UserInfo{SysCreated:1,
SysUpdated:int(time.Now().Unix())})
fmt.Printf("ormOmitUpdate, rows=%d, " +
"sys_created=%d\n", ok, 0)
}
}
} // 字段为空也可以更新(0, 空字符串等)
func ormMustColsUpdate() {
info := &UserInfo{Id:1}
ok, _ := engine.Get(info)
if ok {
if info.SysCreated > 0 {
ok, _ := engine.ID(info.Id).
MustCols("sys_created").
Update(&UserInfo{SysCreated:0,
SysUpdated:int(time.Now().Unix())})
fmt.Printf("ormMustColsUpdate, rows=%d, " +
"sys_created=%d\n",
ok, 0)
} else {
ok, _ := engine.ID(info.Id).
MustCols("sys_created").
Update(&UserInfo{SysCreated:1,
SysUpdated:int(time.Now().Unix())})
fmt.Printf("ormMustColsUpdate, rows=%d, " +
"sys_created=%d\n",
ok, 0)
}
}
}

xorm命令行工具

1.1. 安装步骤

此处网络可能有问题,下载较慢

proxychains4 go get -u -v github.com/go-xorm/cmd
proxychains4 go get -u -v github.com/denisenkom/go-mssqldb
proxychains4 go get -u -v github.com/go-sql-driver/mysql
proxychains4 go get -u -v github.com/lib/pq
proxychains4 go get -u -v github.com/lunny/log
proxychains4 go get -u -v github.com/ziutek/mymysql/godrv

编译xorm命令

进入$GOPATH/src/github.com/go-xorm/cmd/xorm
go build .
生成xorm命令

14.4 Go Xorm的更多相关文章

  1. Go语言学习目录

    第一章 Go环境搭建 1.1 Linux搭建Go环境 1.2 Mac搭建Go环境 1.3 Windows搭建Go环境 第二章 Go语言特性 2.1 Go特征 2.2 Go变量类型 2.3 Go内置函数 ...

  2. xorm - Update,乐观锁,更新时间updated,NoAutoTime()

    更新数据使用Update方法 Update方法的第一个参数为需要更新的内容,可以为一个结构体指针或者一个Map[string]interface{}类型. 当传入的为结构体指针时,只有非nil和非0的 ...

  3. xorm -Alias,Asc,Desc方法实例

    Alias(string)给Table设定一个别名 package main import ( "fmt" _ "github.com/go-sql-driver/mys ...

  4. xorm:golang的orm(只写了一小部分)

    xorm xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便.这个库是国人开发的,是基于原版 xorm:https://github.com/go-xorm/xorm 的定制 ...

  5. 使用xorm将结构体转为sql文件

    操作步骤 (1)定义结构体 type User struct { Id int //表id Name string //姓名 ...}12345(2)编写代码,执行自动增量同步(mysql为例) im ...

  6. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  7. IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)

    首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...

  8. Angular2 Hello World 之 2.0.0-beta.14

    公司现在采用angualrjs开发一些web应用,采用的是angular1,现在angular2已经差不多了,听说最近rc6已经出来了……其实感觉好慢啊!之前也做过一些anglar2的例子,但是没有记 ...

  9. 14门Linux课程,打通你Linux的任督二脉!

    Linux有很多优点:安全.自主.开源--,也正是这些优点使得很多人都在学Linux. 虽说网上有大把的Linux课程资源,但是对很多小白来说网上的课程资源比较零散并不适合新手学习. 正因为此,总结了 ...

随机推荐

  1. redis部署与卸载

    1.先到Redis官网(redis.io)下载redis安装包 cd /tmp wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2 ...

  2. 日志分析工具ELK(五)

    八.Kibana实践 选择绝对时间和相对时间 搜索 还可以添加相关信息 自动刷新页面时间,也可以关闭 创建图像,可视化 编辑Markdown,创建一个值班联系表 值班联系表 保存 再创建一个饼图;查看 ...

  3. 移动端上传图片(引入exif-js,图片被压缩为base64)

    <template> <div class="vue-box"> <img :src="imgUrl" alt="&qu ...

  4. 长江存储推全新3D NAND架构 挑战三星存储

    雷帝网 乐天 8月7日报道 作为NAND行业的新晋者,长江存储科技有限责任公司(简称:长江存储)今天公开发布其突破性技术--XtackingTM.据知情人士透露,这之前存储一直都是三星的强项. 长江存 ...

  5. Linux安装maven(详细教程)

    一.简介 Maven是意第绪语,意思是“知识的积累者”,最初是为了简化Jakarta Turbine项目中的构建过程.有几个项目,每个项目都有自己的Ant构建文件,所有项目都略有不同.JAR已检入CV ...

  6. VUE生命周期中的钩子函数及父子组件的执行顺序

    先附一张官网上的vue实例的生命周期图,每个Vue实例在被创建的时候都需要经过一系列的初始化过程,例如需要设置数据监听,编译模板,将实例挂载到DOM并在数据变化时更新DOM等.同时在这个过程中也会运行 ...

  7. 绕WAF文章收集

    在看了bypassword的<在HTTP协议层面绕过WAF>之后,想起了之前做过的一些研究,所以写个简单的短文来补充一下文章里“分块传输”部分没提到的两个技巧. 技巧1 使用注释扰乱分块数 ...

  8. Java——Java代码的执行顺序

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.构造方法 构造方 ...

  9. Tunnel Warfare 线段树 区间合并|最大最小值

    B - Tunnel WarfareHDU - 1540 这个有两种方法,一个是区间和并,这个我个人感觉异常恶心 第二种方法就是找最大最小值 kuangbin——线段树专题 H - Tunnel Wa ...

  10. 带你看看Java的锁(二)-Semaphore

    前言 简介 Semaphore 中文称信号量,它和ReentrantLock 有所区别,ReentrantLock是排他的,也就是只能允许一个线程拥有资源,Semaphore是共享的,它允许多个线程同 ...