39--go语言学习之数据库操作orm学习

  • xorm学习
  1.   文档
     GitHub - go-xorm/xorm: Simple and Powerful ORM for Go, support mysql,postgres,tidb,sqlite3,mssql,oracle, Moved to https://gitea.com/xorm/xorm
     
  2.  依赖
    go get github.com/go-xorm/xorm
  3.  代码
     
    package main
    
    import (
    	"fmt"
    	"time"
    
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/go-xorm/xorm"
    )
    
    // 定义结构体与数据库表名和字段对应
    type User struct {
    	Id         int64     `xorm:"pk autoincr" json:"id"`     // 设置主键 且自增
    	Name       string    `xorm:"unique" json:"name"`        // 添加唯一索引
    	Age        int       `json:"age"`                       // 默认对应数据库字段age
    	Birthday   string    `xorm:"birth" json:"birthday"`     // 设置数据库字段birth
    	CreateTime time.Time `xorm:"created" json:"createTime"` // created:创建时自动更新时间
    	UpdateTime time.Time `xorm:"updated" json:"createTime"` // updated:修改时自动更新时间
    }
    
    var x *xorm.Engine
    
    func init() {
    	// 链接数据库
    	sqlAddr := "root:123456@tcp(127.0.0.1:3306)/mytest?charset=utf8&parseTime=true&loc=Local"
    	var err error
    	x, err = xorm.NewEngine("mysql", sqlAddr)
    	if err != nil {
    		fmt.Println("创建数据库链接失败")
    		return
    	}
    	// 同步数据库表信息  表或字段不存在则创建
    	err = x.Sync(new(User))
    	if err != nil {
    		fmt.Println("同步数据库信息失败")
    		return
    	}
    
    }
    func main() {
    	//add()
    	//find()
    	// Limit()
    	//edit()
    	delete()
    }
    
    // 删除
    func delete() {
    	// 根据id删除
    	//i, err := x.Id(1).Delete(&User{})
    	// 根据条件删除
    	i, err := x.Where("age=?", 19).Delete(&User{})
    	if err != nil {
    		fmt.Println("删除失败...", err.Error())
    	}
    	fmt.Println("删除成功...", i)
    }
    
    // 更新
    func edit() {
    	// 根据id更新
    	//i, err := x.Id(1).Update(&User{Name: "admin123", Age: 199})
    	// 根据条件更新
    	i, err := x.Where("id=?", 1).Update(&User{Name: "admin", Age: 17})
    	if err != nil {
    		fmt.Println("更新失败...", err.Error())
    	}
    	fmt.Println("更新成功...", i)
    }
    
    // 排序和分页
    func Limit() {
    	var user []User
    	// 根据年龄排序  并获取年龄最小的前2条数据
    	err := x.Asc("age").Limit(2, 0).Find(&user)
    	if err != nil {
    		fmt.Println("查询失败...", err.Error())
    	}
    	fmt.Println("查询成功...", user)
    }
    
    // 多条件查询
    func find() {
    	var user []User
    	// 查询birth=2021-10-13 并且  age>19
    	err := x.Where("birth=?", "2021-10-13").And("age>?", 19).Find(&user)
    	if err != nil {
    		fmt.Println("查询失败...", err.Error())
    	}
    	fmt.Println("查询成功...", user)
    }
    
    // 添加
    func add() {
    	user := User{Name: "lisi", Age: 18, Birthday: time.Now().String()}
    	i, e := x.Insert(user)
    	if e != nil {
    		fmt.Println("添加失败...", e.Error())
    	}
    	fmt.Println("添加成功...", i)
    }
    
  4.  测试
     
     
  •  gorm学习
     
     
  1.  文档
    https://github.com/go-gorm/gorm
    https://gorm.io/docs/index.html
  2.  依赖
    go get -u gorm.io/gorm
    go get -u gorm.io/driver/mysql
    
  3.  代码
     
     
    package main
    
    import (
    	"fmt"
    	"time"
    
    	"gorm.io/driver/mysql"
    
    	"gorm.io/gorm"
    )
    
    // 定义结构体与数据库表名和字段对应  注意结构体Student对应的数据库表名为students
    // 需要提前在数据库创建好students表
    type Student struct {
    	Id         int64     `gorm:"primaryKey;autoIncrement" json:"id"` // 设置主键 且自增
    	Name       string    `gorm:"unique;not null" json:"name"`        // 添加唯一索引
    	Age        int       `json:"age"`
    	Class      string    `gorm:"type:varchar(20);" json:"class"`
    	CreateTime time.Time `json:"createTime"`
    	UpdateTime time.Time `json:"createTime"`
    }
    
    var db *gorm.DB
    
    func init() {
    	// 创建数据库链接
    	sqlAddr := "root:123456@tcp(127.0.0.1:3306)/mytest?charset=utf8mb4&parseTime=true&loc=Local"
    	var err error
    	db, err = gorm.Open(mysql.Open(sqlAddr), &gorm.Config{})
    	if err != nil {
    		fmt.Println("链接数据库失败", err.Error())
    		return
    	}
    }
    func main() {
    	// add()
    	find()
    	// list
    	// count()
    
    	//edit()
    	//delete()
    }
    
    // 更新
    func delete() {
    	// 根据id更新
    	tx := db.Where("age=?", 7).Delete(&Student{})
    	if tx.Error != nil {
    		fmt.Println("更新失败...", tx.Error.Error())
    	}
    	fmt.Println("更新成功...", tx.RowsAffected)
    }
    
    // 更新
    func edit() {
    	// 根据id更新
    	s := Student{Name: "edit123", Age: 7}
    	tx := db.Model(&Student{}).Where("age=?", 8).Updates(&s)
    	if tx.Error != nil {
    		fmt.Println("更新失败...", tx.Error.Error())
    	}
    	fmt.Println("更新成功...", tx.RowsAffected)
    }
    
    // 统计
    func count() {
    	var count int64
    	tx := db.Model(&Student{}).Where("class=?", "一年级").Count(&count)
    	if tx.Error != nil {
    		fmt.Println("查询失败...", tx.Error.Error())
    	}
    	fmt.Println("查询成功...", count)
    }
    
    // 多条
    func list() {
    	s := make([]Student, 10)
    	tx := db.Where("class=?", "二年级").Find(&s)
    	if tx.Error != nil {
    		fmt.Println("查询失败...", tx.Error.Error())
    	}
    	fmt.Println("查询成功...", s)
    }
    
    // 条件查询
    func find() {
    	student := Student{}
    	tx := db.Where("name=?", "lisi").First(&student)
    	if tx.Error != nil {
    		fmt.Println("查询失败...", tx.Error.Error())
    		return
    	}
    	fmt.Println("查询成功...", student)
    }
    
    // 添加
    func add() {
    	student := Student{Name: "zhangsan12", Age: 18, Class: "二年级", CreateTime: time.Now(), UpdateTime: time.Now()}
    	tx := db.Create(&student)
    	if tx.RowsAffected == 0 {
    		fmt.Println("添加失败...")
    		return
    	}
    	fmt.Println("添加成功...", tx.RowsAffected)
    }
    

     
  4. 表结构 

     
  5.  测试
     
     


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值