初识go语言-xorm框架的简单使用 | 青训营笔记

596 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第7天

前言

在一个正常的业务开发中,数据库的连接必不可少,使用一款优秀的数据库框架能帮助我们更有效的开发,这篇文主要记录xorm框架简单使用的学习。

xorm简介

xorm是一款强大的go语言orm库,操作十分简洁。

特性

  • 支持Struct和数据库表之间的灵活映射,并支持自动同步
  • 事务支持
  • 同时支持原始SQL语句和ORM操作的混合执行
  • 使用连写来简化调用
  • 支持使用Id, In, Where, Limit, Join, Having, Table, SQL, Cols等函数和结构体等方式作为条件
  • 支持级联加载Struct
  • Schema支持(仅Postgres)
  • 支持缓存
  • 支持根据数据库自动生成xorm的结构体
  • 支持记录版本(即乐观锁)
  • 内置SQL Builder支持
  • 通过EngineGroup支持读写分离和负载均衡

驱动支持

以上详情均参考自Go语言中文文档-xorm (topgoer.com)XORM官网,写得比我详细。

xorm的简单使用

与数据库创建连接

//数据库连接基本信息
var (
   username string = "username"
   password string = "password"
   ip       string = "localhost"
   port     int    = 3306
   dbName   string = "数据库名"
   charset  string = "utf8mb4"//数据库字符集
)
//构建数据库连接信息
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", username, password, ip, port, dbName, charset)//这里对数据库连接信息进行拼接
engine, err := xorm.NewEngine("mysql", dataSourceName)//获取连接引擎

以上对数据库连接信息进行拼接后会得到一个url等价于直接写入一个url。在获取连接引擎时,要指定连接数据库类型并传入数据库连接信息的url。这里用的mysql数据库,需要导入mysql的驱动包,否则运行时会报错的。

import (
_"github.com/go-sql-driver/mysql"
)

同步结构体与数据表

很多数据库框架加上一些插件都能实现不写sql而对数据库进行简单操作的,这些功能xorm都支持,而将数据表的实体结构体同步并自动创建表却不是大多数所支持的,这一功能极大的方便我们对于简单表的开发与修改。

在上面我们已经获取到了连接引擎engine,下面就用engine来操作。

type User struct {
   id int64
   userName string
   //这里在反引号里面可以定义一些该变量的属性,如果用的gorm把xorm改为gorm即可,双引号里面是该变量在数据库里面的属性(包括类型、主键等)
   password1 string `xorm:"varchar(200)"`
}
//结构体同步到数据库
err =engine.Sync(new(User))//这里如果err为空的话就代表同步成功了,打开数据库会发现多了一张表

数据插入

使用Insert方法插入一个对象,Insert支持插入多条数据(可以一次插入也可以是一个结构体数组),不过需要传入的是该数据的地址。

user :=User{}
n,_:=engine.Table("user").Insert(&user)//该方法会返回数据库里面受到影响的行数。

数据更新

数据更新使用Update(默认更新非空和非零字段),删除使用Dalete(至少需要一个条件,否则会报错),使用Exec执行一条sql语句

//数据更新
user :=User{userName: "萧"}
n,_:=engine.Table("user").ID(4).Update(&user)
//数据删除
n,_:=engine.Table("user").ID(4).Delete()
n,_:=engine.Table("user").Where("id=?",4).Delete()
//Exec
result,_:=engine.Exec("delete from uer where id =?",4)

查询

可以手写sql查询也可以用方法快捷查询

//query
result1,_:=engine.Query("select * from user")
//get,只能查找一条记录
user :=User{}
engine.Get(&user)
//find,可以查询多条记录
var userList []User
engine.Table("user").Where("id=?",1).Desc("user_name").Find(&userList)

小结

xorm自带的很多方法极大的简化了开发,能够实现简单的数据库操作,但方法不是万能的,对于复杂的业务sql还是需要自己手动去实现。

参考