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. php 判断是否手机端还是pc端

    来自:https://www.cnblogs.com/webenh/p/5621890.html 用手机访问PC端WWW域名的时候,自动判断跳转到移动端,用电脑访问M域名手机网站的时候,自动跳转到PC ...

  2. linux awk 命令实用手册

    0,简介 Linux awk 是一个实用的文本处理工具,它不仅是一款工具软件,也是一门编程语言.awk 的名称来源于其三位作者的姓氏缩写,其作者分别是Alfred Aho,Peter Weinberg ...

  3. Spring Boot的TestRestTemplate使用

    文章目录 添加maven依赖 TestRestTemplate VS RestTemplate 使用Basic Auth Credentials 使用HttpClientOption 使用RestTe ...

  4. HTML中使用CSS样式(下)

    上节内容回顾加补充: 补充:默认img标签,有一个1px的边框 如果点击图片跳转到连接,a标签下套img标签,在IE有的版本中,会有蓝色边框. <a href="http://blog ...

  5. SaltStack的数据系统

    一.SaltStack数据系统的分类 1.Grains(收集的是静态数据) 官方使用文档:https://www.unixhot.com/docs/saltstack/topics/targeting ...

  6. Golang项目部署

    文章来源:https://goframe.org/deploymen... 一.独立部署 使用GF开发的应用程序可以独立地部署到服务器上,设置为后台守护进程运行即可.这种模式常用在简单的API服务项目 ...

  7. BootStrap的栅格式布局

    1.栅格系统(布局) Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 我在这里是把Bootstrap中的栅 ...

  8. Mysql使用规范及建议

    MySQL数据库使用规范一.建表规约1.[强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint (1表示是,0表示否) 说明:任何字段如果为非负数,必 ...

  9. java中for循环和while循环,哪个更快?--一道面试题

    for的 while的

  10. 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数

    1486:黑暗城堡 [题目描述] 知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di为如果所有的通道都被修建,第 i 号房间与第 1 ...