我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Beego中ORM操作各类数据库连接的方式是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Beego中ORM操作各类数据库连接的方式是什么

本篇内容主要讲解“Beego中ORM操作各类数据库连接的方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Beego中ORM操作各类数据库连接的方式是什么”吧!

beego中各类数据库连接方式

beego 框架是优秀得go REST API开发框架。下面针对beego中各类数据库连接操作做一个总结。

  • orm连接方式

beego中的orm操作支持三种数据库:mysql,sqlite3,postgersql。三种数据库的驱动如下:

import (    _ "github.com/go-sql-driver/mysql"    _ "github.com/lib/pq"    _ "github.com/mattn/go-sqlite3")

对于以上三类数据库的使用,最好使用orm进行操作,因为简单的增删查改已经实现了通用的接口封装。无需再根据每一个模型,单独的实现一套增删查改。另外,orm也支持原生sql查询,复杂的sql操作可以直接使用orm.Raw()进行原生查询,简单快捷。

1.1 orm使用方式

a. 注册数据库驱动程序

// 参数1   driverName// 参数2   数据库类型// 这个用来设置 driverName 对应的数据库类型// mysql / sqlite3 / postgres 这三种是默认已经注册过的,所以可以无需设置orm.RegisterDriver("mysql", orm.DRMySQL)

b.注册数据库

ORM 必须注册一个别名为 default 的数据库,作为默认使用。
ORM 使用 golang 自己的连接池

// 参数1        数据库的别名,用来在 ORM 中切换数据库使用// 参数2        driverName// 参数3        对应的链接字符串orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8")// 参数4(可选)  设置最大空闲连接// 参数5(可选)  设置最大数据库连接 (go >= 1.2)maxIdle := 30maxConn := 30orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8", maxIdle, maxConn)

c. 注册模型

orm.RegisterModel(new(User), new(Profile), new(Post))

自此,就可以愉快的使用orm提供的接口进行数据库操作了。

type Ormer interface {    Read(interface{}, …string) error    ReadOrCreate(interface{}, string, …string) (bool, int64, error)    Insert(interface{}) (int64, error)    InsertMulti(int, interface{}) (int64, error)    Update(interface{}, …string) (int64, error)    Delete(interface{}) (int64, error)    LoadRelated(interface{}, string, …interface{}) (int64, error)    QueryM2M(interface{}, string) QueryM2Mer    QueryTable(interface{}) QuerySeter    Using(string) error    Begin() error    Commit() error    Rollback() error    Raw(string, …interface{}) RawSeter    Driver() Driver}

1.2 操作示例

a. orm连接mysql

import ("github.com/astaxie/beego/orm"_ "github.com/go-sql-driver/mysql")func init() {orm.RegisterDriver("mysql", orm.DRMySQL)orm.RegisterDataBase("default", "mysql", "root:root@tcp(192.168.1.1:3306)/ming?charset=utf8")orm.RegisterModel(new(User))orm.SetMaxIdleConns("default", 10)orm.SetMaxOpenConns("default", 100)}func Create(param interface{}) (int64, error) {return orm.NewOrm().Insert(param)}func Update(param interface{}, fields ...string) (int64, error) {return orm.NewOrm().Update(param, fields...)}func Delete(param interface{}, cols ...string) (int64, error) {return orm.NewOrm().Delete(param, cols...)}func Read(md interface{}, cols ...string) error {return orm.NewOrm().Read(md, cols...)}

b. orm连接sqlite3

