Beegoフレームワークorm基本的な使用1

1.基本構成

  • 1.依存関係をインストールします

    // orm链接库
    go get github.com/astaxie/beego/orm
    // 使用的数据库
    go get github.com/go-sql-driver/mysql
    
  • 2.データベースに接続するためのメソッドをmain.goファイルinit追加します

    func init()  {
          
          
    	orm.RegisterDriver("mysql", orm.DRMySQL)
      // default必须要有,表示连接的数据库别名,可能是多个
    	orm.RegisterDataBase("default", "mysql", "用户名:密码@tcp(localhost:3306)/数据库名?charset=utf8mb4&parseTime=True&loc=Local")
    }
    
  • 3.そのmain.goようなパッケージをファイルに追加する必要があることに注意してください。そうしないと、エラーが報告されます。

    import (
    	...
    	_ "github.com/go-sql-driver/mysql"
    )
    
  • 4.データモデルを定義します

    package models
    
    import "github.com/astaxie/beego/orm"
    
    type User struct {
          
          
    	Id int
    	Name string
    	Age int
    	Address string
    }
    
    //自定义表名,可以不写的会默认以下划线来分割驼峰命名的
    func (self *User) TableName () string  {
          
          
    	return "user"
    }
    
    func init() {
          
          
    	orm.RegisterModel(new(User))
    }
    
  • 5.データベースとuserデータテーブルを手動で作成します

  • 6.コントローラーのデータモデルを使用してデータを挿入します

    package ormDemo
    
    import (
    	"demo01/models"
    	"fmt"
    	"github.com/astaxie/beego"
    	"github.com/astaxie/beego/orm"
    )
    
    type UserController struct {
          
          
    	beego.Controller
    }
    
    func (self *UserController) Get() {
          
          
    	o := orm.NewOrm()
    	//默认使用default,这里可以不用写
    	//o.Using("default")
    	user := models.User{
          
          Name: "张三", Age: 20, Address: "广东"}
    	id, err := o.Insert(&user)
    	fmt.Println(id)
    	fmt.Println(err)
    	self.TplName = "orm.html"
    }
    
  • 7.データベースデータを表示する

2.モデルに関するいくつかの知識の補足

  • 1.デフォルトのテーブル名について

    • 最初の大文字に加えて、大文字に遭遇すると_が増加し、元の名前の下線が保持されます
    • カスタムテーブル名は書き換えTableName方法です
  • 2.カスタムフィールド名

    type User struct {
          
          
    	Id int
    	Name string `orm:"column(user_name)"` // 在go代码中用的是Name,在数据库存的是user_name
    	Age int
    	Address string
    }
    
  • 3.パラメータを設定します

    type User struct {
          
          
    	Id int `orm:"pk" "auto"` // 设置主键且自动增长
    	...
    }
    
  • 4.フィールドを無視する

    type User struct {
          
          
    	...
    	Address string `orm:"-"`
    }
    
  • 5.比較的完全なモデル

    /**
    	注意beego中创建的表都是非空的,除非自己先指定null
     */
    type User struct {
          
          
    	Id int `json:"id" orm:"pk;auto;description(主键id)"` // 设置主键且自动增长
    	Name string `json:"name" orm:"index;unique;size(50);description(用户名)"` // 唯一的且加了索引的
    	Age int `json:"age" orm:"default(0);description(年龄)"`
    	Salary float64 `json:"price" orm:"digits(12);decimals(2);description(薪资)"`
    	Address string `json:"address" orm:"size(100);null;column(address);description(地址)"` // 可以为空
    	// 创建时间字段
    	CreateAt *time.Time `json:"create_at" orm:"auto_now_add;type(datetime);description(创建时间)"`
    	UpdateAt *time.Time `json:"update_at" orm:"auto_now;type(datetime);description(更新时间)"`
    }
    
    

3、データを挿入

  • 1.Insertデータの簡単な挿入を使用します

    func (self *UserController) Get() {
          
          
    	o := orm.NewOrm()
    	//默认使用default,这里可以不用写
    	//o.Using("default")
    	user := models.User{
          
          Name: "张三", Age: 20, Address: "广东"}
    	id, err := o.Insert(&user)
    	fmt.Println(id)
    	fmt.Println(err)
    	self.TplName = "orm.html"
    }
    
  • 2.InsertMulti複数のデータ挿入するために使用します

    func (self *UserController) Get() {
          
          
    	// 插入多条数据
    	o := orm.NewOrm()
    	users := []models.User{
          
          {
          
          Name: "李四", Age: 20, Address: "湖南"}, {
          
          Name: "王五", Age: 30, Address: "广西"}}
    	//InsertMulti第一个参数表示一次可以插入100条数据
    	count, err := o.InsertMulti(100, &users)
    	fmt.Println(count)
    	fmt.Println(err)
    
    	self.TplName = "orm.html"
    }
    

