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. token认证和理解

    认知篇:https://blog.csdn.net/FYGu18/article/details/89345490 token失效篇认知:https://segmentfault.com/q/1010 ...

  2. QT 的 parent 该如何理解

    对话框是GUI程序和用户进行简短交互的顶层窗口,所谓顶层窗口即始终在主窗口之上显示.QDialog是Qt所有类型的对话框窗口的基类,它继承于QWidget,是一种容器类型组件. QWidget是所有窗 ...

  3. 如何在Spring boot中修改默认端口

    文章目录 介绍 使用Property文件 在程序中指定 使用命令行参数 值生效的顺序 如何在Spring boot中修改默认端口 介绍 Spring boot为应用程序提供了很多属性的默认值.但是有时 ...

  4. JAVA第二次blog总结

    JAVA第二次blog总结 0.前言 这是我们在博客园上第二次写博客,进行JAVA阶段学习的总结.现在我们接触到JAVA已经有一段时间了,但难点还是在于编程思想和方法的改变,第二阶段的学习让我对于理解 ...

  5. Airtest常见的素定位不到

    一.为什么发这博客 前几天业务需要需要操作云手机进行爬取没办法只有混进airtest官方群边学习边进行开发,蛮简单的东西(可能是我之前会selenium,appuim关系吧),但是群里会有很多问题,关 ...

  6. INTERVIEW #4

    120min, 5题.本菜鸡怒跪. 1.变身程序员 (读取时可以按行读取,直到读到空行为止,再对读取过的所有行做转换处理) 输出描述:如果能将所有的产品经理变成程序员,输出最小的分钟数:如果不能将所有 ...

  7. NetCore项目实战篇02---全局异常处理

    在 .netcore中可以自定义自己的异常类型,步骤如下: 1.自定义自己的异常类型UserOperationException 并继承自Exception public class UserOper ...

  8. 全网最简单明了的MySQL连接Eclipse方法(JDBC详细安装方式及简单操作)2020新版

    Step 1 你得有Eclipse 没有出门右拐,我教不了你. Step 2 你得有Mysql MySQL的详细安装过程,我在另一篇博客中给出.戳我 Step 3 安装JDBC 可以去官网下,如果用的 ...

  9. 难道你现在还不知道:C/S和B/S

    随着网络技术的不断发展,各种各样的网络应用程序大爆发.运用最多的架构是基于浏览器+服务器的B/S结构,另一种是基于的 C/S结构. 概述: BS = Browser / Server =浏览器+服务器 ...

  10. P1457 城堡 The Castle 位运算+BFS+思维(难题,好题)

    题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张"幸运爱尔兰"(一种彩票).结果这张彩票让他获得了这次 ...