xorm -Find方法实例
查询多条数据使用Find
方法,Find方法的第一个参数为slice
的指针或Map
指针,即为查询后返回的结果,第二个参数可选,为查询的条件struct的指针。
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"log"
"time"
)
var engine *xorm.Engine
type User struct {
Name string `xorm:"varchar(25) 'name'"`
Id int `xorm:"pk 'id' autoincr"`
CreatedAt time.Time `xorm:"created"`
}
func main() {
var err error
engine, err = xorm.NewEngine("mysql", "root:123456@/test")
if err != nil {
log.Fatal(err)
return
}
err = engine.CreateTables(User{})
if err != nil {
log.Fatal(err)
return
}
//下面插入语句第一次运行程序时运行,后面注释掉
/*
u := make([]User, 5)
u[0].Name = "abcd"
u[1].Name = "acbd"
u[2].Name = "dbac"
u[3].Name = "cbda"
u[4].Name = "bdca"
_, err = engine.Insert(u)
if err != nil {
log.Fatal(err)
return
}
*/
/* 1) 传入Slice用于返回数据
everyone := make([]Userinfo, 0)
err := engine.Find(&everyone)
pEveryOne := make([]*Userinfo, 0)
err := engine.Find(&pEveryOne)*/
users := make([]User,0)
err = engine.Find(&users)
if err != nil {
log.Fatal(err)
return
}
for i,u := range users{
fmt.Println("只传第一个参数,传入slice用于返回数据,index:",i,"user",u.Name)
}
fmt.Println()
users1 := make([]User,0)
err = engine.Find(&users1)
if err != nil {
log.Fatal(err)
return
}
for i,u := range users1{
fmt.Println("只传第一参数,传入slice用于返回数据,index:",i,"user",u.Name)
}
fmt.Println()
users2 := make([]User,0)
s2 := new(User)
s2.Name ="abcd"
err = engine.Find(&users2,s2)
if err != nil {
log.Fatal(err)
return
}
for i,u := range users2{
fmt.Println("传两个参数,传入slice用于返回数据,index:",i,"user",u.Name)
}
fmt.Println()
users3 := make([]User,0)
s3 := new(User)
s3.Name ="abcd"
err = engine.Find(&users3,s3)
if err != nil {
log.Fatal(err)
return
}
for i,u := range users3{
fmt.Println("只传第一参数,传入slice用于返回数据,index:",i,"user",u.Name)
}
fmt.Println()
fmt.Println()
/*2) 传入Map用户返回数据,map必须为map[int64]Userinfo的形式,map的key为id,因此对于复合主键无法使用这种方式。
users := make(map[int64]Userinfo)
err := engine.Find(&users)
pUsers := make(map[int64]*Userinfo)
err := engine.Find(&pUsers)*/
users4 := make(map[int64]User,0)
err = engine.Find(&users4)
if err != nil {
log.Fatal(err)
return
}
for i,u := range users4{
fmt.Println("只传第一个参数,传入map用于返回数据,index:",i,"user",u.Name)
}
fmt.Println()
users5 := make(map[int64]User,0)
s5 := new(User)
s5.Name ="abcd"
err = engine.Find(&users5,s5)
if err != nil {
log.Fatal(err)
return
}
for i,u := range users5{
fmt.Println("传两个参数,传入map用于返回数据,index:",i,"user",u.Name)
}
fmt.Println()
fmt.Println()
/*
3) 也可以加入各种条件
users := make([]Userinfo, 0)
err := engine.Where("age > ? or name = ?", 30, "xlw").Limit(20, 10).Find(&users)
*/
users6 := make(map[int64]User,0)
err = engine.Where("name > ?","baaa").Find(&users6)
if err != nil {
log.Fatal(err)
return
}
for i,u := range users6{
fmt.Println("只传第一个参数,传入map用于返回数据,index:",i,"user",u.Name)
}
fmt.Println()
/*4) 如果只选择单个字段,也可使用非结构体的Slice
var ints []int64
err := engine.Table("user").Cols("id").Find(&ints)
*/
var ints []int64
err = engine.Table("user").Cols("id").Find(&ints)
if err != nil {
log.Fatal(err)
return
}
for i := range ints{
fmt.Println("如果只选择单个字段,也可使用非结构体的Slice,index:",i)
}
}
/*
输出:
只传第一个参数,传入slice用于返回数据,index: 0 user abcd
只传第一个参数,传入slice用于返回数据,index: 1 user acbd
只传第一个参数,传入slice用于返回数据,index: 2 user dbac
只传第一个参数,传入slice用于返回数据,index: 3 user cbda
只传第一个参数,传入slice用于返回数据,index: 4 user bdca
只传第一参数,传入slice用于返回数据,index: 0 user abcd
只传第一参数,传入slice用于返回数据,index: 1 user acbd
只传第一参数,传入slice用于返回数据,index: 2 user dbac
只传第一参数,传入slice用于返回数据,index: 3 user cbda
只传第一参数,传入slice用于返回数据,index: 4 user bdca
传两个参数,传入slice用于返回数据,index: 0 user abcd
只传第一参数,传入slice用于返回数据,index: 0 user abcd
只传第一个参数,传入map用于返回数据,index: 1 user abcd
只传第一个参数,传入map用于返回数据,index: 2 user acbd
只传第一个参数,传入map用于返回数据,index: 3 user dbac
只传第一个参数,传入map用于返回数据,index: 4 user cbda
只传第一个参数,传入map用于返回数据,index: 5 user bdca
传两个参数,传入map用于返回数据,index: 1 user abcd
只传第一个参数,传入map用于返回数据,index: 3 user dbac
只传第一个参数,传入map用于返回数据,index: 4 user cbda
只传第一个参数,传入map用于返回数据,index: 5 user bdca
如果只选择单个字段,也可使用非结构体的Slice,index: 0
如果只选择单个字段,也可使用非结构体的Slice,index: 1
如果只选择单个字段,也可使用非结构体的Slice,index: 2
如果只选择单个字段,也可使用非结构体的Slice,index: 3
如果只选择单个字段,也可使用非结构体的Slice,index: 4
*/
xorm -Find方法实例的更多相关文章
- xorm -Exist方法实例
判断某个记录是否存在可以使用Exist, 相比Get,Exist性能更好. package main import ( "fmt" _ "github.com/go-sq ...
- xorm -Get方法实例
查询单条数据使用Get方法,在调用Get方法时需要传入一个对应结构体的指针,同时结构体中的非空field自动成为查询的条件和前面的方法条件组合在一起查询 package main import ( & ...
- JDBC连接MySQL 方法 实例及资料收集
JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...
- [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例 原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例 部分代码参考http ...
- php后台如何避免用户直接进入方法实例
这篇文章介绍了php后台如何避免用户直接进入方法实例,有需要的朋友可以参考一下 1)创建BaseController控制器继承Controller(后台的一切操作要继承BaseController): ...
- js生成随机数的方法实例总结 [收藏]
js生成随机数的方法实例总结 js生成随机数主要用到了内置的Math对象的random()方法.用法如:Math.random().它返回的是一个 0 ~ 1 之间的随机数.有了这么一个方法,那生成任 ...
- JS常用方法总结,及jquery异步调用后台方法实例
//前台接收get参数值 function getQueryString(name) { var queryStrings = window.location.search.sp ...
随机推荐
- 洛谷 P4316绿豆蛙的归宿
题目描述 记f[i]表示经过i号点的概率. 那么点v从点u到达的概率=经过点u的概率/点u的出度.由于v可以由多个点走到,所以f[v]+=f[u]/out[u]. 计算f的过程可以在拓扑中完成,同时可 ...
- vue-cli 中的 eslint 规则说明
"no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 & ...
- 数据结构实验之排序四:寻找大富翁(SDUT 3401)
#include <stdio.h> #include <stdlib.h> #include <string.h> void Swap(int a[], int ...
- linux常用命令--实用小技巧
>查看端口是否被启动--netstat 命令:netstat -an | grep 4445结果:如果有tcp一行则代表端口是开放的,如果没有说明没有访问权限,端口未开放 一般的,在服务器上端口 ...
- Jquery创建动态表单
$(document).ready(function(){ $("#button1").click(function(){ //获取html <body></bo ...
- 多线程 interrupt()方法
java interrupt()方法只是设置线程的中断标记,当对处于阻塞状态的线程调用interrupt方法时(处于阻塞状态的线程是调用sleep, wait, join 的线程),会抛出Interr ...
- 第07组 Beta冲刺(4/5)
队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:已经完成代码编辑器,暂时没有其他任务 展示GitHub当日代码/文档签入记录:(组内共 ...
- python opencv PyQt5
import cv2 import numpy as np import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from P ...
- 【mybatis源码学习】mybatis的反射模块
一.重要的类和接口 org.apache.ibatis.reflection.MetaClass//对于javaBean的calss类进行反射操作的代理类(获取属性的类型,获取属性的get,set方法 ...
- windows10 dos窗口输出卡住
https://blog.csdn.net/u013866090/article/details/82790864 原本每间隔一秒就会输出一次数据,但是当鼠标点击窗口的其他区域后输出就停止了,在点击键 ...