4、データを削除します

  • 1.フィールドに従って削除します

    func (self *UserController) Get() {
          
          
    	//根据字段删除数据
    	o := orm.NewOrm()
    	user := models.User{
          
          Name: "水痕"}
    	num, err := o.Delete(&user, "Name")
    	fmt.Println(num, err)
    	self.TplName = "orm.html"
    }
    
  • 2.に従ってID削除します

    func (self *UserController) Get() {
          
          
    	//根据字段删除数据
    	o := orm.NewOrm()
    	user := models.User{
          
          Id: 1}
      // 根据ID删除可以不用写这个
    	num, err := o.Delete(&user)
    	fmt.Println(num, err)
    	self.TplName = "orm.html"
    }
    

5、データを更新

  • 1.データを直接更新します

    func (self *UserController) Get() {
          
          
    	//更新数据
    	o := orm.NewOrm()
      // 先查找到数据
    	user := models.User{
          
          Name: "张三"}
    	err := o.Read(&user, "Name")
    	if err == nil {
          
          
        // 修改了什么就更新什么
    		user.Name = "哈哈"
    		user.Address = "南山"
    		num, err := o.Update(&user)
    		print("受影响的行数", num)
    		fmt.Println(err)
    	}
    	self.TplName = "orm.html"
    }
    
  • 2.更新されたフィールドを指定します

    func (self *UserController) Get() {
          
          
    	//更新数据
    	o := orm.NewOrm()
    	user := models.User{
          
          Name: "张三"}
    	err := o.Read(&user, "Name")
    	if err == nil {
          
          
    		user.Name = "哈哈11"
    		user.Address = "南山"
        // 只更新Name字段,不更新Address字段
    		num, err := o.Update(&user, "Name")
    		print("受影响的行数", num)
    		fmt.Println(err)
    	}
    	self.TplName = "orm.html"
    }
    

6、クエリデータ

  • 1.フィールドにRead基づいてidデータクエリするために使用ます

    func (self *UserController) Get() {
          
          
    	// 根据id查询字段
    	o := orm.NewOrm()
    	user := models.User{
          
          Id: 1}
    	o.Read(&user)
    	fmt.Println("查询到的数据", user)
    
    	self.TplName = "orm.html"
    }
    
  • 2.指定されたフィールドに従ってクエリを実行します

    func (self *UserController) Get() {
          
          
    	//根据别的字段去查询
    	o := orm.NewOrm()
    	user := models.User{
          
          Name: "张三"}
    	o.Read(&user, "Name")
    	fmt.Println("一个字段查询", user)
    
    	user1 := models.User{
          
          Name: "王五", Address: "广西"}
    	o.Read(&user1, "Name", "Address")
    	fmt.Println("多个字段查询", user1)
    	self.TplName = "orm.html"
    }
    
  • 3.クエリと作成(クエリを実行するときに、データベースがない場合はデータベースを作成し、データベースがある場合はクエリを実行します)

    func (self *UserController) Get() {
          
          
    	//查询和创建
    	// 查询一个已经有的数据
    	o := orm.NewOrm()
    	user := models.User{
          
          Name: "王五", Age: 30, Address: "广西"}
    	is_new, id, err := o.ReadOrCreate(&user, "Name", "Age", "Address")
    	fmt.Println("第一次结果", is_new, id, err)
    	//查询一个没有的数据
    	user1 := models.User{
          
          Name: "王二", Age: 30, Address: "湖北"}
    	is_new1, id1, err1 := o.ReadOrCreate(&user1, "Name", "Age", "Address")
    	fmt.Println("第二次结果", is_new1, id1, err1)
    	self.TplName = "orm.html"
    }
    // 结果
    // 第一次结果 false 3 <nil>
    // 第二次结果 true 4 <nil>
    

セブン、コマンドを使用する途中

  • 1.main.goコマンドを開いてテーブルを作成します

    func main() {
          
          
    	//全局开启打印sql模式
    	orm.Debug = true
    	//开始数据迁移
    	orm.RunCommand()
    	beego.Run()
    }
    
  • 2.モデルを作成するときは、最初に登録する必要があります

    // 模型中
    func init()  {
          
          
    	orm.RegisterModel(new(User))
    }
    
  • 3.コマンドを実行します

    go run main.go orm // 查看有什么命令
    go run mian.go orm syncdb // 将数据模型同步到数据库
    
  • ormについてのちょっとした質問

    • 現在、データテーブルの同期は1回のみです。モデルにフィールドを追加または削除すると、データベースに同期できなくなります。これは設計の欠如であり、将来的に改善される可能性があります。
    • 個人的には、この段階ではまだテーブルの手動作成を使用し、データテーブルに従ってモデルを作成することをお勧めします

おすすめ

転載: blog.csdn.net/kuangshp128/article/details/109383515
おすすめ