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. 2019-2020-1 20199325《Linux内核原理与分析》第十一周作业

    实验简介: Set-UID 是 Unix 系统中的一个重要的安全机制.当一个 Set-UID 程序运行的时候,它被假设为具有拥有者的权限.例如,如果程序的拥有者是root,那么任何人运行这个程序时都会 ...

  2. Python(10)

    如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a.b.c可能的组合? # 注意是三重循环 for a in range(0, 1001): for b i ...

  3. T-SQL字符串函数

    整理下MSSQL中有关时间的函数,博客记录之. ASCII 原型:ASCII ( character_expression ) 返回值:int 类型值 功能:返回输入字符串最左边的一个字符的ASCII ...

  4. 某拍sig算法揭秘---50行代码下载5000万小姐姐自拍小视频

    背景: ​ ​ ​ 首先我们需要一点点python基础,比如可以运行类似下面的代码 import requests headers={ "xxx":"xxx", ...

  5. Flex 布局教程:语法篇(转自阮一峰的网络日志)

    作者:阮一峰(转自阮一峰的网络日志,如有侵权,立即删除) 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 ...

  6. 如何理解Java的值传递

    结论 为了加深印象,先把结论放在文章开头. ++Java中只有值传递++. 形参与实参 在理解Java的值传递 实参Argument 实际参数,主调用函数传递给调用函数的参数 形参Parameter ...

  7. Ethtool工具源码剖析

    Ethtool工具源码剖析 ethool是一个实用的工具,用来给系统管理员以大量的控制网络接口的操作.可以用来控制接口参数,速度,介质类型,双工模式,DMA环设置,硬件校验和,LAN唤醒操作等.本人经 ...

  8. #if 和#ifdef的区别

    转自:https://blog.csdn.net/zhangchiytu/article/details/7563329 先看个例子:#define TARGET_LITTLE_ENDINA 1#de ...

  9. ACM-ICPC 2019 山东省省赛总结

    五题手快拿银,不然拿铜,甚至不拿,从结果上来看拿了铜牌对第一年的我们来说算好的,也不算太好. 从拿奖后的第一天,我想写这篇博客,但是我忍了下来,那时候被喜悦冲昏了头脑,当 冷静下来,我开始打算写这篇博 ...

  10. python(内置高阶函数)

    1.高阶函数介绍: 一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),如果满足其一,则为高阶函数. 常见的高阶函数:map().sorted( ...