首页 > 其他分享 >golang之xorm简单使用

golang之xorm简单使用

时间:2023-10-21 14:11:44浏览次数:30  
标签:return nil err pointInfo xe golang 简单 xorm id

go get github.com/go-xorm/xorm
package main

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/go-xorm/xorm"
)

type PointInfo struct {
    Id         int64  `xorm:"pk autoincr"`
    ProductKey string `xorm:"product_key"`
    DeviceName string `xorm:"device_name"`
    PointId    string `xorm:"point_id"`
}

const (
    UserName = "root"
    PassWord = "root"
    Host     = "127.0.0.1"
    Port     = "33306"
    Database = "test"
    Charset  = "utf8"
)

var xe *xorm.Engine

func init() {
    sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", UserName, PassWord, Host, Port, Database, Charset)

    // 1、创建数据库引擎
    var err error
    xe, err = xorm.NewEngine("mysql", sqlStr)
    if err != nil {
        fmt.Println("数据库连接失败:", err)
        return
    }
    if xe == nil {
        fmt.Println("引擎初始化异常")
        return
    }

    // 2、创建或者同步表(名称为Stu)
    err = xe.Sync(new(PointInfo))
    if err != nil {
        fmt.Println("数据表同步失败:", err)
    }
}

func main() {
    session := xe.NewSession()
    defer xe.Close()
    defer session.Close()
    err := session.Begin()
    if err != nil {
        return
    }

    id, err := insert()
    if err != nil {
        _ = session.Rollback()
        return
    }
    err = query(id)
    if err != nil {
        _ = session.Rollback()
        return
    }
    err = queryList("device0", "point0")
    if err != nil {
        _ = session.Rollback()
        return
    }
    err = queryByPage("device0")
    if err != nil {
        _ = session.Rollback()
        return
    }
    err = update(id)
    if err != nil {
        _ = session.Rollback()
        return
    }
    err = deleteOne(id)
    if err != nil {
        _ = session.Rollback()
        return
    }
    err = session.Commit()
    if err != nil {
        return
    }
}

func insert() (id int64, err error) {
    pointInfo := new(PointInfo)
    pointInfo.ProductKey = "product1"
    pointInfo.DeviceName = "device1"
    pointInfo.PointId = "point1"

    affected, err := xe.InsertOne(pointInfo)
    if err != nil {
        return 0, err
    }
    fmt.Println(affected)
    return pointInfo.Id, nil
}

func query(id int64) (err error) {
    pointInfo := PointInfo{Id: id}
    get, err := xe.Get(&pointInfo)
    fmt.Println(get)
    return err
}

func queryList(deviceName string, pointId string) (err error) {
    list := make([]PointInfo, 0)
    err = xe.Where("device_name like ?", "%"+deviceName+"%").And("point_id like ?", "%"+pointId+"%").OrderBy("id").Find(&list)
    fmt.Println(list)
    return err
}

func queryByPage(deviceName string) (err error) {
    list := make([]PointInfo, 0)
    page := 0
    pageSize := 2
    limit := pageSize
    start := page * pageSize
    totalCount, err := xe.Where("device_name like ?", "%"+deviceName+"%").Limit(limit, start).FindAndCount(&list)
    fmt.Println(totalCount)
    fmt.Println(list)
    return err
}

func update(id int64) (err error) {
    pointInfo := new(PointInfo)
    pointInfo.ProductKey = "product2"
    pointInfo.DeviceName = "device2"
    pointInfo.PointId = "point2"
    affected, err := xe.Id(id).Update(pointInfo)
    fmt.Println(affected)
    return err
}

func deleteOne(id int64) (err error) {
    pointInfo := new(PointInfo)
    affected, err := xe.Id(id).Delete(pointInfo)
    fmt.Println(affected)
    return err
}

标签:return,nil,err,pointInfo,xe,golang,简单,xorm,id
From: https://www.cnblogs.com/qcy-blog/p/17778889.html

相关文章

  • jquery 简单的计时器
    简单的计时器jQuery只显示当前的时分秒,以下代码直接运行即可只显示当前的时分秒,以下代码直接运行即可关键起作用的就是这个函数setInterval(),第二个参数1000代码1000毫秒,也就是1秒,调用一下函数f(),id为timer里面的内容就被替换为最新的时间<!DOCTYPEhtml><html><head> <t......
  • 简单记录
    P1268树的重量先考虑二,三个,然后考虑四个,发现这种向外延展的思路.看树形背包发现动态开数组这个主要是针对N*W这种的开二维数组//如果你感觉这里的二维数组很难定义,可以先开一个一维的int数组,假设名字为pool;等到读入了N,W后再这样声明//但是,你甚至可以开ve......
  • 大话设计模式之简单工厂模式笔记
    简单工厂模式以实现加、减、乘、除的计算器功能为例初级代码:输入数字交互界面@SuppressWarnings("resource")publicstaticvoidmain(String[]args){System.out.println("**********************************************");System.out.println("......
  • 使用Grafana监控Nacos的简单过程
    使用Grafana监控Nacos的简单过程背景与kafka一样,想同期监控一下nacos.发现nacos跟minio等一样都有对应的metrics的暴露接口.所以这边简单使用一下.studyFromhttps://blog.csdn.net/qq_30718137/article/details/117471732https://grafana.com/grafana/dashboards/132......
  • Systemd集成Golang二进制程序
    首先新建Service,名称叫做server-apivim/lib/systemd/system/server-api.service[Unit]Description=serverapi[Service]Type=simpleRestart=alwaysRestartSec=5sExecStart=/root/go/mainWorkingDirectory=/root/go/[Install]WantedBy=multi-user.targetExecStart......
  • Golang泛型的简单使用
    packagemainimport"fmt"//MyInt~表示不仅支持int8,还支持int8的衍生类型int8A和int8BtypeMyIntinterface{ int|~int8|int16|int32|int64}funcgetMaxNum[TMyInt](a,bT)T{ ifa>b{ returna } returnb}//结构体typeAgeTinterface{......
  • 一个简单的时钟程序
    publicclassSample2{ privateColorblack=Display.getCurrent().getSystemColor(SWT.COLOR_BLACK); privateColorwhite=Display.getCurrent().getSystemColor(SWT.COLOR_WHITE); privateColoryellow=Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW);......
  • 使用 Flutter 制作一个简单的笑话生成器应用程序
    在本教程中,我将向您展示如何使用Flutter制作一个简单的笑话生成器应用程序对于这个项目,我们将从RESTfulAPI获取数据API的链接:随机笑话对于这个项目,我不会关注应用程序的UI,我们只会关注如何从URL中获取数据,以及如何显示它们在我们开始之前,您必须将此包添加到您的pubspec.y......
  • 让AutoMapper使用变得简单
     倘若在项目中真正要用的时候,我觉得还是应该对AutoMapper的方法进行一些整理,最好能够封装一下,这里我通过扩展方法的形式将其封装为AutoMapperHelper,这样以后使用AutoMapper就变的SOEASY了~ usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Data......
  • 以下是一个简单的HTML代码示例,演示如何实现分身份登录(用户登录和管理员登录)
    <!DOCTYPEhtml><html><head><title>分身份登录</title></head><body><h2>用户登录</h2><formaction="user_login.php"method="post"><labelfor="user_username"......