关于go语言的orm:beedb网上资料太少了,今天才开始研究,总结了一些,希望对大家有帮助,不说没用的了,直接主题:
安装:
go get github.com/astaxie/beedb
API地址:
https://github.com/astaxie/beedb/wiki/API-Interface
支持的数据库种类:
Mysql/SQLite/PostgreSQL/DB2/MS ADODB/ODBC/Oracle
数据库包下载地址:
Mysql:github.com/ziutek/mymysql/godrv[*]
Mysql:github.com/Go-SQL-Driver/MySQL[*]
PostgreSQL:github.com/bmizerany/pq[*]
SQLite:github.com/mattn/go-sqlite3[*]
DB2: bitbucket.org/phiggins/go-db2-cli
MS ADODB: github.com/mattn/go-adodb[*]
ODBC: bitbucket.org/miquella/mgodbc[*]
Oracle: github.com/mattn/go-oci8
Model struct:
Db *sql.DB
TableName string
LimitStr int
OffsetStr int
WhereStr string
ParamStr []interface{}
OrderStr string
ColumnStr string
PrimaryKey string
JoinStr string
GroupByStr string
HavingStr string
Model method:
func New(db *sql.DB) (m Model) *
* Add New sql.DB in the future i will add ConnectionPool.Get()
func (orm *Model) DelectRow() (int64, error)
func (orm *Model) Delete(output interface{}) (int64, error)
func (orm *Model) DeleteAll(rowsSlicePtr interface{}) (int64, error)
func (orm *Model) Execute(finalQueryString string, args ...interface{}) (sql.Result, error) Execute sql
func (orm *Model) Find(output interface{}) error
func (orm *Model) FindAll(rowsSlicePtr interface{}) error
func (orm *Model) FindMap() (resultsSlice []map[string][]byte, err error)
func (orm *Model) GroupBy(keys string) *Model
func (orm *Model) Having(conditions string) *Model
func (orm *Model) Insert(properties map[string]interface{}) (int64, error) inert one info
func (orm *Model) InsertBatch(rows []map[string]interface{}) ([]int64, error) insert batch info
func (orm *Model) Join(join_operator, tablename, condition string)
The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN
func (orm *Model) Limit(start int, size ...int) *Model
func (orm *Model) Offset(offset int) *Model
func (orm *Model) OrderBy(order string) *Model
func (orm *Model) SacnPK(output interface{}) *Model
func (orm *Model) Save(output interface{}) interface{} if the struct has PrimaryKey == 0 insert else update
func (orm *Model) Select(colums string) *Model
func (orm *Model) SetPK(pk string) *Model
func (orm *Model) SetTable(tbname string) *Model
func (orm *Model) Update(properties map[string]interface{}) (int64, error) update info
func (orm *Model) Where(querystring interface{}, args ...interface{}) *Model
26.蛤蟆笔记go语言——beedb库使用
beedb是一个Go进行ORM操作的库,它采用了Go style方式对数据库进行操作,实现了struct到数据表记录的映射。是一个十分轻量级的Go ORM框架,本意降低复杂的ORM学习曲线,尽可能在ORM的运行效率和功能之间寻求一个平衡.
安装
支持go get方式安装,是完全按照Go Style的方式来实现的。
命令行执行:go get github.com/astaxie/beedb
需要import相应的数据库驱动包、database/sql标准接口包以及beedb包
import (
"database/sql"
"github.com/astaxie/beedb"
_"github.com/ziutek/mymysql/godrv"
)
初始化
db, err := sql.Open("mymysql","test/xiemengjun/123456")
if err != nil {
panic(err)
}
orm := beedb.New(db)
beedb的New函数实际上应该有两个参数,第一个参数标准接口的db,第二个参数是使用的数据库引擎,如果你使用的数据库引擎是MySQL/Sqlite,那么第二个参数都可以省略。
如果你使用的数据库是SQLServer,那么初始化需要:
orm = beedb.New(db, "mssql")
如果你使用了PostgreSQL,那么初始化需要:
orm = beedb.New(db, "pg")
采用前面的数据库表Userinfo,现在我们建立相应的struct
type Userinfo struct {
Uid int `PK` //如果表的主键不是id,那么需要加上pk注释,显式的说这个字段是主键
Username string
Departname string
Created time.Time
}
beedb针对驼峰命名会自动帮你转化成下划线字段,例如你定义了Struct名字为UserInfo,那么转化成底层实现的时候是user_info,字段命名也遵循该规则。
插入数据
如何插入一条记录,可以看到我们操作的是strcut对象,而不是原生的sql语句,最后通过调用Save接口将数据保存到数据库。
var saveone Userinfo
saveone.Username = "Test AddUser"
saveone.Departname = "Test AddDepartname"saveone.Created = time.Now()
orm.Save(&saveone)