对应到对象 数据库驼峰_Beego ORM

参考资料

ORM框架 beego的使用

根据数据库和对象关系创建实体类(默认驼峰法)

beego的初始化

在内存中注册一个叫做default的数据源,该数据源对应的是go这个数据库

要操作的model也一起注册进去

一般会申明一个全局的Ormer对象

database init函数里面记得 import mysql的相关驱动和类库

import (

"fmt"

"github.com/astaxie/beego"

"github.com/astaxie/beego/orm"

_ "github.com/go-sql-driver/mysql"

)

var O orm.Ormer

func init() {

orm.RegisterDriver("mysql", orm.DRMySQL)

orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/go?charset=utf8")

orm.RegisterModel(new(User), new(Profile))

O = orm.NewOrm()

}

Beego API

type Ormer interface {

Read(interface{}, …string) error

ReadOrCreate(interface{}, string, …string) (bool, int64, error)

Insert(interface{}) (int64, error)

InsertMulti(int, interface{}) (int64, error)

Update(interface{}, …string) (int64, error)

Delete(interface{}) (int64, error)

LoadRelated(interface{}, string, …interface{}) (int64, error)

QueryM2M(interface{}, string) QueryM2Mer

QueryTable(interface{}) QuerySeter

Using(string) error

Begin() error

Commit() error

Rollback() error

Raw(string, …interface{}) RawSeter

Driver() Driver

}

查询

根据条件简单查询的两种方式 QueryTable方式,和Read方式,QueryTable功能更强大些,类似于Mybatis,而Read方式类似于JPA)

一种是通过数据库SQL来查询,返回结果封装到book这个对象中

第二种是类似于JPA,根据对象来映射数据库,并且查询结果返回到该对象中

通过Read直接查询的话,默认是根据主键查询,如果对象传的不是主键字段,需要指定

func GetBookByName(name string)(*Book, error){

book := new(Book)

err := O.QueryTable("book").Filter("name", name).One(book)

if err != nil || book.Id < 1{

return nil, err

}

return book, nil

}

func FindBookById(id int) (*Book, error){

book:= Book{Id:id}

err:=O.Read(&book)

CheckNil(err)

fmt.Println(book)

return &book,nil

}

func FindBookByAuthor(author string) (*Book, error){

book:= Book{Author:author}

err:=O.Read(&book,"author")

CheckNil(err)

fmt.Println(book)

return &book,nil

}

其它查询

findAll()

OrderBy

Count()

// 排序+查询所有

query := O.QueryTable("chapter").OrderBy("sort").All(&list)

total, _ := O.QueryTable("chapter").Filter("name", name).Count()

DML操作

新增的话,数据库主键最好设置为自增,也支持一次批量新增

修改的话,默认根据主键修改全部的字段,如果只是修改部分字段,需要设置参数

删除函数返回的第一个参数,是成功删除的个数

func BookAdd(book *Book)(int64, error){

return O.Insert(book)

}

successNums, err := o.InsertMulti(100, users)

func CheckAndDelete(title string){

var undownload Undownload

O.QueryTable("undownload").Filter("chapter_title", title).One(&undownload)

if undownload.Id >0{

num,err:=O.QueryTable("undownload").Filter("Id", undownload.Id).Delete()

models.CheckNil(err)

fmt.Println(num)

}

}

实体类和数据库映射关系

表名和字段名默认采用驼峰法,比如MyBook对象对应数据库 my_book表,SystemId属性对应数据库表中 system_id 栏

表名支持自定义映射,不按照驼峰法

type MyBook struct{

Id int

Name string

Author string

Image string

CreatedAt time.Time

UpdatedAt time.Time

}

func (mybook *MyBook) TableName() string {

return "book"

}

字段名可以通过注解实现自定义映射

Name string `orm:"column(user_name)"`

工具类的字段可以通过 orm:"-" 实现类似 Transient的效果

//该字段只是在代码中用,但是不需要映射到数据库中

Chapters []*Chapter `orm:"-"`

表名支持统一前缀

注意事项

支持类似于JPA的一对一、一对多、多对多查询,通过注解实现

支持SQL语句输出的功能 (orm.Debug = true),建议生产环境关闭

支持数据库连接池的配置 orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", maxIdle, maxConn)

beego直接通过SQL操作数据库,O.Raw(sql1).Exec() 直接执行sql语句

sql1 := "insert into user (name,profile_id) values ('ming',1),('hua',2),('qiang',3);"

sql2 := "insert into profile (age) values (16),(14),(15);"

//使用Raw().Exec()执行sql

O.Raw(sql1).Exec()

O.Raw(sql2).Exec()

安装bee项目生成工具

go get -u github.com/astaxie/beego

go get -u github.com/beego/bee

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值