GoBatis的使用
gobatis提供丰富的功能,可以像操作mybatis一样操作。mapper可以配置namespace属性
mapper可以包含: select, insert, update, delete标签
mapper的子标签id属性则为标签唯一标识, 必须配置属性
其中select标签必须包含resultType属性,resultType可以是: map, maps, array, arrays, struct, structs, value1. Mac下安装brew包管理器/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"2.安装mysqlbrew search mysql brew install mysql@5.7
按照提示配置mysql的环境变量 3.导入GoBatis的依赖go get _ "github.com/go-sql-driver/mysql" go get "github.com/wenj91/gobatis"4.创建user表create table if not exists `user`( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(40) DEFAULT "", `age` int(11) NOT NULL DEFAULT 0, `sex` tinyint(3), `phone` varchar(40), primary key (`id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; insert into user(`name`,`age`,`sex`,`phone`) values("代号0和1",28,1,1000000000);5.创建mapper类
目录是 mapper/userMapper.xml`<?xml version="1.0" encoding="utf-8"?> id, name, age, sex, phone insert into user (name, e) values (#{Name}, #{Email}, #{CrtTm}) delete from user where id=#{id} update user name = #{Name}, where id = #{Id} 6.创建配置文件。db.yml# 数据库配置 db: # 数据源名称1 - datasource: ds1 # 驱动名 driverName: mysql # 数据源 dataSourceName: root:root@tcp(127.0.0.1:3306)/hjp?charset=utf8 # 连接最大存活时间(单位: s) maxLifeTime: 120 # 最大open连接数 maxOpenConns: 10 # 最大挂起连接数 maxIdleConns: 5 # 是否显示SQL语句 showSql: true # 数据表映射文件路径配置 mappers: # 映射文件路径, 可以为绝对路径,如: /usr/local/mapper/userMapper.xml - mapper/userMapper.xml 7.测试类package main /** * created by 代号0和1 at 2021/11/24 4:54 下午 */ import ( "fmt" _ "github.com/go-sql-driver/mysql" // 引入驱动 "github.com/wenj91/gobatis" // 引入gobatis ) // 实体结构示例, tag:field为数据库对应字段名称 type User struct { Id gobatis.NullInt64 `field:"id"` Name gobatis.NullString `field:"name"` Age gobatis.NullInt64 `field:"age"` Sex gobatis.NullInt64 `field:"sex"` phone gobatis.NullString `field:"phone"` } func main() { // 初始化db,参数为db.yml路径,如:db.yml gobatis.Init(gobatis.NewFileOption("db.yml")) // 获取数据源,参数为数据源名称,如:datasource1 gb := gobatis.Get("ds1") //传入id查询Map mapRes := make(map[string]interface{}) // stmt标识为:namespace + "." + id, 如:userMapper.findMapById // 查询参数可以是map,也可以是数组,也可以是实体结构 err := gb.Select("userMapper.findMapById", map[string]interface{}{"id": 1})(mapRes) fmt.Println("userMapper.findMapById-->", mapRes, err) // 根据传入实体查询对象 param := User{Id: gobatis.NullInt64{Int64: 1, Valid: true}} var structRes *User err = gb.Select("userMapper.findStructByStruct", param)(&structRes) fmt.Println("userMapper.findStructByStruct-->", structRes, err) }