当前位置: 首页 > news >正文

网站的总体架构/深圳营销推广公司

网站的总体架构,深圳营销推广公司,深圳专业seo优化公司,销售型网站xorm介绍 官网:https://xorm.io/ git文档:https://github.com/go-xorm/xorm xorm 是一个 Go 语言的 ORM(对象关系映射)库,它提供了一种简单、高效的方式来将 Go 语言中的结构体与数据库表进行映射,并提供了…

xorm介绍

官网:https://xorm.io/
git文档:https://github.com/go-xorm/xorm
xorm 是一个 Go 语言的 ORM(对象关系映射)库,它提供了一种简单、高效的方式来将 Go 语言中的结构体与数据库表进行映射,并提供了丰富的功能来进行数据库操作。

以下是 xorm 的一些特点和功能:

  1. 支持多种数据库: xorm 支持多种数据库,包括 MySQL、PostgreSQL、SQLite、Microsoft SQL Server、Oracle 等。

  2. 灵活的映射规则: 通过标签(tag)或者方法可以自定义结构体字段和数据库表字段之间的映射关系。

  3. 自动建表: xorm 支持根据结构体自动创建数据库表,也可以根据数据库表自动生成相应的结构体。

  4. 链式操作: xorm 支持链式操作,可以方便地构建复杂的 SQL 查询。

  5. 事务支持: xorm 支持事务操作,可以确保多个数据库操作的原子性。

  6. 缓存支持: xorm 提供了缓存机制,可以提高数据库查询的性能。

  7. 监听器: xorm 支持事件监听器,可以监听数据库操作的各个阶段,并执行相应的逻辑。

  8. SQL 日志: xorm 提供了 SQL 日志功能,可以记录数据库操作的 SQL 语句和执行时间,方便调试和性能优化。

  9. 适用于 Web 开发: xorm 与 Beego、Gin 等常用的 Go Web 框架集成良好,可以方便地在 Web 应用中使用。

  10. 社区活跃: xorm 是一个开源项目,拥有活跃的开发者社区,提供了丰富的文档和示例。

使用 xorm 可以帮助开发人员简化数据库操作,并提高开发效率。它提供了许多便利的功能和灵活的配置选项,适用于各种规模的项目。

GO安装xorm

	go get xorm.io/xorm

xorm连接数据库

使用xorm.NewEngine(“mysql”, dbStr)连接数据库

package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""time""xorm.io/xorm"
)// 准备链接参数信息
var (userName  string = "root"passWord  string = "12345678"ipAddress string = "127.0.0.1"port      string = "3306"dbName    string = "xorm_test"charset   string = "utf8mb4"
)func main() {dbStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", userName,passWord,ipAddress,port,dbName,charset)engine, err := xorm.NewEngine("mysql", dbStr)if err != nil {fmt.Println(err)}
}

xorm同步结构体致数据表

通过engine.Sync将结构体生成表,执行后会在xorm_test中生成一张User表

func main() {dbStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", userName,passWord,ipAddress,port,dbName,charset)engine, err := xorm.NewEngine("mysql", dbStr)if err != nil {fmt.Println(err)}type User struct {Id      int64Name    stringSalt    stringAge     intPasswd  string    `xorm:"varchar(200)"`Created time.Time `xorm:"created"`Updated time.Time `xorm:"updated"`}//	数据同步,将结构体同步至数据库err1 := engine.Sync(new(User))if err1 != nil {fmt.Println(err1)}
}

exec

exec函数可以搭配所有sql语句来执行相应操作。

	//exec  函数+sql语句 ? 为占位符engine.Exec("update user set age = ? where id = ?", 10, 1003)

插入数据

通过Insert来向数据库中单个或批量添加数据。

	affected, err := engine.Insert(&user)// INSERT INTO struct () values ()affected, err := engine.Insert(&user1, &user2)// INSERT INTO struct1 () values ()// INSERT INTO struct2 () values ()affected, err := engine.Insert(&users)// INSERT INTO struct () values (),(),()affected, err := engine.Insert(&user1, &users)// INSERT INTO struct1 () values ()// INSERT INTO struct2 () values (),(),()
	//数据插入user1 := User{Id: 1000, Name: "xiaohong", Age: 18, Passwd: "123456"}user2 := User{Id: 1001, Name: "xiaoming", Age: 18, Passwd: "123456"}n, _ := engine.Insert(&user1, &user2)fmt.Println(n)if n >= 1 {fmt.Println("插入成功")}//批量插入  切片var users []Userusers = append(users, User{Id: 1002, Name: "xiaolan", Age: 18, Passwd: "123456"})users = append(users, User{Id: 1003, Name: "xiaohei", Age: 18, Passwd: "123456"})n1, _ := engine.Insert(&users)fmt.Println(n1)if n1 >= 1 {fmt.Println("插入成功")}

