zoukankan      html  css  js  c++  java
  • Go语言的ORM库xorm实战篇

              Go语言的ORM库xorm实战篇

                                     作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

       xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。

    一.环境准备

    1>.准备测试数据

    [root@yinzhengjie.com ~]# yum -y install mariadb-server
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    epel/x86_64/metalink                                                                                                                                 | 6.6 kB  00:00:00     
     * base: mirrors.bfsu.edu.cn
     * epel: hkg.mirror.rackspace.com
     * extras: mirrors.bfsu.edu.cn
     * updates: mirrors.bfsu.edu.cn
    base                                                                                                                                                 | 3.6 kB  00:00:00     
    epel                                                                                                                                                 | 4.7 kB  00:00:00     
    extras                                                                                                                                               | 2.9 kB  00:00:00     
    updates                                                                                                                                              | 2.9 kB  00:00:00     
    (1/3): updates/7/x86_64/primary_db                                                                                                                   | 1.3 MB  00:00:00     
    (2/3): epel/x86_64/updateinfo                                                                                                                        | 1.0 MB  00:00:01     
    epel/x86_64/primary_db         FAILED                                          
    http://hk.mirrors.thegigabit.com/epel/7/x86_64/repodata/c0bb886c57e1b6e3dc9bcc5569e4b0231ef9d641a0ee033573d3e02d9a233952-primary.sqlite.bz2: [Errno 14] HTTP Error 404 - Not
     FoundTrying other mirror.
    To address this issue please refer to the below wiki article 
    
    https://wiki.centos.org/yum-errors
    
    If above article doesn't help to resolve this issue please use https://bugs.centos.org/.
    
    (3/3): epel/x86_64/primary_db                                                                                                                        | 6.8 MB  00:00:01     
    Resolving Dependencies
    --> Running transaction check
    ---> Package mariadb-server.x86_64 1:5.5.65-1.el7 will be installed
    --> Processing Dependency: mariadb-libs(x86-64) = 1:5.5.65-1.el7 for package: 1:mariadb-server-5.5.65-1.el7.x86_64
    --> Processing Dependency: mariadb(x86-64) = 1:5.5.65-1.el7 for package: 1:mariadb-server-5.5.65-1.el7.x86_64
    --> Processing Dependency: perl-DBI for package: 1:mariadb-server-5.5.65-1.el7.x86_64
    --> Processing Dependency: perl-DBD-MySQL for package: 1:mariadb-server-5.5.65-1.el7.x86_64
    --> Processing Dependency: perl(Data::Dumper) for package: 1:mariadb-server-5.5.65-1.el7.x86_64
    --> Processing Dependency: perl(DBI) for package: 1:mariadb-server-5.5.65-1.el7.x86_64
    --> Running transaction check
    ---> Package mariadb.x86_64 1:5.5.65-1.el7 will be installed
    ---> Package mariadb-libs.x86_64 1:5.5.60-1.el7_5 will be updated
    ---> Package mariadb-libs.x86_64 1:5.5.65-1.el7 will be an update
    ---> Package perl-DBD-MySQL.x86_64 0:4.023-6.el7 will be installed
    ---> Package perl-DBI.x86_64 0:1.627-4.el7 will be installed
    --> Processing Dependency: perl(RPC::PlServer) >= 0.2001 for package: perl-DBI-1.627-4.el7.x86_64
    --> Processing Dependency: perl(RPC::PlClient) >= 0.2000 for package: perl-DBI-1.627-4.el7.x86_64
    ---> Package perl-Data-Dumper.x86_64 0:2.145-3.el7 will be installed
    --> Running transaction check
    ---> Package perl-PlRPC.noarch 0:0.2020-14.el7 will be installed
    --> Processing Dependency: perl(Net::Daemon) >= 0.13 for package: perl-PlRPC-0.2020-14.el7.noarch
    --> Processing Dependency: perl(Net::Daemon::Test) for package: perl-PlRPC-0.2020-14.el7.noarch
    --> Processing Dependency: perl(Net::Daemon::Log) for package: perl-PlRPC-0.2020-14.el7.noarch
    --> Processing Dependency: perl(Compress::Zlib) for package: perl-PlRPC-0.2020-14.el7.noarch
    --> Running transaction check
    ---> Package perl-IO-Compress.noarch 0:2.061-2.el7 will be installed
    --> Processing Dependency: perl(Compress::Raw::Zlib) >= 2.061 for package: perl-IO-Compress-2.061-2.el7.noarch
    --> Processing Dependency: perl(Compress::Raw::Bzip2) >= 2.061 for package: perl-IO-Compress-2.061-2.el7.noarch
    ---> Package perl-Net-Daemon.noarch 0:0.48-5.el7 will be installed
    --> Running transaction check
    ---> Package perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7 will be installed
    ---> Package perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ============================================================================================================================================================================
     Package                                             Arch                               Version                                      Repository                        Size
    ============================================================================================================================================================================
    Installing:
     mariadb-server                                      x86_64                             1:5.5.65-1.el7                               base                              11 M
    Installing for dependencies:
     mariadb                                             x86_64                             1:5.5.65-1.el7                               base                             8.7 M
     perl-Compress-Raw-Bzip2                             x86_64                             2.061-3.el7                                  base                              32 k
     perl-Compress-Raw-Zlib                              x86_64                             1:2.061-4.el7                                base                              57 k
     perl-DBD-MySQL                                      x86_64                             4.023-6.el7                                  base                             140 k
     perl-DBI                                            x86_64                             1.627-4.el7                                  base                             802 k
     perl-Data-Dumper                                    x86_64                             2.145-3.el7                                  base                              47 k
     perl-IO-Compress                                    noarch                             2.061-2.el7                                  base                             260 k
     perl-Net-Daemon                                     noarch                             0.48-5.el7                                   base                              51 k
     perl-PlRPC                                          noarch                             0.2020-14.el7                                base                              36 k
    Updating for dependencies:
     mariadb-libs                                        x86_64                             1:5.5.65-1.el7                               base                             759 k
    
    Transaction Summary
    ============================================================================================================================================================================
    Install  1 Package  (+9 Dependent packages)
    Upgrade             ( 1 Dependent package)
    
    Total download size: 22 M
    Downloading packages:
    Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
    (1/11): perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64.rpm                                                                                               |  32 kB  00:00:00     
    (2/11): mariadb-libs-5.5.65-1.el7.x86_64.rpm                                                                                                         | 759 kB  00:00:00     
    (3/11): perl-Compress-Raw-Zlib-2.061-4.el7.x86_64.rpm                                                                                                |  57 kB  00:00:00     
    (4/11): perl-DBD-MySQL-4.023-6.el7.x86_64.rpm                                                                                                        | 140 kB  00:00:00     
    (5/11): perl-DBI-1.627-4.el7.x86_64.rpm                                                                                                              | 802 kB  00:00:00     
    (6/11): perl-Data-Dumper-2.145-3.el7.x86_64.rpm                                                                                                      |  47 kB  00:00:00     
    (7/11): perl-Net-Daemon-0.48-5.el7.noarch.rpm                                                                                                        |  51 kB  00:00:00     
    (8/11): perl-IO-Compress-2.061-2.el7.noarch.rpm                                                                                                      | 260 kB  00:00:00     
    (9/11): mariadb-5.5.65-1.el7.x86_64.rpm                                                                                                              | 8.7 MB  00:00:02     
    (10/11): mariadb-server-5.5.65-1.el7.x86_64.rpm                                                                                                      |  11 MB  00:00:02     
    (11/11): perl-PlRPC-0.2020-14.el7.noarch.rpm                                                                                                         |  36 kB  00:00:00     
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                                                       9.5 MB/s |  22 MB  00:00:02     
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Updating   : 1:mariadb-libs-5.5.65-1.el7.x86_64                                                                                                                      1/12 
      Installing : perl-Data-Dumper-2.145-3.el7.x86_64                                                                                                                     2/12 
      Installing : 1:mariadb-5.5.65-1.el7.x86_64                                                                                                                           3/12 
      Installing : 1:perl-Compress-Raw-Zlib-2.061-4.el7.x86_64                                                                                                             4/12 
      Installing : perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64                                                                                                              5/12 
      Installing : perl-IO-Compress-2.061-2.el7.noarch                                                                                                                     6/12 
      Installing : perl-Net-Daemon-0.48-5.el7.noarch                                                                                                                       7/12 
      Installing : perl-PlRPC-0.2020-14.el7.noarch                                                                                                                         8/12 
      Installing : perl-DBI-1.627-4.el7.x86_64                                                                                                                             9/12 
      Installing : perl-DBD-MySQL-4.023-6.el7.x86_64                                                                                                                      10/12 
      Installing : 1:mariadb-server-5.5.65-1.el7.x86_64                                                                                                                   11/12 
      Cleanup    : 1:mariadb-libs-5.5.60-1.el7_5.x86_64                                                                                                                   12/12 
      Verifying  : 1:mariadb-server-5.5.65-1.el7.x86_64                                                                                                                    1/12 
      Verifying  : perl-Net-Daemon-0.48-5.el7.noarch                                                                                                                       2/12 
      Verifying  : perl-Data-Dumper-2.145-3.el7.x86_64                                                                                                                     3/12 
      Verifying  : perl-DBD-MySQL-4.023-6.el7.x86_64                                                                                                                       4/12 
      Verifying  : 1:mariadb-libs-5.5.65-1.el7.x86_64                                                                                                                      5/12 
      Verifying  : perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64                                                                                                              6/12 
      Verifying  : 1:perl-Compress-Raw-Zlib-2.061-4.el7.x86_64                                                                                                             7/12 
      Verifying  : perl-DBI-1.627-4.el7.x86_64                                                                                                                             8/12 
      Verifying  : perl-IO-Compress-2.061-2.el7.noarch                                                                                                                     9/12 
      Verifying  : perl-PlRPC-0.2020-14.el7.noarch                                                                                                                        10/12 
      Verifying  : 1:mariadb-5.5.65-1.el7.x86_64                                                                                                                          11/12 
      Verifying  : 1:mariadb-libs-5.5.60-1.el7_5.x86_64                                                                                                                   12/12 
    
    Installed:
      mariadb-server.x86_64 1:5.5.65-1.el7                                                                                                                                      
    
    Dependency Installed:
      mariadb.x86_64 1:5.5.65-1.el7        perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7    perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7    perl-DBD-MySQL.x86_64 0:4.023-6.el7   
      perl-DBI.x86_64 0:1.627-4.el7        perl-Data-Dumper.x86_64 0:2.145-3.el7           perl-IO-Compress.noarch 0:2.061-2.el7          perl-Net-Daemon.noarch 0:0.48-5.el7   
      perl-PlRPC.noarch 0:0.2020-14.el7   
    
    Dependency Updated:
      mariadb-libs.x86_64 1:5.5.65-1.el7                                                                                                                                        
    
    Complete!
    [root@yinzhengjie.com ~]# 
    [root@yinzhengjie.com ~]# yum -y install mariadb-server
    [root@yinzhengjie.com ~]# systemctl start mariadb
    [root@yinzhengjie.com ~]# 
    [root@yinzhengjie.com ~]# systemctl enable mariadb
    Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
    [root@yinzhengjie.com ~]# 
    [root@yinzhengjie.com ~]# systemctl start mariadb
    [root@yinzhengjie.com ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 2
    Server version: 5.5.65-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> 
    MariaDB [(none)]> create database golang CHARACTER SET utf8mb4;
    Query OK, 1 row affected (0.03 sec)
    
    MariaDB [(none)]>
    MariaDB [(none)]> CREATE USER jason@'%' IDENTIFIED BY 'yinzhengjie';
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> GRANT ALL ON golang.* TO jason@'%';
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> 
    MariaDB [(none)]> quit
    Bye
    [root@yinzhengjie.com ~]# 

    2>.安装xorm驱动

      GitHub地址:
        https://github.com/go-xorm/xorm
    
      安装xorm驱动:
        go get github.com/go-xorm/xorm

    3>.安装mysql驱动

      安装Go语言的MySQL驱动:
        go get  github.com/go-sql-driver/mysql

     

    二.查询操作 

    1>.查询所有数据

    package main
    
    import (
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "github.com/go-xorm/xorm"
        "log"
    )
    
    //结构体字段对应数据库中的表字段
    type User struct {
        Id      int64
        Name    string `xorm:"name"`
        Age     int    `xorm:"age"`
        Phone   string `xorm:"phone"`
        Address string `xorm:"address"`
    }
    
    func main() {
        /**
        配置连接数据库信息格式如下所示:
            用户名:密码@tcp(数据库服务器地址:端口)/数据库名称?charset=字符集
        */
        cmd := fmt.Sprintf("jason:yinzhengjie@tcp(172.200.1.254:3306)/golang?charset=utf8mb4")
    
        //使用上面的配置信息连接数据库,但要指定数据库的类型(我这里写MySQL)
        db_conn, err := xorm.NewEngine("mysql", cmd)
        if err != nil {
            log.Fatal(err)
        }
    
        //释放资源
        defer db_conn.Close()
    
        users := make([]User, 0) //等效于"var users []User"
    
        //获取所有资源
        err = db_conn.Find(&users)
        if err != nil {
            log.Println(err)
        } else {
            for _, user := range users {
                log.Println(user.Id, user.Name, user.Age, user.Address)
            }
        }
    }
    案例代码

    2>.过滤查询数据

    package main
    
    import (
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "github.com/go-xorm/xorm"
        "log"
    )
    
    //结构体字段对应数据库中的表字段
    type User struct {
        Id      int64
        Name    string `xorm:"name"`
        Age     int    `xorm:"age"`
        Phone   string `xorm:"phone"`
        Address string `xorm:"address"`
    }
    
    func main() {
        /**
        配置连接数据库信息格式如下所示:
            用户名:密码@tcp(数据库服务器地址:端口)/数据库名称?charset=字符集
        */
        cmd := fmt.Sprintf("jason:yinzhengjie@tcp(172.200.1.254:3306)/golang?charset=utf8mb4")
    
        //使用上面的配置信息连接数据库,但要指定数据库的类型(我这里写MySQL)
        db_conn, err := xorm.NewEngine("mysql", cmd)
        if err != nil {
            log.Fatal(err)
        }
    
        //释放资源
        defer db_conn.Close()
    
        var users []User //等效于"users := make([]User, 0)"
    
        //过滤数据(年龄在19-25岁之间)
        err = db_conn.Where("age > ? and age < ?", 19, 25).Find(&users)
        if err != nil {
            log.Println(err)
        } else {
            for _, user := range users {
                log.Println(user.Id, user.Name, user.Age, user.Address)
            }
        }
    }
    案例代码

    三.插入操作

    package main
    
    import (
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "github.com/go-xorm/xorm"
        "log"
    )
    
    //结构体字段对应数据库中的表字段
    type User struct {
        Id      int64
        Name    string `xorm:"name"`
        Age     int    `xorm:"age"`
        Phone   string `xorm:"phone"`
        Address string `xorm:"address"`
    }
    
    func main() {
        /**
        配置连接数据库信息格式如下所示:
            用户名:密码@tcp(数据库服务器地址:端口)/数据库名称?charset=字符集
        */
        cmd := fmt.Sprintf("jason:yinzhengjie@tcp(172.200.1.254:3306)/golang?charset=utf8mb4")
    
        //使用上面的配置信息连接数据库,但要指定数据库的类型(我这里写MySQL)
        db_conn, err := xorm.NewEngine("mysql", cmd)
        if err != nil {
            log.Fatal(err)
        }
    
        //释放资源
        defer db_conn.Close()
    
        //定义待插入用户的数据
        new_user := User{
            Id:      3,
            Name:    "诡术妖姬",
            Age:     25,
            Phone:   "1000001",
            Address: "艾欧尼亚",
        }
    
        n, err := db_conn.Insert(new_user)
        fmt.Printf("成功插入了[%d]条数据!
    ", n)
    }
    案例代码

    四.删除操作

    package main
    
    import (
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "github.com/go-xorm/xorm"
        "log"
    )
    
    //结构体字段对应数据库中的表字段
    type User struct {
        Id      int64
        Name    string `xorm:"name"`
        Age     int    `xorm:"age"`
        Phone   string `xorm:"phone"`
        Address string `xorm:"address"`
    }
    
    func main() {
        /**
        配置连接数据库信息格式如下所示:
            用户名:密码@tcp(数据库服务器地址:端口)/数据库名称?charset=字符集
        */
        cmd := fmt.Sprintf("jason:yinzhengjie@tcp(172.200.1.254:3306)/golang?charset=utf8mb4")
    
        //使用上面的配置信息连接数据库,但要指定数据库的类型(我这里写MySQL)
        db_conn, err := xorm.NewEngine("mysql", cmd)
        if err != nil {
            log.Fatal(err)
        }
    
        //释放资源
        defer db_conn.Close()
    
        user := User{}
    
        //定义删除name字段为"诡术妖姬"的数据
        n, err := db_conn.Where("name = ?", "诡术妖姬").Delete(user)
        if err != nil {
            log.Println(err)
        }
        fmt.Printf("成功删除了[%d]条数据!
    ", n)
    }
    案例代码

    五.更新操作

    package main
    
    import (
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "github.com/go-xorm/xorm"
        "log"
    )
    
    //结构体字段对应数据库中的表字段
    type User struct {
        Id      int64
        Name    string `xorm:"name"`
        Age     int    `xorm:"age"`
        Phone   string `xorm:"phone"`
        Address string `xorm:"address"`
    }
    
    func main() {
        /**
        配置连接数据库信息格式如下所示:
            用户名:密码@tcp(数据库服务器地址:端口)/数据库名称?charset=字符集
        */
        cmd := fmt.Sprintf("jason:yinzhengjie@tcp(172.200.1.254:3306)/golang?charset=utf8mb4")
    
        //使用上面的配置信息连接数据库,但要指定数据库的类型(我这里写MySQL)
        db_conn, err := xorm.NewEngine("mysql", cmd)
        if err != nil {
            log.Fatal(err)
        }
    
        //释放资源
        defer db_conn.Close()
    
        //定义待更新的字段内容
        user := User{Age: 27}
    
        //定义删除name字段为"诡术妖姬"的数据
        n, err := db_conn.Where("id = ?", 1).Update(user)
        if err != nil {
            log.Println(err)
        }
        fmt.Printf("成功更新了[%d]条数据!
    ", n)
    }
    案例代码

  • 相关阅读:
    hdu 1978 How many ways
    hdu 2209 翻纸牌游戏
    hdu 2149 Public Sale (博弈规律题)
    CF 353C Find Maximum #205 (Div. 2)
    barrier and Fence
    window coordinate
    GPU hang
    the application was unable to start correctly 0xc000007b
    vertex buffer 数据结构 如何读vb的memory pool
    map
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12897588.html
Copyright © 2011-2022 走看看