sqlxp的使用

sqlxp的使用

参考链接

github.com/jtao539/sqlxp // 我同学写的,本人没那个能力

代码

package main

import (
	"database/sql"
	"fmt"
	"github.com/jtao539/sqlxp"
)

// 字段名需大写
// User中的tag必须添加

type AnimalNULL struct {
	Name sql.NullString
	Sex  sql.NullBool
}

type Animal struct {
	Name string
	Sex  bool
}

type UserNULL struct {
	Name     sql.NullString  `db:"name" json:"name"`
	Sex      sql.NullInt64   `db:"sex" json:"sex"`
	Password sql.NullString  `db:"password" json:"password"`
	High     sql.NullFloat64 `db:"high" json:"high"`
	A        AnimalNULL  // 不能只写AnimalNULL,否则报错(局限性)
}
type User struct {
	Name     string  `db:"name" json:"name"`
	Sex      int     `db:"sex" json:"sex"`
	Password string  `db:"password" json:"password"`
	High     float64 `db:"high" json:"high"`
	A        Animal
}

func IntToNullInt64(a int) sql.NullInt64 {
	return sql.NullInt64{Int64: int64(a), Valid: true}
}

func StringToNullString(a string) sql.NullString {
	return sql.NullString{String: a, Valid: true}
}

func main() {
	// sqlxp.N2B
	usex := IntToNullInt64(1)
	uname := StringToNullString("tom")
	upassword := StringToNullString("123456")
	high := sql.NullFloat64{170.82, true}
	uNUll := UserNULL{
		uname,
		usex,
		upassword,
		high,
		AnimalNULL{
			StringToNullString("cat"),
			sql.NullBool{true, true},
		},
	}
	var u User
	// 如果前后字段类型不一致,则会跳过,例如在UserNULL中sex的类型为sql.NullInt64,在User中sex的类型为string
	sqlxp.N2B(uNUll, &u) // {tom  123456}
	fmt.Println(u)

	// tags表示要跳过的字段,此处跳过password
	var u2 User
	sqlxp.N2B(uNUll, &u2, "password")
	fmt.Println(u2) // {tom 1 }

	// sqlxp.B2N
	var n UserNULL
	sqlxp.B2N(u, &n)
	fmt.Println(n) // {{tom true} {1 true} {123456 true}}

	// sqlxp.N2BList
	usex2 := IntToNullInt64(2)
	uname2 := StringToNullString("jack")
	upassword2 := StringToNullString("123456")
	high2 := sql.NullFloat64{172.82, true}
	uNull2 := UserNULL{
		uname2,
		usex2,
		upassword2,
		high2,
		AnimalNULL{
			StringToNullString("dog"),
			sql.NullBool{true, true},
		},
	}
	var s1 []UserNULL
	s1 = append(s1, uNUll, uNull2)
	t := make([]User, len(s1))
	sqlxp.N2BList(s1, t)
	fmt.Println(t)
	//fmt.Printf("%#v\n", reflect.TypeOf(t))

	// sqlxp.B2NList
	u3 := User{"张三", 1, "123", 173.53, Animal{"老虎", true}}
	u4 := User{"李四", 1, "456", 175.65, Animal{"狮子", true}}
	var entity []User
	entity = append(entity, u3, u4)
	nullentity := make([]UserNULL, len(entity))
	sqlxp.B2NList(entity, nullentity)
	fmt.Println(nullentity)
}

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值