杭州--4.6

GoWeb
想在不同的包中引用结构体,结构体名和字段名必须首字母大写,否则无法使用
1.增删改查语句
增:insert user set id=?,name=?
删:delete user where id=?
改:update user set name=? where id=?
查:select * from user where id=?
2.在GoWeb中,增,删,改步骤大致相似:
先引入两个包,database/sql,_"github.com/Go-SQL-Driver/MySQL
然后 db,err := sql.Open("mysql","root:123456@tcp(192.168.1.220:3306)/test?charset=utf8"
stmt,_ := db.Prepare("insert user set id=?,name=?")
res,_ := stmt.Excu("7","lilei")
id,_ := res.LastInsertId()
fmt.Println(id)
查询语句略有不同:
先引入同样的包,然后用sql.Open()打开一个注册过的数据库驱动
然后 rows,_ := db.Query("select * from user")
遍历 for rows.Next(){
var id int
var name string
err := rows.Scan(&id,&name)
fmt.Println("id:",id,"name:",name)
}//如果直接打印rows的话,会出现一些数字串,所以用rows.Scan()转换.
3.cookie和session
cookie是由浏览器维持的,存储在客户端的一小段文本信息,伴随着用户请求和页面在Web服务器和浏
览器的之间传递.cookie如果不设置过期时间,cookie保存在内存对象中,浏览器关闭时cookie消失,称为
会话cooki;.如果设置了过期时间,则称为持久cookie,保存在硬盘中.
session是一种服务器端的机制,服务器使用一种类似散列表的结构来保存信息.当程序需要为某个客户
端请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含一个session id,如果包
含,说明session已经创建,服务器会按照session id把这个session检索出来(特殊情况,如果检索不到
则会创建).如果客户端请求不包含session id,则为此请求创建一个session并生成一个唯一标示id,
这个session id将在本次响应中返回给客户端保存.
session和cookie都是为了克服http协议无状态的缺陷.session通过cookie,在客户端保session id,
用户的其它会话消息保存在服务端的session对象中(电子商务类网站,也可以将会话数据写到文件里或
数据库中,这项会降低效率,但是更加安全).相比之下,cookie是将所有信息都保存在客户端.


beego
1.关于orm
先引入两个包,"github.com/astaxie/beego/orm"和_"github.com/go-sql-driver/mysql"
创建一个结构体type User struct{Id int;Name string `orm:"size(100)"`}
在初始函数init()中写三个函数:
//设置默认数据库,为什么用default呢,因为系统在main函数里创建 o := orm.NewOrm()以后,
会自动调用o.Using("default"),如果将default换成db1时,那在访问数据库时需要显示声明
o.Using("db1")
orm.RegisterDataBase("default","mysql","root:123456@tcp(192.168.1.220:3306)/test?charset=uft8")
//注册定义的model
orm.ResgisterModel(new(User))
//创建表,系统会检测是否存在user表,如果存在则跳过,不存在就根据结构体创建
orm.RunSyncdb("default",false,true)
在mani函数中与数据进行交互
o := orm.NewOrm()
user := User{Name:"slene"}
//insert
id,err := o.Insert(&user) //与GoWeb相比,省略了sql语句,通过对结构体赋值,然后
用orm.NewOrm().Insert(&user),利用映射关系对数据库进行操作
关于o.Insert()之类的函数返回值,对数据产生影响的返回主键名和err,查询语句只返回err.
使用o.Read()读取的时候,前面的变量user需要将主键注入,如user := User{Id:1}.当想带有条件去查询
时,orm无法满足要求,此时可以用sql查询:
var maps []orm.Params //
num,err := o.Raw("select id from user where name = ?","slene").Values(&maps)
//本例中maps == [map[id:4],map[id:5]]
if num>0{fmt.Println(maps[0]["id"])} //使用sql查询时,上面的结构体就没有用到


zcm
分析index页面controller:user.go
Get方法:
1.condition := ""
begin := this.GetString("page")
if strings.Equalfold(begin,""){begin = "1"}
timebegin := this.GetString("purchaseDatebegin") //起始时间
if timebegin != ""{condition += "and realname_time>='" + timebegin +"'"}
timeend != this.GetString(purchaseDateend") //终止时间
if timeend != ""{condition += "and realname_time<='" + timeend + ","}
firstbuy := this.GetString("firstbuy") //是否购买过
if firstbuy != ""{condition += "and is_newuser='" + firstbuy + "'"}
name := this.GetString("name") //用户姓名
if name != ""{conditon += "and verifyrealname ='" + name + "'"}
mobile := this.GetString("mobile") //手机号
if mobile != ""{condition += "and mobile ='" + mobile +"'"}


//将数据加入this.Data[]
this.Data["ft"] = timebegin
this.Data["et"] = timeend
this.Data["fb"] = firstbuy
this.Data["n"] = name
this.Data["m"] = mobile


//将begin赋值给计算后的值
count,_ := strconv.Atoi(begin)
count = (count -1)*15
begin = strconv.Itoa(count)
//将condition和计算后的begin作为参数,进入model函数,操作数据库
userli,err := models.GetUserList(condition,begin)
//在model中处理,o.Raw(sql).QueryRows(&user);return user,nil
//上面的代码同时也在controller里接收model返回的user
//下面的代码在model中传入condition, err := o.Raw(sql).Query(&count);return count,nil
//count是字符型,表示检索出的数据条数
pagecount,_ := models.GetUserCount(condition)


var page int
pagelen := 15
pagec := 0
if pagecount !=""||pagecount != "0"{
page,_ = strconv.Atoi(pagecount) //数据总数
pagec = page/pagelen //商,页数
per := page%pagelen //取余,最后一页或者第一页显示条数
if per != 0{pagec += 1} //如果有余数,则总页数加1
}
begin1 := this.GetString("page"} //再次从url获取page值
//处理关于页数的逻辑
cccc,_ := strconv.Atoi(begin1)
this.Data["max"] = strconv.Itoa(pagec)
this.Data["now"] = strconv.Itoa(cccc)
this.Data["noweq"] = cccc //标记........
this.Data["maxeq"] = pagec
this.Data["pagebefore3"] = cccc-3
this.Data["pagebefore2"] = cccc-2
this.Data["pagebefore1"] = cccc-1
this.Data["pagebefore"] = strconv.Itoa(cccc-1)
this.Data["pageafter"] = strconv.Itoa(cccc+1)
this.Data["pageafter1"] = cccc +1
this.Data["pageafter2"] = cccc +2
this.Data["pageafter3"] = cccc +3
this.Data["page1"] = "1"
this.Data["page1eq"] = 1
this.Data["page2"] = "2"
this.Data["page2eq"] = 2
this.Data["page3"] = "..."
this.Data["page4"] = strconv.Itoa(pagec - 1)
this.Data["page4eq"] = pagec - 1
this.Data["page5"] = strconv.Itoa(pagec)
this.Data["page5eq"] = pagec
this.Data["biaozhi"] = pagec - 4
if pagec > 6 {
this.Data["p6"] = pagec - 6
this.Data["p5"] = pagec - 5
this.Data["p4"] = pagec - 4
this.Data["p3"] = pagec - 3
this.Data["p2"] = pagec - 2
this.Data["p1"] = pagec - 1
}
//填充this.Data["lisg"]
this.Data["list"] = userli


//获取session中的account值,如果为空则不处理,若不为空,则进行类型转换
account := this.GetSession("account")
if account != nil{this.Data["account"] = account.(string)


this.Data["userchoose"] = "nav_curr"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值