更新与删除数据

	affected, err := engine.ID(1).Update(&user)// UPDATE user SET ... Where id = ?affected, err := engine.Update(&user, &User{Name:name})// UPDATE user SET ... Where name = ?var ids = []int64{1, 2, 3}affected, err := engine.In("id", ids).Update(&user)// UPDATE user SET ... Where id IN (?, ?, ?)// force update indicated columns by Colsaffected, err := engine.ID(1).Cols("age").Update(&User{Name:name, Age: 12})// UPDATE user SET age = ?, updated=? Where id = ?// force NOT update indicated columns by Omitaffected, err := engine.ID(1).Omit("name").Update(&User{Name:name, Age: 12})// UPDATE user SET age = ?, updated=? Where id = ?affected, err := engine.ID(1).AllCols().Update(&user)// UPDATE user SET name=?,age=?,salt=?,passwd=?,updated=? Where id = ?affected, err := engine.Where(...).Delete(&user)// DELETE FROM user Where ...affected, err := engine.ID(2).Delete(&user)// DELETE FROM user Where id = ?
	upUser := User{Name: "lyh11"}upn, _ := engine.ID(1000).Update(upUser)fmt.Println(upn)if upn >= 1 {fmt.Println("更新成功")}deln, _ := engine.ID(1002).Delete(&User{})fmt.Println(deln)if deln >= 1 {fmt.Println("删除成功")}

条件查询与遍历输出

	//Query  字节切片  字符串切片  map切片  直接写sql语句进行查询res, _ := engine.Query("select * from user")fmt.Println(res)res1, _ := engine.QueryString("select * from user")fmt.Println(res1)res2, _ := engine.QueryInterface("select * from user")fmt.Println(res2)//Get 没条件,查询到数据库里的第一条数据user := User{}engine.Get(&user)fmt.Println(user)//指定条件查询  加条件user1 := User{Name: "xiaohong"}engine.Where("name=?", user1.Name).Desc("id").Get(&user1)fmt.Println(user1)//获取指定的值 将name拿出来单独赋值var name stringengine.Table(&user).Where("id=1001").Cols("name").Get(&name)fmt.Println(name)//查询多条记录var users []Userengine.Where("passwd=123456").And("age=18").Limit(10, 0).Find(&users)fmt.Println(1, users)//count 获取条数user2 := User{Name: "xiaoming"}total, _ := engine.Count(&user2)fmt.Println(total)//遍历 Iterate   rowsuser3 := User{Name: "xiaohong"}engine.Iterate(&user3, func(idx int, bean interface{}) error {fmt.Println(1, bean)fmt.Println(2, bean.(*User))return nil})rows, _ := engine.Rows(&user3)defer rows.Close()userBean := new(User)for rows.Next() {rows.Scan(userBean)fmt.Println(33, userBean)}

事务处理

在数据库操作中,事务(Transaction)是指由一系列操作组成的逻辑工作单元,这些操作要么全部成功执行,要么全部回滚(撤销),以确保数据库的一致性和完整性。

	session := engine.NewSession()defer session.Close()session.Begin()// 通过panic将恐慌抛出,并做回滚处理defer func() {err := recover()fmt.Println(err)if err != nil {session.Rollback()} else {session.Commit()}}()user4 := User{Id: 1009, Name: "xiaoming1", Passwd: "123456"}if _, err := session.Insert(&user4); err != nil {panic(err)}user5 := User{Name: "xiaohaung"}if _, err := session.Where("id=1000").Update(&user5); err != nil {panic(err)}if _, err := session.Where("name='aaa'").Delete(&User{}); err != nil {panic(err)}

相关文章:

GO框架基础 (三)、xorm库

xorm介绍 官网:https://xorm.io/ git文档:https://github.com/go-xorm/xorm xorm 是一个 Go 语言的 ORM(对象关系映射)库,它提供了一种简单、高效的方式来将 Go 语言中的结构体与数据库表进行映射,并提供了…...

神经网络系列---回归问题和分类问题

文章目录 回归问题和分类问题回归问题:分类问题:多分类问题:排序问题:自定义损失函数: 回归问题和分类问题 回归问题: 回归问题是一种预测连续数值输出的任务。在这种问题中,模型的目标是根据…...

Jetpack Compose 与 Kotlin 的兼容性对应关系

点击查看:Jetpack Compose 教程 点击查看:Jetpack Compose Kotlin 的兼容性 官网 声明依赖项 如需添加 Compose Compiler 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。 …...

汇编反外挂

在软件保护领域,尤其是游戏保护中,反外挂是一个重要的议题。外挂通常指的是一种第三方软件,它可以修改游戏数据、操作游戏内存或提供其他作弊功能,从而给玩家带来不公平的优势。为了打击外挂,游戏开发者会采取一系列措…...