import ("github.com/astaxie/beego/orm"_ "github.com/mattn/go-sqlite3")func init() {orm.RegisterDriver("sqlite3", orm.DRSqlite)orm.RegisterDataBase("default", "sqlite3", "conf/sqlite_test.db")orm.SetMaxIdleConns("default", 50)orm.SetMaxOpenConns("default", 200)    //设置数据库时区    //orm.DefaultTimeLoc = time.UTCorm.RegisterModel(new(User))}func Create(param interface{}) (int64, error) {return orm.NewOrm().Insert(param)}func Update(param interface{}, fields ...string) (int64, error) {return orm.NewOrm().Update(param, fields...)}func Delete(param interface{}, cols ...string) (int64, error) {return orm.NewOrm().Delete(param, cols...)}func Read(md interface{}, cols ...string) error {return orm.NewOrm().Read(md, cols...)}

c. orm连接 postgresql

golang orm可以连接postgres,但是好像不支持数据库中的schema.

import ("github.com/astaxie/beego/orm"_ "github.com/lib/pq")func init() {orm.RegisterDriver("postgres", orm.DRPostgres)orm.RegisterDataBase("default", "postgres", "host=192.168.1.1 port=5432 user=root password=root dbname=test sslmode=disable")//orm.RegisterModelWithPrefix("schema_name", new(PmPark))orm.RegisterModel(new(PmPark))orm.SetMaxIdleConns("default", 10)orm.SetMaxOpenConns("default", 50)}

1.3非orm连接方式

使用非orm连接方式,除了mysql,sqlite3,postgresql外,其他的如sqlserver,mongodb,redis等等,都有自己的连接方式。

a. mysql

import ("fmt""database/sql"_ "github.com/go-sql-driver/mysql")func getMysqlDB() (*sql.DB, error) {connectString := "root:123456@tcp(localhost:3306)/test?charset=utf8"db, err := sql.Open("mysql", connectString)if err != nil {return nil, err}return db, nil}

b. sqlite3

import ("database/sql"_ "github.com/mattn/go-sqlite3")func GetDBConn() (*sql.DB, error) {return sql.Open("sqlite3", "./data/location.db")}

c. postgresql

import ("database/sql""errors""fmt""time""github.com/astaxie/beego"_ "github.com/lib/pq")var (host     string = ""port     intuser     string = ""password string = ""dbname   string = ""max_conn  int = 40idle_conn int = 10postgreConn *sql.DB //全局sql连接,已实现连接池,所以可以只创建一个实例DB_CONN_ERROR error)func init() {host = beego.AppConfig.String("postgres_host")port, _ = beego.AppConfig.Int("postgres_port")user = beego.AppConfig.String("postgres_user")password = beego.AppConfig.String("postgres_password")dbname = beego.AppConfig.String("postgres_dbname")max_conn = beego.AppConfig.DefaultInt("postgres_max_conn", 50)idle_conn = beego.AppConfig.DefaultInt("postgres_idle_conn", 10)DB_CONN_ERROR = errors.New("数据库连接失败")}func GetPostgresSession() *sql.DB {if postgreConn == nil {psqlInfo := fmt.Sprintf(`host=%s port=%d user=%s password=%s dbname=%s sslmode=disable`,host, port, user, password, dbname)db, err := sql.Open("postgres", psqlInfo)if err != nil {return nil}db.SetConnMaxLifetime(30 * time.Minute)db.SetMaxOpenConns(max_conn)db.SetMaxIdleConns(idle_conn)//err = db.Ping()//if err != nil {//return nil//}postgreConn = db}return postgreConn}

d. mongodb

import ("errors""time""github.com/astaxie/beego""gopkg.in/mgo.v2")// 连接mongodb数据库var (MongodbAddr   string = "" //mongodb数据库地址MongodbName   string = "" //mongodb数据名称MongodbUser   string = "" //mongodb用户名MongodbPasswd string = "" //mongodb密码)var (mongosession *mgo.Session)func init() {MongodbAddr = beego.AppConfig.String("mongodb_addr")MongodbName = beego.AppConfig.String("mongodb_name")MongodbUser = beego.AppConfig.String("mongodb_username")MongodbPasswd = beego.AppConfig.String("mongodb_passwd")}func GetMongoSession() *mgo.Session {if mongosession == nil {var err errorif MongodbUser == "" || MongodbPasswd == "" {mongosession, err = mgo.Dial(MongodbAddr)} else {dialInfo := &mgo.DialInfo{Addrs:     string{MongodbAddr},Direct:    false,Timeout:   time.Second * 30,Database:  MongodbName,Source:    "admin",Username:  MongodbUser,Password:  MongodbPasswd,PoolLimit: 4096, // Session.SetPoolLimit}mongosession, err = mgo.DialWithInfo(dialInfo)}if err != nil {return nil}}return mongosession.Clone()}func WithMongoCollection(collectionName string, s func(*mgo.Collection) error) error {session := GetMongoSession()if session == nil {return errors.New("获取mongodb连接失败")}defer session.Close()c := session.DB(MongodbName).C(collectionName)return s(c)}

e.sqlserver

import ("database/sql""time""fmt""github.com/astaxie/beego"_ "github.com/denisenkom/go-mssqldb")const (CONN_LIVE_TIME = 24 //连接使用时间 小时)var (db       *sql.DB = nil //全局数据库连接)func init() {host := beego.AppConfig.String("yr_host")port, err := beego.AppConfig.Int("yr_port")if err != nil {port = 1433}user := beego.AppConfig.String("user")password := beego.AppConfig.String("password")dbName := beego.AppConfig.String("name")connString := fmt.Sprintf("server=%s;port%d;database=%s;user id=%s;password=%s", host, port, dbName, user, password)db, err = sql.Open("mssql", connString)if err != nil {return }db.SetMaxOpenConns(200)db.SetMaxIdleConns(50)db.SetConnMaxLifetime(time.Duration(CONN_LIVE_TIME) * time.Hour)}

f.redis

import ("time""github.com/astaxie/beego""github.com/gomodule/redigo/redis")var (db_addr     string = ""db_password string = ""redisPool *redis.Pool //redis连接池)func init() {db_addr = beego.AppConfig.String("redis_addr")db_password = beego.AppConfig.String("redis_password")}//获取Redis连接池func newRedisPool(server, password string) (*redis.Pool, error) {var err errorreturn &redis.Pool{MaxIdle:     32,IdleTimeout: 180 * time.Second,Dial: func() (redis.Conn, error) {var c redis.Connc, err = redis.Dial("tcp", server)if err != nil {return nil, err}if password != "" {if _, err = c.Do("AUTH", password); err != nil {c.Close()return nil, err}}return c, err},TestOnBorrow: func(c redis.Conn, t time.Time) error {_, err := c.Do("PING")return err},}, err}func GetRedisConnection() (redis.Conn, error) {if redisPool == nil {var err errorredisPool, err = newRedisPool(db_addr, db_password)if err != nil {return nil, err}}return redisPool.Get(), nil}

到此,相信大家对“Beego中ORM操作各类数据库连接的方式是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Beego中ORM操作各类数据库连接的方式是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Beego中ORM操作各类数据库连接的方式是什么

本篇内容主要讲解“Beego中ORM操作各类数据库连接的方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Beego中ORM操作各类数据库连接的方式是什么”吧!beego中各类数据库连接方
2023-06-30

Java连接各种数据库的方式是什么

本篇内容主要讲解“Java连接各种数据库的方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java连接各种数据库的方式是什么”吧!1、Oracle8/8i/9i数据库(thin模式)Cl
2023-06-17

.Net连接数据库的方式是什么

这篇文章主要讲解了“.Net连接数据库的方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.Net连接数据库的方式是什么”吧!一、C#中连接字符串常用内容参数说明Provider设置或
2023-06-30

如何使用PHP连接和操作Redis数据库?(PHP连接Redis并进行数据读写的方式是什么?)

本文介绍了如何使用PHP连接和操作Redis数据库。它涵盖了连接、读写字符串、哈希、列表、集合和有序集合等基本操作。还讨论了事务和管道等高级功能。本文提供了详细的代码示例,展示了如何使用PredisClient类与Redis数据库进行交互。通过将PHP与Redis相结合,开发人员可以轻松地创建具有高性能和可扩展性的实际应用程序。
如何使用PHP连接和操作Redis数据库?(PHP连接Redis并进行数据读写的方式是什么?)
2024-04-02

php连接数据库的作用是什么

这篇“php连接数据库的作用是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php连接数据库的作用是什么”文章吧。php
2023-07-06

php链式操作mysql数据库的方法是什么

本篇内容介绍了“php链式操作mysql数据库的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!封装类常用操作使用示例// 初始化d
2023-07-05

android连接数据库的方法是什么

Android连接数据库的方法有多种,最常用的方法是使用SQLite数据库。下面是使用SQLite数据库连接的步骤:1. 创建一个继承自`SQLiteOpenHelper`的类,用于创建和管理数据库。```javapublic class
2023-08-28

dbeaver连接数据库的方法是什么

使用DBeaver连接数据库的方法如下:打开DBeaver应用程序。点击菜单栏中的“数据库”选项,然后选择“新连接”。在新连接窗口中,选择要连接的数据库类型,如MySQL、PostgreSQL、Oracle等。输入数据库连接信息,包括主机名
dbeaver连接数据库的方法是什么
2024-03-14

oracle连接数据库的方法是什么

Oracle连接数据库的方法通常是使用Oracle提供的客户端工具,比如SQL*Plus或SQL Developer。在这些工具中,用户需要提供数据库的连接信息,包括主机地址、端口号、数据库名称、用户名和密码等。用户还可以使用Oracle提
oracle连接数据库的方法是什么
2024-04-09

sqlserver连接数据库的方法是什么

在SQL Server中连接数据库可以使用以下几种方法:使用SQL Server Management Studio (SSMS):通过SSMS工具,可以轻松连接到SQL Server数据库并进行管理操作。在SSMS中,选择“连接到服务器”
sqlserver连接数据库的方法是什么
2024-04-09

mysql连接数据库的方法是什么

在MySQL中,连接到数据库的方法通常是使用mysql命令行工具或者通过编程语言中的相应库来连接数据库。在命令行中使用mysql命令行工具连接数据库的一般语法为:mysql -u username -p password -h host
mysql连接数据库的方法是什么
2024-03-05

Sqlsugar连接数据库的方法是什么

SqlSugar连接数据库的方法通常是通过创建一个SqlSugarClient对象,并指定连接字符串,然后调用该对象的方法来操作数据库。以下是一个示例代码:using SqlSugar;public class DatabaseHelpe
Sqlsugar连接数据库的方法是什么
2024-04-09

Python中对数据库的操作方法是什么

今天小编给大家分享一下Python中对数据库的操作方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、数据库介绍1、
2023-07-05

Linq操作数据库的方法是什么

本篇内容主要讲解“Linq操作数据库的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linq操作数据库的方法是什么”吧!一个简单的例子:public partial class sim
2023-06-17

Java操作数据库的方法是什么

本篇内容介绍了“Java操作数据库的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、悲观锁(也叫行级锁)在本次事务的执行过程当中
2023-06-22

Oracle数据库中的连接池是什么

Oracle数据库中的连接池是一种用于管理数据库连接的机制。连接池允许应用程序在需要时从一个预先创建的连接池中获取数据库连接,而不是每次都创建一个新的数据库连接。这样可以提高应用程序的性能和效率,同时减少数据库服务器的负担。连接池会预先创
Oracle数据库中的连接池是什么
2024-03-02

数据库连接池的工作机制是什么

数据库连接池的工作机制是为了提高数据库操作的性能和效率。它通过预先创建和管理一定数量的数据库连接,以避免频繁地创建、销毁连接,从而减少了系统开销和资源消耗。下面是数据库连接池的工作机制:1. 初始化连接池:在系统启动时,连接池会创建一定数量
2023-09-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录