go-xorm连接

package main

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

func MysqlDbContent() {
    //数据库基本信息
    var (
       userName  string = "root"
       password  string = "12345678"
       ipAddress string = "127.0.0.1"
       port      int    = 3306
       dbName    string = "dt"
       charset   string = "utf8mb4"
    )
    //构建数据库连接信息
    dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", userName, password, ipAddress, port, dbName, charset)

    engine, err := xorm.NewEngine("mysql", dataSourceName)
    if err != nil {
       fmt.Println("数据库连接失败:")
    }
    fmt.Println("数据库连接成功")

    type User struct {
       Id      int64
       Name    string
       Avatar  string `xorm:"varchar(200)"`
       Age     int
       Passwd  string    `xorm:"varchar(200)"`
       Created time.Time `xorm:"created"`
       Updated time.Time `xorm:"updated"`
    }

    err = engine.Sync(new(User))
    if err != nil {
       fmt.Println("表结构同步失败")
    }
    fmt.Println("表结构同步成功")

}

数据库增删改查

package main

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

func MysqlDbContent() {
	//数据库基本信息
	var (
		userName  string = "root"
		password  string = "12345678"
		ipAddress string = "127.0.0.1"
		port      int    = 3306
		dbName    string = "dt"
		charset   string = "utf8mb4"
	)
	//构建数据库连接信息
	dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", userName, password, ipAddress, port, dbName, charset)

	engine, err := xorm.NewEngine("mysql", dataSourceName)
	if err != nil {
		fmt.Println("数据库连接失败:")
	}
	fmt.Println("数据库连接成功")

	type User struct {
		Id      int64
		Name    string
		Avatar  string `xorm:"varchar(200)"`
		Age     int
		Passwd  string    `xorm:"varchar(200)"`
		Created time.Time `xorm:"created"`
		Updated time.Time `xorm:"updated"`
	}

	err = engine.Sync(new(User))
	if err != nil {
		fmt.Println("表结构同步失败")
	}
	fmt.Println("表结构同步成功")

	//插入数据 插入 对象,返回值:受影响行数
	user1 := User{Id: 1001, Name: "张三1", Avatar: "http://www.baidu.com", Age: 20, Passwd: "12345678", Created: time.Now(), Updated: time.Now()}
	user2 := User{Id: 1002, Name: "张三2", Avatar: "http://www.baidu.com", Age: 20, Passwd: "12345678", Created: time.Now(), Updated: time.Now()}
	user3 := User{Id: 1003, Name: "张三3", Avatar: "http://www.baidu.com", Age: 20, Passwd: "12345678", Created: time.Now(), Updated: time.Now()}
	insert, _ := engine.Insert(&user1, &user2, &user3)
	if insert > 1 {
		fmt.Println("数据插入成功")
	}

	var users []User
	users = append(users, User{Id: 1004, Name: "张1", Avatar: "http://www.baidu.com", Age: 20, Passwd: "12345678", Created: time.Now(), Updated: time.Now()})
	users = append(users, User{Id: 1005, Name: "张2", Avatar: "http://www.baidu.com", Age: 20, Passwd: "12345678", Created: time.Now(), Updated: time.Now()})
	users = append(users, User{Id: 1006, Name: "张3", Avatar: "http://www.baidu.com", Age: 20, Passwd: "12345678", Created: time.Now(), Updated: time.Now()})
	//批量插入数据  Insert
	i, err := engine.Insert(&users)
	if i > 1 {
		fmt.Println("批量数据插入成功")
	}
	//Update
	//查询id=1000的数据并修改name字段
	user := User{Name: "laozhang"}
	update, err := engine.ID(1000).Update(&user)
	fmt.Println(update)

	//Delete
	user1 = User{Name: "张1"}
	i2, _ := engine.ID(1004).Delete(&user1)
	fmt.Println(i2)

	engine.Exec("update user set age = ? where id = ?", 10, 1003)

	//查询
	results, _ := engine.Query("select * from user")
	fmt.Println(results)
	results2, _ := engine.QueryString("select * from user")
	fmt.Println(results2)
	results3, _ := engine.QueryInterface("select * from user")
	fmt.Println(results3)

	//Get  select * from user limit 1
	user11 := User{}
	engine.Get(&user11)
	fmt.Println(user11)

	//指定条件查询用户
	user12 := User{Name: "张1"}
	engine.Where("name = ?", user1.Name).Desc("id").Get(&user12)
	fmt.Println(user12)

	//获取指定字段的值
	var name string
	engine.Table(&user).Where("id = ?", 1002).Cols("name").Get(&name)
	fmt.Println(name)

	//Find 查询多条记录
	var users112 []User
	engine.Where("password=12345678").And("age=20").Limit(10, 0).Find(&users112)
	fmt.Println(users112)

	//Count 统计记录数
	user113 := User{Passwd: "12345678"}
	count, _ := engine.Count(&user113)
	fmt.Println(count)

	//Iterate 和 Rows 根据条件遍历数据库,可以有两种方式: Iterate and Rows
	engine.Iterate(&User{Passwd: "12345678"}, func(idx int, bean interface{}) error {
		user := bean.(*User)
		fmt.Println(user)
		return nil
	})
	rows, _ := engine.Rows(&User{Passwd: "12345678"})
	defer rows.Close()
	userBean := new(User)
	for rows.Next() {
		rows.Scan(userBean)
		fmt.Println(userBean)

	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/946836.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么?二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提: Agents 8.9.0 放入 …

闻泰科技涨停-操盘训练营实战-选股和操作技术解密

如上图,闻泰科技,今日涨停,这是前两天分享布局的一个潜伏短线的标的。 选股思路: 1.主图指标三条智能辅助线粘合聚拢,即将选择方向 2.上图红色框住部分,在三线聚拢位置,震荡筑底,…

计算机体系结构期末复习3:GPU架构及控制流问题

目录 一、GPU设计思路 1.简化流水线、增加核数 2.单指令多线程(SIMT) 3.同时驻留大量线程 4.总思路:多线程单指令多线程 二、GPU的控制流问题 1.什么是控制流问题 2.怎么应对分支分歧 一、GPU设计思路 1.简化流水线、增加核数 2.单指…

面试241228

面试可参考 1、cas的概念 2、AQS的概念 3、redis的数据结构 使用场景 不熟 4、redis list 扩容流程 5、dubbo 怎么进行服务注册和调用,6、dubbo 预热 7如何解决cos上传的安全问题kafka的高并发高吞吐的原因ES倒排索引的原理 spring的 bean的 二级缓存和三级缓存 spr…

2024 年发布的 Android AI 手机都有什么功能?

大家好,我是拭心。 2024 年是 AI 快速发展的一年,这一年 AI 再获诺贝尔奖,微软/苹果/谷歌等巨头纷纷拥抱 AI,多款强大的 AI 手机进入我们的生活。 今年全球 16% 的智能手机出货量为 AI 手机,到 2028 年,这…

SimForge HSF 案例分享|复杂仿真应用定制——UAVSim无人机仿真APP(技术篇)

导读 「神工坊」核心技术——「SimForge HSF高性能数值模拟引擎」支持工程计算应用的快速开发、自动并行,以及多域耦合、AI求解加速,目前已实现航发整机数值模拟等多个系统级高保真数值模拟应用落地,支持10亿阶、100w核心量级的高效求解。其低…

Windows 下安装 triton 教程

目录 背景解决方法方法一:(治标不治本)方法二:(triton-windows)- 安装 MSVC 和 Windows SDK- vcredist 安装- whl 安装- 验证 背景 triton 目前官方只有Linux 版本,若未安装,则会出…

Kali 自动化换源脚本编写与使用

1. 背景与需求 在使用 Kali Linux 的过程中,软件源的配置对系统的更新与软件安装速度至关重要。 Kali 的默认官方源提供了安全且最新的软件包,但有时由于网络条件或地理位置的限制,使用官方源可能会出现速度较慢的问题。 为了解决这一问题&a…

Ajax数据爬取

有时我们用requests 抓取页面得到的结果,可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,而使用requests 得到的结果中并没有这些数据。这是因为 requests 获取的都是原始 HTML 文档,而浏览器中的页面是JavaScript 处理…

基于Docker的ETCD分布式集群

目录 1. 说明 2. 配置表 3. 步骤 3.1 放行端口 3.2 docker-compose 文件 3.3 部署到3台服务器 3.4 相关命令 4. 参考 1. 说明 - 以docker容器方式实现ETCD分布式集群,为其他项目提供支持,经过反复试验成功部署(网上资料大都过期或部署失败)。 -…

CUDA与Microsoft Visual Studio不兼容问题

简介:在安装一些 python库时,涉及到第三方库(特别是需要引用 C 代码)时,通常的安装方式会涉及到编译过程,通常称为"源代码安装"(source installation),或是 “…

Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】

随着城市化进程的快速推进,城市高层建筑不断增多,对建筑质量的要求也在不断提高。建筑外墙检测,如平整度和垂直度检测,是衡量建筑质量的重要指标之一。传统人工检测方法不仅操作繁琐、效率低下,还难以全面反映墙体的真…

python爬虫——爬取全年天气数据并做可视化分析

一、主题页面的结构与特征分析 1.主题页面的结构与特征分析 目标内容界面: 2. Htmls 页面解析 3.节点查找方法与遍历方法 查找方法:find(): 查找第一个匹配到的节点。find_all(): 查找所有匹配到的节点,并返回一个…

MATLAB程序转C# WPF,dll集成,混合编程

工作中遇到一个需求,有一部分算法的代码需要MATLAB来进行处理,而最后需要集成到C#中的wpf项目中去,选择灵活性更高的dll,去进行集成。(可以简单理解为:将MATLAB的函数,变为C#中类的函数成员&…

Ubuntu24.04最新版本安装详细教程

Ubuntu 24.04 LTS发布说明 推荐的系统配置要求: 双核2 GHz处理器或更高 4 GB系统内存 25 GB磁盘存储空间 可访问的互联网 光驱或USB安装介质 Ubuntu 24.04官方下载网址:https://cn.ubuntu.com/download/desktop 04. Ubuntu 22.04(创建虚拟机方式一) 4…

【YOLO算法改进】ALSS-YOLO:无人机热红外图像|野生动物小目标检测

目录 论文信息 论文创新点 1.自适应轻量通道分割和洗牌(ALSS)模块 2.轻量坐标注意力(LCA)模块 3.单通道聚焦模块 4.FineSIOU损失函数 摘要 架构设计 轻量高效网络架构 - ALSS模块 LCA模块 单通道聚焦模块 损失函数优…

【PDF物流单据提取明细】批量PDF提取多个区域内容导出表格或用区域内容对文件改名,批量提取PDF物流单据单号及明细导出表格并改名的技术难点及小节

相关阅读及下载: PDF电子物流单据: 批量PDF提取多个区域局部内容重命名PDF或者将PDF多个局部内容导出表格,具体使用步骤教程和实际应用场景的说明演示https://mp.weixin.qq.com/s/uCvqHAzKglfr40YPO_SyNg?token720634989&langzh_CN扫描…

MySQL数据库笔记——主从复制

大家好,这里是Good Note,关注 公主号:Goodnote,本文详细介绍 MySQL的主从复制,从原理到配置再到同步过程。 文章目录 简介核心组件主从复制的原理作用主从复制的线程模型主从复制的模式形式复制的方式设计复制机制主从…

大数据技术-Hadoop(三)Mapreduce的介绍与使用

目录 一、概念和定义 二、WordCount案例 1、WordCountMapper 2、WordCountReducer 3、WordCountDriver 三、序列化 1、为什么序列化 2、为什么不用Java的序列化 3、Hadoop序列化特点: 4、自定义bean对象实现序列化接口(Writable) 4…

从零开始学TiDB(7)TiDB 的MPP架构概述

MPP架构介绍: 如图,TiDB Server 作为协调者,首先 TiDB Server 会把每个TiFlash 拥有的region 会在TiFlash上做交换,让表连接在一个TiFlash上。另外 TiFlash会作为计算节点,每个TiFlash都负责数据交换,表连接…