xorm的使用(三)数据库操作
简单的罗列了一些curd的小案例 具体的更多的用法还是得要自己去参考xorm的操作手册,这里给大家提供一下xorm的操作手册地址:www.kancloud.cn/xormplus/xorm/1670...
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
)
func main(){
engine, err := xorm.NewEngine("mysql", "root:root@/elmcms?charset=utf8")
if err != nil {
panic(err.Error())
}
//条件查询
//1.ID查询
//首先你得要有一个结构体来存放查询出来的数据
var person PersonTable
//select * from person_table where id = 1 并且get只获取到一条记录哈!
engine.Id(1).Get(&person)
fmt.Println(person)
fmt.Println("----------------------------")
//2.where多条件查询
//首先你得要有一个结构体来存放查询出来的数据
var person1 PersonTable
//select * from person_table where person_age = 26 and person_sex = 2
engine.Where(" person_age = ? and person_sex = ?", 30, 1).Get(&person1)
fmt.Println(person1)
fmt.Println("----------------------------")
//3.and条件查询
//首先你得要有一个结构体来存放查询出来的数据
var persons []PersonTable
//select * from person_table where person_age = 26 and person_sex = 2 find 会返回一条或者多条记录
err = engine.Where(" person_age = ?", 30).And("person_sex = ?", 1).Find(&persons)
if err != nil {
panic(err.Error())
}
fmt.Println(persons)
fmt.Println("----------------------------")
//4.or条件查询
var personArr []PersonTable
//select * from person_table where person_age = 26 or person_sex = 1
err = engine.Where(" person_age = ?", 26).Or("person_sex = ?", 1).Find(&personArr)
if err != nil {
panic(err.Error())
}
fmt.Println(personArr)
fmt.Println("----------------------------")
//5.原生sql语句查询 支持like
var personNative []PersonTable
//执行原生的sql语句
err = engine.SQL(" select * from person_table where person_name like '%i%' ").Find(&personNative)
if err != nil {
panic(err.Error())
}
fmt.Println(personNative)
fmt.Println("----------------------------")
//6.排序条件查询
var personOrderBy []PersonTable
//select * from person_table orderby person_age 升序排列
//engine.OrderBy(" person_age ").Find(&personsOrderBy) 不写desc默认就是asc升序排序
err = engine.OrderBy(" person_age desc ").Find(&personOrderBy)
if err != nil {
panic(err.Error())
}
fmt.Println(personOrderBy)
fmt.Println("----------------------------111")
//7.查询特定字段
var personCols []PersonTable
engine.Cols("person_name", "person_age").Find(&personCols)
for _,col := range personCols {
fmt.Println(col)
}
//fmt.Println(personCols)
fmt.Println("----------------------------")
//增加记录
//插入你得先有数据 弄到结构体里面去
personInsert := PersonTable{
PersonName: "wahaha",
PersonAge: 40,
PersonSex: 10,
}
rowNum, err := engine.Insert(&personInsert)
fmt.Println(rowNum) //rowNum表示受影响的行数
fmt.Println("----------------------------")
//删除操作
personDelete := PersonTable{}
//根据id删除
rowNum1, err := engine.Id(4).Delete(&personDelete)
fmt.Println(rowNum1) //rowNum1也是表示受影响的行数
fmt.Println("----------------------------")
//更新操作
personUpdate := PersonTable{
PersonName: "胡绍良",
PersonAge: 30,
PersonSex: 1,
}
rowNum2, err := engine.Id(1).Update(&personUpdate)
fmt.Println(rowNum2) // rowNum2也是表示受影响的行数
fmt.Println("----------------------------")
//统计功能count
count, err := engine.Count(new(PersonTable))
fmt.Println("persontable表总记录数:",count)
//事务操作
personsArray := []PersonTable{
PersonTable{
PersonName: "Jack",
PersonAge: 28,
PersonSex: 1,
},
PersonTable{
PersonName: "Mali",
PersonAge: 28,
PersonSex: 1,
},
PersonTable{
PersonName: "Ruby",
PersonAge: 28,
PersonSex: 1,
},
}
session := engine.NewSession()
session.Begin()
for i:=0;i<len(personsArray);i++{
_, err = session.Insert(personsArray[i])
if err != nil {
session.Rollback()
session.Close()
}
}
err = session.Commit()
session.Close()
if err != nil {
panic(err.Error())
}
}
//人员结构表
type PersonTable struct {
Id int64 `xorm:"pk autoincr"`
PersonName string `xorm:"varchar(24)"`
PersonAge int `xorm:"int default 0"`
PersonSex int `xorm:"notnull"`
City CityTable `xorm:"-"`
}
type CityTable struct {
CityName string
CityLongitude float32
CityLatitude float32
}