134 Linux 系统编程11 ,readlink命令,文件目录rwx权限差异,目录操作函数

一 readlink 命令 前面知道,如果a.soft是一个软链接,我们使用 cat a.soft,会直接查看这个软链接指向的文件 那么我们就是想看这个软链接是啥,可以使用 readlink a.soft 二 获取工作目录 getcwd函数 获取进程当前工作目录 (卷3,标…...

仿12306校招项目业务二(列车检索)

目录 验证数据 加载城市数据 查询列车站点信息 查询列车余票信息 构建列车返回数据 12306 项目中列车数据检索接口路径 &#xfeff; TicketController的pageListTicketQuery&#xfeff;。 GetMapping("/api/ticket-service/ticket/query")public Result<T…...

前端架构: 实现脚手架终端UI样式之ANSI escape code, Chalk, Ora介绍

在脚手架当中实现命令行的UI显示 1 &#xff09;概述 在命令行中&#xff0c;如果想实现除传统的常规文本以外的内容比如想对字体进行加粗斜体下划线&#xff0c;包括对它改变颜色改变前景色改变后景色等等需要借助一个叫做 ANSI escape code 这样的一个概念它其实是一个标准&…...

platform(驱动层+应用层)实现终端和中断开关点灯

设备树文件添加 myplatform{compatible"hqyj,myplatform";interrupt-parent<&gpiof>;interrupts<8 0>,<7 0>,<9 0>;led1-gpio<&gpioe 10 0>;led2-gpio<&gpiof 10 0>;led3-gpio<&gpioe 8 0>;reg<0x123…...

黑马JavaWeb开发跟学(一)Web前端开发HTML、CSS基础

黑马JavaWeb开发一.Web前端开发HTML、CSS基础 引子、Web开发介绍传统路线本课程全新路线本课程适用人群课程收获一、什么是web开发二、网站的工作流程三、网站的开发模式四、网站的开发技术 前端开发基础一、前端开发二、HTML & CSS2.1 HTML快速入门2.1.1 操作第一步第二步…...

Nest.js权限管理系统开发(四)Swagger API接入

什么是swagger Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(<https://swagger.io/>)。 它的主要作用是&#xff1a; 1. 使得前后端分离开发更加方便&#xff0c;有利于团队协作 2. 接口的文档在线自动生成&#xf…...

(全注解开发)学习Spring-MVC的第三天

全注解开发 第一部分 : 1.1 消除spring-mvc.xml 这些是原来spring-mvc.xml配置文件的内容 <!--1、组件扫描, 使Controller可以被扫描到--><context:component-scan base-package"com.itheima.controller"/><!--2、非自定义的Bean, 文件上传解析器--&…...

设计模式学习笔记 - 面向对象 - 7.为什么要多用组合少用继承?如何决定该用组合还是继承?

前言 在面向对象编程中&#xff0c;有一条非常经典的设计原则&#xff1a;组合优于继承&#xff0c;多用组合少用继承。 为什么不推荐使用继承&#xff1f; 组合比继承有哪些优势&#xff1f; 如何判断该用组合还是继承&#xff1f; 为什么不推荐使用继承&#xff1f; 继承…...

RocketMQ生产环境常见问题分析与总结

RocketMQ生产环境常见问题分析与总结 如何保证消息不丢失 消息丢失场景 对于跨网络的节点可能会丢消息&#xff0c;因为MQ存盘都会先写入OS的PageCache中&#xff0c;然后再让OS进行异步刷盘&#xff0c;如果缓存中的数据未及时写入硬盘就会导致消息丢失 生产端到Broker端Brok…...

前端打包工具的发展历程、思路(grunt,gulp,webpack,vite)

现在前端发展真快&#xff0c;需要学的东西太多了&#xff0c;下面总结下前端打包的发展过程&#xff0c;便于区分和选择学习。 什么是前端打包 前端打包是指将多个JavaScript文件、CSS文件、图片等资源进行合并和优化处理,并输出为一个或多个文件的过程。这样做的目的是减少…...

利用Python将文件夹下多个txt文本写入到同一个excel中(每一个文件占一行)

1、 将文件夹下多个txt文本写入到同一个excel中&#xff08;每一个文件占一行&#xff09;: # -*- coding: utf-8 -*- import os import pandas as pd# 获取文件夹中的所有txt文件 folder_path rG:\Cygwin\ txt_files [f for f in os.listdir(folder_path) if f.endswith(.t…...

通过Colab部署Google最新发布的Gemma模型

Gemma的简单介绍 Gemma 是一系列轻量级、最先进的开放式模型&#xff0c;采用与创建 Gemini 模型相同的研究和技术而构建。 Gemma 由 Google DeepMind 和 Google 的其他团队开发&#xff0c;其灵感来自 Gemini&#xff0c;其名称反映了拉丁语 gemma&#xff0c;意思是“宝石”…...

spring中@validate注解使用

在 Java 中&#xff0c;我们可以使用注解和 validate 实现对实体类中字段的校验。其中&#xff0c;注解用来定义字段的约束条件&#xff0c;而 validate 则用来进行实际的校验操作。 常用的校验注解包括 NotNull、NotEmpty、Size、Min、Max 等&#xff0c;它们可以帮助我们规定…...

停车场管理(C语言)

【题目描述】停车场管理。设有一个可以停放n辆汽车的狭长停车场&#xff0c;它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放 (即最先到达的第一辆车停放在停车场的最里面) 。如果停车场已放满n辆车&#xff0c;则以后到达的车…...

探索无限:Sora与AI视频模型的技术革命 - 开创未来视觉艺术的新篇章

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…...

375FPS! 谷歌提出MaskConver“重校正用于全景分割的纯卷积模型

https://arxiv.org/2312.06052 近年来&#xff0c;基于Transformer的模型由于其强大的建模能力以及对语义类和实例类的统一表示为全局二值掩码&#xff0c;在全景分割中占据主导地位。 在本文中&#xff0c;我们回顾了纯粹的卷积模型&#xff0c;并提出了一种新的结构MaskConve…...

leetcode初级算法(python)- 数组

文章目录 1.从排序数组中删除重复项2.买卖股票最佳时机23.旋转数组运行颠倒列表法整体移动元素块法4.存在重复运行包含判断法排序比较判断法运行集合判断法5.只出现一次的数字6.两个数组的交集27.移动零8.两数之和9.旋转图像这篇博客中的代码都是数组计算。 1.从排序数组中删除…...

重新定义音乐创作:ChatGPT与未来音乐产业的融合

### 重新定义音乐创作&#xff1a;ChatGPT与未来音乐产业的融合 随着人工智能技术的飞速发展&#xff0c;ChatGPT不仅在文字创作领域大放异彩&#xff0c;也正逐步渗透并重塑音乐产业的未来。这种先进的语言模型&#xff0c;如今已成为音乐家、作曲家和制作人们手中的一把利剑…...

人工智能绘画的时代下到底是谁在主导,是人类的想象力,还是AI的创造力?

#ai作画 目录 一.AI绘画的概念 1. 数据集准备&#xff1a; 2. 模型训练&#xff1a; 3. 生成绘画&#xff1a; 二.AI绘画的应用领域 三.AI绘画的发展 四.AI绘画背后的技术剖析 1.AI绘画的底层原理 2.主流模型的发展趋势 2.1VAE — 伊始之门 2.2GAN 2.2.1GAN相较于…...

[HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 上一节的课后练习...

文本编辑器markdown语法

markdown语法 1.介绍 Markdown是一种使用一定的语法将普通的文本转换成HTML标签文本的编辑语言&#xff0c;它的特点是可以使用普通的文本编辑器来编写&#xff0c;只需要按照特定的语法标记就可以得到丰富多样的HTML格式的文本。 2.标题分级 "# " -> 一级标题 &…...

【C++】类和对象之拷贝构造函数篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 传值传参和传引用传参3. 概念4. 特征 1. 前言 在前面学习了6个默认成员函数中的构造函数和析构函数 【C】构造函数和析构函数详解&#xff0c;接下来继续往后看拷…...

Mybatisplus 传参参数为自定义sql, 使用条件构造器作为参数

1 pom依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> </dependency> 2 mapper 接口文件 List<TBookOrder> searchDiy(Param(Const…...

C#与VisionPro联合开发——TCP/IP通信

TCP/IP&#xff08;传输控制协议/互联网协议&#xff09;是一组用于在网络上进行通信的通信协议。它是互联网和许多局域网的基础&#xff0c;为计算机之间的数据传输提供了可靠性、有序性和错误检测。在软件开发中&#xff0c;TCP/IP 通信通常用于实现网络应用程序之间的数据交…...

spring Boot快速入门

快速入门为主主要届介绍java web接口API的编写 java编辑器首选IntelliJ IDEA 官方链接&#xff1a;https://www.jetbrains.com/idea/ IEDA 前言 实例项目主要是web端API接口的使用&#xff0c;项目使用mysql数据库&#xff0c;把从数据库中的数据的查询出来后通过接口json数…...

FPGA SERDESE2 (SDR收发仿真)

高速 Serdes 环路测试 高速串行通信优势非常巨大,只需要很少的IO引脚就可以实现高速通信,这也是当今FPGA高速接口的核心 技术。比如XILINX的7代FPGA,GTX可以达到10.3125Gbps,ultrascale FPGA的GTH可以达到16Gbps。目前国产FPGA还难以达到这么高的接口速度。 高速串行通信经…...