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

Go语言开发基于SQLite数据库实现用户表增删改查项目搭建(一)

背景

前几天我们不是写了个关于go语言解决rtsp协议只播放部分的问题(业务问题)这个么
里面用到了mysql,但不够轻量级,如果有的项目地需要的话,我们还需要部署mysql
其实这个项目就使用了一个表,没必要搞mysql,那有没有轻量级一些的,免安装的。
当然有,那就是SQLite
这一期我们就来实现基于SQLite数据库实现用户表增删改查
接口的话我们采用restful风格
代码风格的话因为我java使用的比较多,习惯用mvc三层架构
所以我这面也手动的创建了三层模型架构。

SQLite简单介绍

sql官网地址

什么是 SQLite?
SQLite 是一个 C 语言库,它实现了一个 小型、 快速、 独立、 高可靠性、 功能齐全的SQL 数据库引擎。SQLite 是世界上使用最广泛的数据库引擎。SQLite 内置于所有手机和大多数计算机中,并且捆绑在人们每天使用的无数其他应用程序。

特点:
在这里插入图片描述

搭建

引入依赖

sqlite引入

go get github.com/mattn/go-sqlite3

gin引入

go get github.com/gin-gonic/gin

创建文件夹

在这里插入图片描述

初始化数据库

var (
	Db *sql.DB
)

func InitDb(dbName string) {
	var err error
	Db, err = sql.Open("sqlite3", "./"+dbName+".db")
	if err != nil {
		log.Fatal(err)
	}

}

func DbClose() {
	if Db != nil {
		Db.Close()
	}
}

初始化路由

func InitRouter() *gin.Engine {

	var router = gin.New()
	//gin.SetMode(gin.ReleaseMode)
	// 没有路由即 404返回
	router.NoRoute(func(g *gin.Context) {
		g.JSON(http.StatusNotFound, gin.H{
			"code": 404,
			"msg":  fmt.Sprintf("not found '%s:%s'", g.Request.Method, g.Request.URL.Path)})
	})

	router.Use(Cors())
	// 设置路由组
	api := router.Group("/api")
	{
		InitUserRouter(api)
	}

	return router
}

用户路由组

func InitUserRouter(router *gin.RouterGroup) {
	m := &controller.UserController{
		UserService: application.GetUserService(),
	}
	userRouter := router.Group("/user")
	user := new(model.User)
	//创建对应的表
	user.CreateTable(config.Db, user.CreateTableSql())
	userRouter.POST("/", func(c *gin.Context) {
		req.NewCtxWithGin(c).Handle(m.Insert)
	})
	userRouter.POST("/page", func(c *gin.Context) {
		req.NewCtxWithGin(c).Handle(m.GetPageList)
	})
	userRouter.GET("/:id", func(c *gin.Context) {
		req.NewCtxWithGin(c).Handle(m.GetById)
	})
	userRouter.DELETE("/:id", func(c *gin.Context) {
		req.NewCtxWithGin(c).Handle(m.DeleteById)
	})
	userRouter.PUT("/:id", func(c *gin.Context) {
		req.NewCtxWithGin(c).Handle(m.UpdateById)
	})

}

用户结构体

type User struct {
	ModelTable

	Username string `json:"username" db:"username"`
	PassWord string `json:"password" db:"password"`
}

func (u *User) TableName() string {

	return "user"
}

// TableName 用于获取表名(由具体的子类重写)
func (u *User) CreateTableSql() string {
	return fmt.Sprintf(""+
		"CREATE TABLE IF NOT EXISTS %s "+
		"(id INTEGER PRIMARY KEY AUTOINCREMENT, "+
		"username TEXT NOT NULL, "+
		"password TEXT NOT NULL"+
		");",
		u.TableName())
}

ModelTable 基类

type ModelTable struct {
	Id uint64 `json:"id"  db:"id"`
}

// TableName 用于获取表名(由具体的子类重写)
func (m *ModelTable) TableName() string {
	return ""
}

// 具体的表信息 子类自己去实现
func (m *ModelTable) CreateTableSql() string {
	return ""
}

func (m *ModelTable) CreateTable(db *sql.DB, sql string) error {

	// 执行创建表的 SQL
	_, err := db.Exec(sql)
	if err != nil {
		return fmt.Errorf("failed to create table: %v", err)
	}
	return nil
}


func GetById(tableName string, id uint64, dest interface{}) (interface{}, error) {}
func getFieldPointers(t reflect.Type, v reflect.Value) ([]interface{}, error) {}
func UpdateById(tableName string, dest interface{}, id uint64) error {}
func DeleteById(tableName string, id uint64) error {}
func Insert(model interface{}) error {}
func GetPageList(tableName string, page int, pageSize int, result interface{}) (*PageResult, error) {}

main.go 监听端口

func main() {
	config.InitDb("user")
	r := router.InitRouter()
	r.Run(":6666")
}

这样就简单的搭建完成了,具体的三层模型中的内容,在后面的章节在进行创建

源码地址

使用Go语言开发基于SQLite数据库实现用户表相关接口项目示例,可进行扩展,拿来即用


http://www.kler.cn/a/391108.html

相关文章:

  • python购物计算 2024年6月青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析
  • C++单例模式实现
  • AI 写作(五)核心技术之文本摘要:分类与应用(5/10)
  • 如何在Puppeteer中实现表单自动填写与提交:问卷调查
  • LeetCode【0036】有效的数独
  • 深度学习之 LSTM
  • adb 如何通过wifi连接手机
  • 吴恩达机器学习笔记(3)
  • 机器学习——特征工程、正则化、强化学习
  • 软件测试项目实战
  • Playwright 自动化测试与爬虫快速入门指南
  • 华为云软件开发生产线(CodeArts)10月新功能特性
  • MySQL 高性能优化规范建议总结
  • MySQL的SQL书写顺序和执行顺序
  • AI与OCR:数字档案馆图像扫描与文字识别技术实现与项目案例
  • 【SDL Trados Studio】sdltm格式转excel
  • HTTP Cookie深入解析:Web会话追踪
  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 校园服务平台小程序ssm+论文源码调试讲解
  • 力扣 653. 两数之和 IV 二叉树/binary-tree two-sum IV
  • Python 如何根据给定模型计算权值
  • Scala中的case class
  • 在配置环境变量之后使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  • 【PowerHarmony】电鸿蒙学习记录-准备工作
  • HarmonyOS开发 API 13发布首个Beta版本,解决了哪些问题?
  • java/SpingBoot