Go Web基础--beego ORM使用

Go WEB基础–beego ORM使用

本实例以sqlite3作为数据库

1.驱动声明、注册与数据库结构初始化

package models

import (
    "os"
    "path"
    "time"

    "github.com/Unknwon/com"
    "github.com/astaxie/beego/orm"
    _ "github.com/mattn/go-sqlite3"
)

const (
    _DB_NAME        = "data/beeblog.db"
    _SQLITE3_DRIVER = "sqlite3"
)

/**
* 首字母大写代表导出,对于orm这种是哟个反射操作如下数据i结构的,定义结构时务必首字母大写
* `orm:"index"` 代表需要创建索引
 */
type Category struct {
    Id              int64
    Title           string
    Created         time.Time `orm:"index"`
    Views           int64     `orm:"index"`
    TopicTime       time.Time `orm:"index"`
    TopicCount      int64
    TopicLastUserId int64
}

type Topic struct {
    Id              int64
    Uid             int64
    Title           string
    Content         string `orm:"size(5000)"`
    Attachment      string
    Created         time.Time `orm:"index"`
    Updated         time.Time `orm:"index"`
    Views           int64     `orm:"index"`
    Author          string
    ReplyTime       time.Time `orm:"index"`
    ReplyCount      int64
    ReplyLastUserId int64
}

func RegisterDB() {
    // 检查文件是否存在
    if !com.IsExist(_DB_NAME) {
        // 不存在的话先创建目录
        dbPath := path.Dir(_DB_NAME)
        if err := os.MkdirAll(dbPath, os.ModePerm); err == nil {
            // 成功的话再创建文件
            os.Create(_DB_NAME)
        } else {
            panic("Failed to create path " + dbPath)
        }
    }

    orm.RegisterModel(new(Category), new(Topic))
    orm.RegisterDriver(_SQLITE3_DRIVER, orm.DRSqlite)
    // 必须强制存在一个数据default
    orm.RegisterDataBase("default", _SQLITE3_DRIVER, _DB_NAME, 10)
}

// 插入分类
func AddCategory(name string) error {
    o := orm.NewOrm()

    category := &Category{Title: name, Created: time.Now()}

    qs := o.QueryTable("category")
    bExist := qs.Filter("title", name).Exist()

    if bExist {
        err := fmt.Errorf("Already Exist !")
        return err
    }

    if _, err := o.Insert(category); err != nil {
        return err
    }

    return nil
}

// 查询全部分类
func GetAllCategories() ([]*Category, error) {
    o := orm.NewOrm()

    categories := make([]*Category, 0)

    qs := o.QueryTable("category")

    _, err := qs.All(&categories)
    return categories, err
}

// 删除分类
func DelCategory(id string) error {
    idInt, err := strconv.ParseInt(id, 10, 64)
    if err != nil {
        return err
    }

    o := orm.NewOrm()

    qs := o.QueryTable("category")
    if _, err := qs.Filter("Id", idInt).Delete(); err != nil {
        return err
    }

    return nil
}

2.main包中调用上述注册函数,并进行简要设置

package main

import (
    "beeblog/models"
    "github.com/astaxie/beego/orm"
)

func main() {
    // 开启orm debug开关
    orm.Debug = true
    // 强制自动建表,第二个参数设置为false表示如果表已存在,不需要删除重建
    orm.RunSyncdb("default", false, true)
}

func init() {
    models.RegisterDB()
}

3.运行后,使用navicat连接可看到数据库已ready

你可能感兴趣的:(golang)