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

}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~